kuroの覚え書き

96の個人的覚え書き

Raspberry Pi BをUSB起動にする

今更ながらRaspberry Piでマインクラフトをやってpythonでゴニョゴニョやってみたくなった。
SDカードで起動していると結構な頻度でSDカードが昇天するので、USBからの起動に切り替えてみる。

まずRaspbianの最新imgをダウンロード
https://www.raspberrypi.org/downloads/raspbian/

解凍用にthe Unarchiverも用意
http://wakaba.c3.cx/s/apps/unarchiver.html

ダウンロードしたzipファイルをthe Unarchiverで解凍

今回使用するのは32GBのUSBメモリ。ディスクの信頼性を考えるならSSDとかHDDのほうがいいんだけど手元にちょうどいいものがないのとPi2のUSB給電がショボいので。
まずは状況確認

$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *320.1 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            319.1 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *31.3 GB    disk1
   1:                        EFI EFI                     209.7 MB   disk1s1
   2:       Microsoft Basic Data                         31.0 GB    disk1s2

/dev/disk1にUSBメモリは認識されている
以下のように書き込み。書き込み中は何も表示されず、かつそこそこ時間がかかる。

$ diskutil unmountDisk /dev/disk1
Unmount of all volumes on disk1 was successful

$ sudo dd bs=1m if=/Users/hoge/2017-07-05-raspbian-jessie.img of=/dev/disk1
4445+1 records in
4445+1 records out
4661483821 bytes transferred in 2831.144647 secs (1646501 bytes/sec)

書き込みの結果

$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *320.1 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            319.1 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.3 GB    disk1
   1:             Windows_FAT_32 boot                    43.7 MB    disk1s1
   2:                      Linux                         4.6 GB     disk1s2

4.6GのLinuxパーティションができた。

ここで一旦Raspberry PiにminibianをインストールしたSDで起動しUSBメモリも差して

$ sudo blkid
/dev/mmcblk0p1: SEC_TYPE="msdos" UUID="xxxx-xxxx" TYPE="vfat"
/dev/mmcblk0p2: UUID="********-****-****-****-**************" TYPE="ext4"
/dev/mmcblk0: PTTYPE="dos"
/dev/sda1: LABEL="boot" UUID="xxxx-xxxx" TYPE="vfat" PARTUUID="xxxxxxxx-01"
/dev/sda2: UUID="********-****-****-****-**************" TYPE="ext4" PARTUUID="xxxxxxxx-02"

/dev/sda2のPARTUUIDを調べ、
USBメモリ(boot)の中のcmdline.txtを編集

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=xxxxxxxx-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles

bootの中身をごっそりとSDカード(ブート用のSD)にコピー。
出来上がったSDとUSBをPiにセットして起動・・・できない。
一旦PARTUUIDで起動するのはやめにして
おとなしく/dev/sda2をrootに指定してかつ、init=を消す。ここは後で手動で行う。
splashも必須ではない。

設定
まずはGUIが開くのでlocaleやパスワードなどいじる。

ddでディスクイメージをコピーすると、パーティションがimgファイルと同じになってしまい、空き容量もちょっとしか残ってないいので、パーティションの拡張を行いたい。
fdiskでパーティションマップを書き換えたらいいと思うのだが・・・
どうもうまくいかない。
書き換えるとmagicなんたらが見つからないというエラーが出て、usbディスクを認識できなくなってしまうのだ。

USBメモリにddでコピー→boot領域をSDに移動→cmdline.txtのroot=を/dev/sda2に変更、initd=以下を削除でちゃんと起動できることは確定。
usbの/のパーティションUSBメモリ容量いっぱいまで拡張するため
そのままfdisk→X パーティションが壊れる
minibianの入ったSDで起動し、GNU partedでパーティション拡張→一応拡張には成功し、起動はできるが、起動シークエンス中に[Failed]が幾つか起こり、emergency modeで起動、書き込み等が一切出来ずxwindowも開けず。←いまここ

試してみること
USBメモリ2つにddでインストールし、一つで起動し、gpartedを入れてもう一個のUSBメモリパーティションを拡張。

追記
おとなしく8GBのSDカードを500円で買ってきた。class10UHS−1で40MB/sの読み出し速度らしいが、どうだろうか?
これまた日和ってnoobs LITEでネットインストールしたところ、不具合なく起動できることが確認された。
ある程度環境が整ったところでおもむろにUSBメモリをさし、ddで/パーティションをまるっとコピーした。
RaspbianのバージョンとしてはIMGファイルのそれと全く同一のはずなので、boot領域だけコピーしたSDとUSBメモリが刺さった状態で起動してみた。
結果、やっぱり途中でエラーが出てemergency modeに落ちてしまう。
もうちょっと何か工夫がいるようだ。てか8GBのSDで起動できるようになったんだから、そこまで頑張らなくてもという気もする。

追記の追記
/etc/fstabをちゃんと書いたらエラーなく起動することがわかった。