底なし沼のミュージックストア

好きなもの(特に音楽)について書いてあるでことでしょう。音楽は売ってません。たまに技術的な話。

Raspberry Piの起動ディスクをポータブルHDDにした

苦労だらけだったので共有しておいた方が良いのかなと思いまして、いくつかつらつらと残しておきます。

目次

  1. 参考にした
  2. 使った
  3. 手順
    1. Raspbianを焼く
    2. RPiのUSBポートを1.2A出力対応させる
    3. HDDのパーティションを割る(その前に)
    4. (今度こそ)HDDのパーティションを割る
    5. rootパーティションの中身を/dev/sda1に移す
    6. 起動時にHDDをrootとして自動マウントさせる

使った

  • Raspberry Pi (Model B+)
    • 主役その1。
  • I-O DATA HDPC-UT500S
    • 主役その2。以前外部ストレージとして使っていたものの、諸事情により退役させたもの。
  • pqiのmicroSDカード 2GBと16GB
    • あきばおーで一番安くて容量小さいのがこれだった。16GBのは借り物。
  • cheero Power Plus DANBOARD version
    • 最近めっちゃ種類が出てるダンボーバッテリーの初代モデル。2回目の注文受付くらいの時に買った。
  • MacBook (13inch, Late 2007)
    • Snow Leopardから進化できないけど我が家では現役機。
  • Ubuntu 12.04 Live disc
    • あって嬉しいLinux Live Disc。これを使ってちょっと 楽をした

手順

Raspbianを焼く(昔やった)

雑魚なのでNOOBS使いました。

  1. ここから「Offline and network install」の方を選んで落とす。容量の割に重い。
  2. zip展開したらFATでフォーマットしたSDに中身をぶち込む
  3. DVDプレイヤーに刺さってたHDMIケーブルを抜いてRPiに刺して起動。キーボードとかはこいつが便利です。
  4. 画面に従って焼く

見出しの通り、この行程はB+を買う前にBを借りて使っていたので、今回はやってません。
ついでに言うと、2GBのSDにはOS焼けないっぽいので注意だ。
そしてここでNOOBSを使ったことによってめんどくささが増したのでありました。

RPiのUSBポートを1.2A出力対応させる

今までのRaspberry Piでは、USBポートには0.6Aが出力されるそうで、これだと普通のUSBフラッシュメモリなんかなら普通に動くが、ポータブルHDD(USBから電源供給するやつ)には電力が足りず、ディスクがスピンアップしないらしい。
B+モデルは電源から2A供給されている場合、USBポートに1.2Aまで供給できるようになったので、ポータブルHDDも行けるで!とのこと。
しかしデフォルトでは0.6Aに制限された状態らしく、configをいじる必要があるらしいのでいじる。

raspi-configとかapt-get update / upgradeとか済んでる前提です。
私はvim派でもemacs派でもなくnano派なので、この先エディタは全てnanoを使ってますが、好みによって好きにすると良いと思います。
sshでもRPi直でも良いのでログインして

sudo nano /boot/config.txt

末尾に以下の文言を追加。

safe_mode_gpio=4
max_usb_current=1

これでRaspberry PiにHDPC-UT500を接続できます。

HDDのパーティションを割る(その前に)

このページを参考にHDPC-UT500のパーティションを割っていく。
そのためにはRPiにHDPC-UT500を差す必要があるが、当時手元に2.0A以上出力できるACアダプタがなかったので、ダンボーバッテリー君に出動してもらう。

んでもって、まずは参考ページ通りに、差す前の状態で sudo fdisk -l する。

pi@raspberrypi ~ $ sudo fdisk -l
Disk /dev/mmcblk0: 16.0 GB, 16001269760 bytes
4 heads, 16 sectors/track, 488320 cylinders, total 31252480 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006d088

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192     1292968      642388+   e  W95 FAT16 (LBA)
/dev/mmcblk0p2         1294336    31186943    14946304   85  Linux extended
/dev/mmcblk0p3        31186944    31252479       32768   83  Linux
/dev/mmcblk0p5         1302528     1425407       61440    c  W95 FAT32 (LBA)
/dev/mmcblk0p6         1433600    31186943    14876672   83  Linux

……めっちゃパーティションわかれてるよオイィ……
めんどくさそうな匂いがこの辺りでぷんぷんしてきました。
NOOBSではなくddコマンド辺りを使ってインストールしてあげるとこの辺かなり楽らしいです。

続いてマウント状態を確認する為に cat /etc/fstab しましょう

pi@raspberrypi ~ $ cat /etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p5  /boot           vfat    defaults          0       2
/dev/mmcblk0p6  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, so no using swapon|off from here on, use  dphys-swapfile swap[on|off]  for that

