USB Boot - h-sendai/RaspberryPi GitHub Wiki

Raspberry Pi USB Mass Stroage Boot

USBメモリ、USBディスク、USB SSDなどUSB接続ストレージからブートする 方法をまとめておく。

URL

各Raspberry PiでのUSB mass storageからのブート方法については以下のURLに まとめられている:

https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-boot-modes

RPi 4B

2020-09-03およびそれ以降のEEPROMブートローダを使うこと。sudo vcgencmd bootloader_versionで確認できる。なっていない場合は

apt update
apt upgrade
apt full-upgrade
reboot

RPi 3B+

すでにUSBブートできるようになっている。

RPi 3B, 2B v1.2

One-time Programmable (OTP)メモリの書き換えが必要。

root# vcgencmd otp_dump | grep 17:
17:3020000a

となっていればUSBブートが可能になっている。なっていない場合は SDカードの/boot/config.txtprogram_usb_boot_mode=1を 追加して起動する。起動後、上のvcgencmd otp_dumpを実行して 確認する。

ストレージの用意

USBメモリにddでイメージを書く

Linux PCを使ってSDカードに書くのと同様にddコマンドで書く。 pvコマンドを併用すると書き込み状況がわかる。

pv lite-image.img | dd of=/dev/sdg bs=1M iflag=fullblock oflag=direct

手もとにあるUSBメモリで試してみたがRPi 3では

  • バッファロー 4GBのもの 起動せず
  • グリーンハウス 8GBのもの 起動した という結果だった。RPi+では両方で起動した。なにかのタイミングの問題?

SDカードをコピーする例

https://www.raspi.jp/2016/08/rpi3-and-pidrive-usbboot/ を見た。

SDカードからブート、USB機器を接続しファイルシステムを作成、 SDカードの中身をコピーする。SDカードにrsyncがはいっていなければ いれておく。

parted /dev/sda
(parted) mktable msdos
(parted) mkpart primary fat32 0% 100M
(parted) mkpart primary ext4 100M 100%
(pqrted) quit

mkfs.vfat -n BOOT -F 32 /dev/sda1
mkfs.ext4 /dev/sda2

mount /dev/sda2 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

rsync -ax / /boot /mnt

コピー後/mnt/etc/fstab、/mnt/cmdline.txtのPARTUUIDを
USBストレージのものに変更する。blkid /dev/sda1、
blkid /dev/sda2でPARTUUIDが取得できる。

Rasbpberry Pi OSイメージファイルから起動

USBメモリに2021-01-11-raspios-buster-armhf-lite.imgを

pv 2021-01-11-raspios-buster-armhf-lite.img | dd of=/dev/sdg bs=1M iflag=fullblock oflag=direct conv=fsync

で書いて(pvコマンドはddの進捗状況がわかるようにするために使った) SDカードをぬいたRaspberry Pi 3B+に接続しブートしてみた。 SDカード同様、最初のブートでディスク領域をメディアいっぱいに広げ、 自動でリブートした。

SSD USBデバイス

たとえば BuffatoのUSB接続SSD https://www.buffalo.jp/product/detail/ssd-pst1.0u3-ba.html は小さくてよいのではないか(使ったことはない)。