Raspberry Pi 4BでUSB to USBクローン
USBメモリ起動のRaspberry Pi 4Bで、USBメモリ破損により起動しなくなることがしばしば発生するため、セットアップ完了時点でUSBメモリのクローンを作成したが、rpi-cloneのみではクローン先のUSBメモリで起動しなかったため、そのリカバリー記録。
【環境】
- Raspberry Pi 4B(Raspberry Pi OS Lite 64-bit)
【クローン前】
- サイズ確認
df -h /
※Usedがクローン先の容量よりも小さければ、大→小のクローンも可
- rpi-clone導入
sudo apt update
sudo apt install -y git
git clone https://github.com/billw2/rpi-clone.git
cd rpi-clone
sudo cp rpi-clone rpi-clone-setup /usr/local/sbin/
sudo apt install -y rsync dosfstools
- クローニング実施
sudo rpi-clone sdb -f
※boot領域もコピーされる
-
クローン完了
画面でEnterを押下
【クローン後】
- クローン先領域を再マウント
sudo mount /dev/sdb1 /mnt/clone-boot
sudo mount /dev/sdb2 /mnt/clone-root
- PARTUUIDをメモ
sudo blkid /dev/sdb1
⇒PARTUUIDをメモ
例)/dev/sdb1: UUID="81F4-4758" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="d36d3a57-01"
sudo blkid /dev/sdb2
⇒PARTUUIDをメモ
例)/dev/sdb2: UUID="db31c42f-235d-4ed6-ae9d-d0ad5bd3125d" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="d36d3a57-02"
- クローンされたファイルの有無確認
ls /mnt/clone-boot/
⇒何もなければファイルコピーに失敗しているので
sudo cp -r /boot/firmware/* /mnt/clone-boot/
sudo cp -r /boot/firmware/overlays /mnt/clone-boot/
- cmdline.txtの補正
sudo nano /mnt/clone-boot/cmdline.txt
※root=PARTUUID=xxxx-02 の部分を、/dev/sdb2のPARTUUIDに変更
- config.txtの確認
cat /mnt/clone-boot/config.txt
- fstabの補正
sudo nano /mnt/clone-rootfs/etc/fstab
※PARTUUID= の部分を、クローン先 sdb1, sdb2のPARTUUIDに変更
【差し替えて起動】
- 停止
sudo shutdown -P
※1分後に電源OFFしたら電源抜線
-
クローン元のUSBメモリ抜去
-
電源ON
-
起動確認
【補足】
同じ機体(Raspberry Pi)でクローン先のUSBメモリで起動するのであればMACは同じなので、同じIPアドレスを使っても大丈夫だが、異なる機体で起動する場合はマシンIDの初期化
sudo rm /mnt/clone-root/etc/machine-id
sudo touch /mnt/clone-root/etc/machine-id
や、SSH有効化
sudo touch /mnt/clone-boot/ssh
が必要か。
ホスト名の重複対策は
sudo nano /mnt/clone-root/etc/hostname
【後記】
ファンレスで運用しているせいか、体積の小さいUSBメモリだと熱で(モデルによってはImagerでイメージを焼いただけで)壊れる。かといって、体積の大きいものを使うと、誤って何かに引っ掛かって抜ける、曲がる、折れるといった事故が発生。抜本対策が必要。
今回はCopilotに聞いて(従って?)対応。生成AIの進歩を実感。
Discussion