2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラズパイのSDカードをバックアップする

2
Posted at

はじめに

ラズパイのSDカードが破損して起動しないトラブルを経験したので、バックアップをしてみました。その方法をまとめます。以下の記事を参考にしました。ペロペロ坊主さん https://zenn.dev/peroperofangzhu ありがとうございました。

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

前提条件

ハードウェア:Raspberry Pi 5
OS:最新の Raspberry Pi OS(Bookworm)
元 SD カード:オリジナルのブート済み SD
コピー先 SD / USB:29GB SD、ブート用にコピー作業
使用ツール:rpi-clone v0.4.x
作業環境:元 SD は Pi に挿入、コピー先 SD は USB 接続

注意点:
rpi-clone はパーティションコピー + 基本ファイル同期のみ。
USB ブート用に cmdline.txt と fstab の PARTUUID 修正が必須
 (fstab は、手作業しなくても修正済みだった)

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

コピー先SDの確認

以下で、コピー先のSDカードの情報を確認します。

lsblk -o NAME,SIZE,MODEL,MOUNTPOINT

以下が表示されます。mmcblk0 は現在起動しているラズパイのSDカードです。/ や /boot があります。sda はコピー先の SDカードです。サイズ違いOKです。

NAME SIZE MODEL MOUNTPOINT
loop0 2G
sda 29.1G STORAGE DEVICE
└─sda1 29.1G /media/pi/BC33-D781
mmcblk0 116.4G
├─mmcblk0p1 512M /boot/firmware
└─mmcblk0p2 115.9G / zram0 2G [SWAP]

クローン開始

rpi-clone を管理者で起動します。sda はコピー先のSDカードです。-f は強制モードで、コピー先ディスクを完全に消去して上書きします。

sudo rpi-clone sda -f

以下が表示されるので、yes を入力します。
内容は、コピー先の sda1 がマウントされているため、rpi-clone がアンマウントしていいかを確認しています。

Destination disk partition /dev/sda1 is mounted on /media/pi/BC33-D781. The clone cannot proceed unless it is unmounted. Do you want to unmount /media/pi/BC33-D781? (yes/no):

色々表示され、コピー先の sda を初期化してクローンを作っていいかをきかれるので、yes を入れます。
次に、コピー先にラベルをつけるか聞かれます。今回はつけないので、Enter を押下します。
ラベルつけたければ、16文字以内で入力します。

...
Initialize and clone to the destination disk sda?  (yes/no): yes
Optional destination ext type file system label (16 chars max): 

以下のように表示が続きます。途中の
Editing /mnt/clone/etc/fstab PARTUUID to use a22681fa
で、fstab は PARTUUID が新たな値に書き換えられていることがわかります。

最後に Enter 押下の指示がでます。そうすると、sda がアンマウントされます。
(ただし、ファイルマネージャー上はマウントされているようにみえます)

Initializing
 Imaging past partition 1 start.
 => dd if=/dev/mmcblk0 of=/dev/sda bs=1M count=12 ...
 Resizing destination disk last partition ...
 Resize success.
 Changing destination Disk ID ...
 => mkfs -t vfat -F 32 /dev/sda1 ...
 => mkfs -t ext4 /dev/sda2 ...
 
 Syncing file systems (can take a long time)
 Syncing mounted partitions:
 Mounting /dev/sda2 on /mnt/clone
 => rsync // /mnt/clone with-root-excludes ...
 Mounting /dev/sda1 on /mnt/clone/boot/firmware
 => rsync /boot/firmware/ /mnt/clone/boot/firmware ...
 
 Editing /mnt/clone/etc/fstab PARTUUID to use a22681fa
 ===============================
 Done with clone to /dev/sda
 Start - 09:19:22 End - 09:30:06 Elapsed Time - 10:44
 Cloned partitions are mounted on /mnt/clone for inspection or customizing.
 Hit Enter when ready to unmount the /dev/sda partitions ...

クローン終了後の手作業

