Raspberry Pi 3/4 で USB Boot する
既に至るところに類似の記事があり、散々擦られているネタですが、自分なりに纏めておく。
環境
- board: Raspberry Pi 3 B
- OS: Raspbian buster 32bit (Raspberry Pi OS)
ホストPC環境として、Ubuntu 22.04。
以下のツールを使うため。
- GNOME Disks (GUI)
- GParted (GUI)
- blkid (CUI)
目標
sdcard 32GB と USB メモリ 256GB で運用していた環境を、USB メモリ 1 本に一本化する
作業
USB Boot を有効化する
USB Boot を無効から有効にするために、SD カードによるブートが必要。
Raspberry Pi 上で Raspberry Pi OS を起動し、必要に応じてハードの設定を書き換える。詳細は別の方の記事を見てください。
$ vcgencmd otp_dump | grep 17:
17:1020000a
$ sudo echo "program_usb_boot_mode=1" >> /boot/config.txt
$ sudo echo "program_usb_boot_timeout=1" >> /boot/config.txt
$ sudo reboot
$ vcgencmd otp_dump | grep 17:
17:3020000a
USB メモリにイメージを書き込む
SD カードと USB メモリをホストPCに接続する。勝手にマウントするので、 GNOME Disks を開いてアンマウントする。
GParted を開いて、Resize/Move したりコピーペーストしたりして調整する。
exfat 等のファイルシステムは調整できないので、ext4にフォーマットする。
特に boot パーティションのフラグがコピー元と同じか確認しておく。
UUID の確認
USB メモリの各パーティションの UUID と PARTUUID を blkid
コマンドで確認する。
パーティションごとコピーしたため UUID が同一になってしまっているが、PARTUUID を使うので無視する。PARTUUID を控えておく。
# 一部置き換えています
/dev/sda1: LABEL_FATBOOT="boot" LABEL="boot" UUID="X111-111X" TYPE="vfat" PARTUUID="bbbbbbbb-01"
/dev/sda2: UUID="yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" TYPE="ext4" PARTUUID="bbbbbbbb-02"
/dev/sda3: LABEL="rootfs" UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4" PARTUUID="bbbbbbbb-03"
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="X111-111X" TYPE="vfat" PARTUUID="aaaaaaaa-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4" PARTUUID="aaaaaaaa-02"
/boot/cmdline.txt の書き換え
boot パーティションの /cmdline.txt
に、どのパーティションを rootfs にするか設定されている。
USB メモリの boot パーティションをマウントし、sudo 権限でテキストエディタを開く。
root=PARTUUID=aaaaaaaa-02
が SD カードのパーティションになっているので、USB メモリのパーティションに置き換える。
$ sudo gedit /media/mai/boot/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=aaaaaaaa-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
/etc/fstab の書き換え
忘れがちなやつ。not syncing VFS unable to mouant root fs on
... と画面に出たらこれが原因のことが多い。
rootfs パーティションの /etc/fstab
にマウント情報が記載されている。
USB メモリの rootfs パーティションをマウントし、sudo 権限でテキストエディタを開く。
SD カードのパーティションが記載されているので、USB メモリのパーティションに置き換える。
$ sudo gedit /media/mai/rootfs/etc/fstab
proc /proc proc defaults 0 0
PARTUUID=aaaaaaaa-01 /boot vfat defaults 0 2
PARTUUID=aaaaaaaa-02 / ext4 defaults,noatime 0 1
起動
SDカードを外したまま USB メモリを刺して、電源を入れる
Discussion