Raspberry Pi をmicroSDブート、SSDルートにする
前提条件
- Raspberry Pi 4B
- Raspberry Pi OS 32bit (2021-05-07-raspios-buster-armhf-lite)
USBブートできるのになぜ?
うちにあるUSB-SATA変換箱のどれを使ってもUSBブートが安定しなかったから。症状は…
- 起動してしまえば安定する
- reboot などで再起動するとほぼ確実に再起動に失敗する
やり方
概略は以下の通り
- RaspbianのイメージをmicroSDカードに焼く。
- vfatパーティションの
cmdline.txtのroot=の指定を書き換える - 起動後に
/etc/fstabを変更してmicroSDのbootをマウントする
2. cmdline.txtのルートファイルシステムの指定を書き換える
PARTUUIDの取得
microSDカードから起動してもUSBデバイスからブートしても良いので、ルートファイルシステムにしたいディスクがつながっている状態で sudo blkid を実行する。
ここでほしいのはPARTUUIDの値である。
1 | $ sudo blkid |
/dev/mmcblk... で始まる行はmicroSDカードなので無視する。
たいていの場合は、 /dev/sda2 になっていると思われる。上記の例の場合は、7a063ee3-02 が欲しい値。 これをメモしておく。
cmdline.txtの書き換え
Windowsから編集するのであれば microSDカードの cmdline.txt
microSDカードから起動しているのであれば、 /boot/cmdline.txt
USBデバイスから起動しているのであれば、
1 | sudo mkdir /mnt/tmp |
した上で、 /mnt/tmp/cmdline.txt
1 | 変更前 |
これでmicroSDカードを差した状態で起動すれば、microSDカードから起動して / がUSBデバイスな状態になります。
/etc/fstab を変更してmicroSDのbootをマウントする
USBデバイスの状態によりますが、microSDカードの中身をそのままUSBデバイスにコピーする。というパターンが多いと思います。
この場合、USBデバイス内にあるbootパーティションが /boot としてマウントされるようになっているので修正する。
/etc/fstab
1 | PARTUUID=8024d03d-01 /boot vfat defaults 0 2 |
完了
あとは普通にRPiが起動してくれば完了です。
起動したら mount | grep "/dev" で想定通りになっているか確認しておきます。
だめな例 (/bootが/dev/sdaになってしまっている)
1 | /dev/sda2 on / type ext4 (rw,noatime) |
よい例
1 | /dev/sda2 on / type ext4 (rw,noatime) |