ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Raspberry PiでUSBブートする(2B,3Bモデルなど)

なぜmicroSDブートではダメなのか

microSDは衝撃に弱いですし、小さくてなくしがちです。 読み書きできる回数も決まっていますし、相性問題もよく起こりますから。

相性問題のよくある例はデータの読み書きは普通にできるのに、ラズパイのOSブート用として使うとOSがなかなか起動しなかったり、連続してデータを書き続けると書き込みエラーが発生してmicroSDが読み取り専用になったりするなどです。この場合、フォーマットして書き込み直すと復活する場合もありますが、損傷度合いによってはダメかもしれません。

他にもいろいろ起きたことがありますが、多すぎて書けないのでここらへんにしておきます。

一方、USBメモリースティック(以下USBメモリー)はそれなりの強度がありますし、相性問題はほとんどありません。 (読み書きできる回数的に)より安心するなら、USB接続のHDDとかSSDを使うという選択肢もあります。

作業方法

方法は以下の公式ドキュメントに書かれていました。ちなみにラズパイ3B+の場合はデフォルトでUSBブートが使えるようになっているため、本記事のような設定は不要です。

www.raspberrypi.org

基本的に次のような流れでUSBブートを有効にできるようです。 microSDにRaspbian Liteを書き込んだものを用意して、起動後に/boot/config.txtに下記の設定を書き込むか、書き込んだイメージをマウントして/boot/config.txtに事前に設定を書き込みます。

再起動するときにUSBブートを許可するようにとROMに書き込まれるそうです。 なお、USBブートを有効にした後の起動優先順ですが、microSDの優先度が高く設定されています。 したがって、microSD、その他のUSBデバイスの順にOSを探しにいくようになります(つまり、USBブートしたければmicroSDは取り出しておく必要があるということ)。

作業手順

  • microSDに「Raspberry Pi OS Lite」を書き込む
  • microSDをマウントして、/boot/config.txt (注1) の末尾に書き込む
program_usb_boot_mode=1
program_usb_boot_timeout=1
  • 一旦再起動 sudo reboot
  • 再起動が終わったらシャットダウン sudo shutdown -h now
  • microSDカードをラズパイ から取り出す
  • イメージ書き込みしたUSBストレージを接続して、電源投入 (注2)

USBストレージへのOS書き込みはmicroSDに書き込むのと同じように、書き込み先としてUSBストレージを指定した後は従来のように書き込むだけです。EtcherとかRaspberry Pi Imagerなどを使って書き込めばいいと思います。

Raspberry Pi 4では?

Raspberry Pi 4については、上記手順では2020/07/17時点では対応できません。現時点で標準提供されるEEPROMよりも新しいバージョンが必要なためです。

Raspberry Pi OSのEEPROMはdebパッケージで順次提供されるようなので、もう少し待つ方が適切みたいです。

どうしてもやってみたい場合は、 こちらの情報を確認してみてください(GPUファームウェアのアップデートも必要なので難易度は高いです。文鎮にしてしまう可能性があるので、debパッケージがaptで落ちてくるまで待つのが適切です)。


注1: macOSの場合は /Volumes/boot/config.txt としてマウントされます。

注2: こちらのイメージに program_usb_boot_mode=1 などを書き込む必要はありません。先のステップによりROMに書き込みが完了しているためです。

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。