2017-03-10

USBデバイスからRaspberry Piを起動

Raspberry Pi 3 Model B では、「SDカードレスでUSBマスストレージデバイスから起動できるようになった」と聞いたのは、かなり前のことである。いまさら満を持して amazon.co.jp で簡単に入手できる次の2品を買って試してみることにした。

容量は小さくて(数百GBで十分)いいし、Raspberry PiのUSBポートはUSB 2.0規格で給電能力も低いので、ACアダプター付きのハードディスクドライブが欲しいところだが、残念なことに、きょうびUSB 3.0接続が前提でACアダプターなし容量1TB以上の製品が大半だ。しっくりくるものがない。

海外には WD PiDrive というRaspberry Pi用に作られたUSB接続で容量が314GBの洒落たハードディスクがあるらしい。が、そんなもの家電量販店じゃ売ってないので、ウチらの住んでる日本の田舎ではおいそれとは手に入らない。

インターネット上の情報では、config.txtの設定でUSBポートの最大電流を上げればポータブルハードディスクもACアダプターなしでOKみたいな記事を見かけるけれど、いや、それ大丈夫じゃないよね(^^; そんなことで不安定になられても困るので、あたしゃACアダプターを付けますよ。

さて、それではUSBストレージから起動するための設定に取り掛かろう。 ここでは、OSイメージとして 2017-03-02-raspbian-jessie-lite.zip を使った。

まず、いつも通りSDカードから起動して、

$ sudo apt-get update

システムを最新の状態にする。

/boot/config.txt ファイルの末尾に program_usb_boot_mode=1 という項目を追加して、再起動する。

$ echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
$ sudo reboot

OTP (One Time Programmable) メモリーの内容が 17:3020000a になっていることを確認する。

$ vcgencmd otp_dump | grep 17:
17:3020000a

問題なければ、さきほど追加した /boot/config.txt の program_usb_boot_mode=1 の行を削除する。

これでUSBブートモードが有効になった。

あとは、SDカードと同様のパーティション構成を持つ起動用のUSBストレージを用意すればよい。

起動用USBストレージ上の設定ファイル /boot/cmdline.txt と /etc/fstab では、ルートファイルシステムを指定している記述部分 mmcblk0p2 を sda2 に変更しておくのを忘れずに。

手っ取り早く試したければ、RaspbianのシステムイメージをddしたUSBハードディスクをRaspberry Piに接続して、次のようにする。

# mkdir /mnt/boot
# mkdir /mnt/root
# mount /dev/sda1 /mnt/boot
# mount /dev/sda2 /mnt/root
# sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/boot/cmdline.txt
# sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/root/etc/fstab

一旦シャットダウンして、SDカードを抜き取り、電源を再投入する。

しばらく待つと、SDカードなしの状態で、USBハードディスクから起動する。 ただし、このままだとファイルシステム(パーティション)の自動拡張に失敗するので手動で設定を行うこと。 エラーが気になる場合は cmdline.txt の quiet init=/usr/lib/raspi-config/init_resize.sh の部分を削除しておく。

RasPiとの相性(?)があるのか、USBハードディスクドライブや、USBフラッシュドライブ(USBメモリー)の種類よってはブートできないものもあるようだ。

0 件のコメント:

コメントを投稿