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.txt
にprogram_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 は小さくてよいのではないか(使ったことはない)。