アンマウントされた、/dev/sda1 および /mnt/clone-boot 、/mnt/clone-rootをマウントします。

sudo mount /dev/sda1 /mnt/clone-boot

しかし、/mnt/clone-boot という名のディレクトリであるマウントポイントが存在しないと表示されました。

mount: /mnt/clone-boot: mount point does not exist.t dmesg(1) may have more information after failed mount system call.

そこで、自分で作りました。そうしたら、マウントできました。

sudo mkdir -p /mnt/clone-boot
sudo mount /dev/sda1 /mnt/clone-boot 

同様に、clone-root もやりました。

sudo mkdir -p /mnt/clone-root
sudo mount /dev/sda2 /mnt/clone-root

その結果、中身をみることができました。

ls /mnt/clone-boot

中身は以下の通りです。しかし、clone-boot にあるべき kernel8.img や cmdline.txt がありません。
そのため、このままでは起動できません。

clone-boot clone-root

そこで、元のSDカードからコピーします。以下の方法で、/mnt/clone-boot/ に必要なファイル群の kernel8.img、cmdline.txt、config.txt などが入ります。

sudo cp -r /boot/firmware/* /mnt/clone-boot/
sudo cp -r /boot/firmware/overlays /mnt/clone-boot/

確認します。kernel8.img、cmdline.txt、config.txt その他が入っていました。

ls /mnt/clone-boot

次に、/mnt/clone-boot/cmdline.txt の PARTUUID を a22681fa-02 に書き換えます。

sudo geany /mnt/clone-boot/cmdline.txt

config.txt は修正不要でしたが、確認だけします。

cat /mnt/clone-boot/config.txt

次に、clone-root の中身を確認します。

ls /mnt/clone-root

以下のように正常です。

 bin dev home lost+found mnt proc run srv tmp var boot etc lib media opt root sbin sys usr

参考記事では、/mnt/clone-root/etc/fstab を編集して、PARTUUID を a22681fa-01, a22681fa-02 に書き換えるとありましたが、すでに書き換わっていました。なので、確認だけです。

cat /mnt/clone-root/etc/fstab

修正すべき PARTUUID はクローン時に表示されますが、見落としていたら以下のように確認できます。
/dev/sda1 の PARTUUID は以下で確認できます(a22681fa-01)。

sudo blkid /dev/sda1
/dev/sda1: UUID="B144-2BF7" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="a22681fa-01"

/dev/sda2 の PARTUUID は以下で確認できます(a22681fa-02)。

sudo blkid /dev/sda2
/dev/sda2: UUID="86354c08-52c1-40e8-b0aa-8ddd22cb4941" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="a22681fa-02"

以上で作業は終了なので、コピー先のSDをアンマウントします。

sudo umount /mnt/clone-boot
sudo umount /mnt/clone-root

後は通常通りにシャットダウンして、コピー先のSDをラズパイに装着して起動するだけです。

起動後の確認をします。

lsblk

以下が表示されるはずです。

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 2G 0 loop
mmcblk0 179:0 0 29.1G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 28.6G 0 part /
zram0 254:0 0 2G 0 disk [SWAP]

パーティションサイズと使用率を確認します。

df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 1.6G 15M 1.6G 1% /run
/dev/mmcblk0p2 28G 12G 15G 45%/
tmpfs  df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           1.6G   15M  1.6G   1% /run
/dev/mmcblk0p2   28G   12G   15G  45% /
tmpfs           4.0G   16M  4.0G   1% /dev/shm
tmpfs           5.0M   80K  5.0M   2% /run/lock
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-journald.service
tmpfs           4.0G  256K  4.0G   1% /tmp
/dev/mmcblk0p1  511M   79M  433M  16% /boot/firmware
tmpfs           806M  320K  806M   1% /run/user/1000
tmpfs           1.0M     0  1.0M   0% /run/credentials/getty@tty1.service

おわりに

元のSDを壊さないように、慎重に作業しました。手作業箇所もポイントがわかれば、問題なさそうです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?