☀️

Raspberry Pi 4BでUSB to USBクローン

に公開

USBメモリ起動のRaspberry Pi 4Bで、USBメモリ破損により起動しなくなることがしばしば発生するため、セットアップ完了時点でUSBメモリのクローンを作成したが、rpi-cloneのみではクローン先のUSBメモリで起動しなかったため、そのリカバリー記録。

【環境】

  • Raspberry Pi 4B(Raspberry Pi OS Lite 64-bit)

【クローン前】

  1. サイズ確認
df -h /

※Usedがクローン先の容量よりも小さければ、大→小のクローンも可

  1. 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
  1. クローニング実施
sudo rpi-clone sdb -f

※boot領域もコピーされる

  1. クローン完了
    画面でEnterを押下

【クローン後】

  1. クローン先領域を再マウント
sudo mount /dev/sdb1 /mnt/clone-boot
sudo mount /dev/sdb2 /mnt/clone-root
  1. 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"

  1. クローンされたファイルの有無確認
ls /mnt/clone-boot/

⇒何もなければファイルコピーに失敗しているので

  sudo cp -r /boot/firmware/* /mnt/clone-boot/
  sudo cp -r /boot/firmware/overlays /mnt/clone-boot/
  1. cmdline.txtの補正
sudo nano /mnt/clone-boot/cmdline.txt

※root=PARTUUID=xxxx-02 の部分を、/dev/sdb2のPARTUUIDに変更

  1. config.txtの確認
cat /mnt/clone-boot/config.txt
  1. fstabの補正
sudo nano /mnt/clone-rootfs/etc/fstab

※PARTUUID= の部分を、クローン先 sdb1, sdb2のPARTUUIDに変更

【差し替えて起動】

  1. 停止
sudo shutdown -P

※1分後に電源OFFしたら電源抜線

  1. クローン元のUSBメモリ抜去

  2. 電源ON

  3. 起動確認

【補足】

同じ機体(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