最後の行でなんか怒ってるけど気にしてはいけない。
末尾5が/bootに、末尾6がrootとしてマウントされていることがわかりました。

じゃあ他は??

pi@raspberrypi ~ $ sudo mount /dev/mmcblk0p1 /mnt
pi@raspberrypi ~ $ cd /mnt
pi@raspberrypi /mnt $ ls
BUILD-DATA                  bootcode.bin  recovery.cmdline  recovery.rfs
INSTRUCTIONS-README.txt     defaults      recovery.elf      riscos-boot.bin
RECOVERY_FILES_DO_NOT_EDIT  os            recovery.img
pi@raspberrypi ~ $ sudo mount /dev/mmcblk0p3 /mnt
pi@raspberrypi ~ $ ls /mnt
installed_os.json  lost+found  noobs.conf

ん〜〜わかんない☆
/dev/mmcblk0p1についてはRaspbianを焼く時に入れたNOOBSのファイルです。
/dev/mmcblk0p3は勉強不足で申し訳ないですがわからないです。

(今度こそ)HDDのパーティションを割る

HDDを差すと大抵の場合/dev/sdaとして認識されるはず。
参考ページ通りに sudo fdisk /dev/sda を使って割ってくのも良いけど、『何回かパーティションを作ったり消したりを繰り返してサイズを調整してます。』とあるように、コマンドラインでいちいちやるのはめんどくさい。
ここで登場するのがUbuntuのLive disk。
UbuntuのLive diskにはGPartedという素晴らしいディスク管理ツールがある*1ので、こいつで割っちゃった方が早くね?という魂胆である。
いかにも雑魚っぽい思考回路ではあるが、GUIに慣れ親しみすぎて抜け出せない世代なのでご容赦いただきたい。

と言う訳で、MacBookにいそいそとrEFItを導入、LiveDiskを挿入し、のんびりと起動を待って参考ページと同じ様な構成でパーティションを割る。


こんな感じ。(このあとiTunes用にパーティションを増やしたので下と差異有り)
f:id:switchback_sus4:20140909143028p:plain
これをもう一度Raspberry Piに接続し、sudo fdisk -l で確認してみる。

pi@raspberrypi ~ $ sudo fdisk -l

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005b867

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    33556479    16777216   83  Linux
/dev/sda2        33556480   976773119   471608320    5  Extended
/dev/sda5        33558528   243273727   104857600   83  Linux
/dev/sda6       243275776   972578815   364651520   83  Linux
/dev/sda7       972580864   976773119     2096128   82  Linux swap / Solaris

やっとこさパーティション割りが終わった。

rootパーティションの中身を/dev/sda1に移す

素直にddコマンド使いましょ
参考ページにあるコマンドを
NOOBS仕様に書き換えてそのままッターーン

sudo dd if=/dev/mmcblk0p6 of=/dev/sda1 bs=32M conv=noerror,sync

んでもって同じくエラーチェック・修復とパーティション広げをやる

sudo e2fsck -f /dev/sda1
sudo e2fsck -f /dev/sda1
sudo resize2fs /dev/sda1

そしたら一応マウントして中身を確認。
ここではデフォルトで用意されている/mntディレクトリにマウントしているけど、適当なディレクトリ作ってそこにマウントしてももちろんOK。

sudo mount -t ext4 -o defaults /dev/sda1 /mnt
df -h

マウントしたら後でちょっといじるのでアンマウントせずにそのままで。

起動時にHDDをrootとして自動マウントさせる

これまた参考ページ通りに。

sudo cp /boot/cmdline.txt /boot/cmdline.txt.bak
sudo nano /boot/cmdline.txt

「root=/dev/mmcblk0p6」となっている部分を「root=/dev/sda1」に書き換える。

sudo nano /mnt/etc/fstab

3行目辺りの「/dev/mmcblk0p6」を「/dev/sda1」に書き換える。

ここまで出来たら再起動かけて実際にHDDから起動させてみましょう。
このときはディスプレイ繋いでコンソール確認しながらやるとミスってた時に原因がなんとなくわかるんじゃないでしょうか。

sync;sync;sync
sudo reboot

無事に起動したらログインしてちゃんとマウントされているか確認。

df-h

ファイルシス   サイズ  使用  残り 使用% マウント位置
rootfs            16G  5.2G  9.7G   36% /
/dev/root         16G  5.2G  9.7G   36% /
devtmpfs         215M     0  215M    0% /dev
tmpfs             44M  6.4M   38M   15% /run
tmpfs            5.0M     0  5.0M    0% /run/lock
tmpfs            497M     0  497M    0% /run/shm
/dev/mmcblk0p5    60M  9.4M   50M   16% /boot

とりあえずここまで。
続きは今度

*1:HDDなどにインストールされた状態だとプリインストールされていない(ソフトウェアセンターで落とせる)