【rpi-clone】Raspberry Pi 5(bookworm)システムディスクのクローンを作成してみた【備忘録】

最近、Raspberry Pi 5(Linux)がマイブームなgoldear@goldear820です。

Raspberry Piを使っていると、ある時点でのシステムをバックアップしておきたいことが意外とあります。システムディスクを別ディスクにクローンしたり、ディスクイメージを作成して残しておきます。

クローン/イメージ作成手法は色々あり(LinuxのGUI上で作業したり、CUIで長々コマンド打っていくのは面倒で嫌)、簡単な方法をまとめました。

Raspberry Pi 5 で Raspberry Pi OS debian12 bookworm 64bit を動かしています。

以下が対象のLinuxOSとカーネルバージョンです。その他の環境では動作しない可能性があります。

goldear@rpi5-pt3:~ $ cat /etc/os-release
PRETTY_NAME=”Debian GNU/Linux 12 (bookworm)”
NAME=”Debian GNU/Linux”
VERSION_ID=”12″
VERSION=”12 (bookworm)”
VERSION_CODENAME=bookworm
ID=debian
HOME_URL=”https://www.debian.org/”
SUPPORT_URL=”https://www.debian.org/support”
BUG_REPORT_URL=”https://bugs.debian.org/”
goldear@rpi5-pt3:~ $ cat /proc/version
Linux version 6.6.62-v8-16k+ (goldear@rpi5-pt3) (gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Thu Nov 21 23:11:54 JST 2024

先に結論から言うと個人的にはトラップはあるが「rpi-clone」が色々と楽だと思う。異論は認めます。

スポンサーリンク

Clonezilla

Clonezilla - Downloads

Clonezillaのブータブルメディアを作成して、クローン/イメージの作成を行います。

日本語に対応しており機能も豊富ですが、ブータブルメディアを作るのが面倒である。またクローンした際に付いてまわる以下について手動で対応する必要 or 未対応がある。

1. /etc/fstab UUID 修正
2. /boot/firmware/cmdline.txt UUID 修正
3. パーティションサイズ 修正
4. ドライブサイズ 大 -> 小 はクローン未対応

後述する rpi-clone は bookworm 環境依存で 2 以外は対応している。

DD for Windows R2

DD for Windows - Tech Info

Windows上でddが使えるツールとして有名であり、私も真っ先に使用したツールです。

ただ実際に使用してみると、NVMe SSD & SATA SSD のイメージ作成完了前に必ずエラー終了します。ドライブと作成したイメージの照合も一致しません

MicroSDについては問題なく使用できるのですが、使用ディスクが限定されてしまい使い勝手が悪そうです。MicroSDがメインの人にはオススメできます。

Etcher

balenaEtcher - Flash OS images to SD cards & USB drives
A cross-platform tool to flash OS images onto SD cards and USB drives safely and easily. Free and open source for makers...

あまり聞き馴染みのないツールでしたが、3ステップでクローンとイメージ書込に対応したツールです。

Windows/MacOS/Linuxと幅広いOSに対応しており、何より3ステップというのが簡単で良い。実際に使ったツールなので以下に紹介します。

ソフトを起動させて、「Clone Drive」を選択する。脱線するがRufusのようなにイメージの書き込み/URLからのイメージ書き込みにも対応している。

接続されている全てのディスクが一覧表示されるため、クローン元のディスクを選択する。

次に「Select Target」を選択する。

先程と同様にディスクの一覧が表示されるため、クローン先のディスクを選択する。

「Flash」を選択するとWarningが表示されたが、クローン元とクローン先のディスクサイズは同容量のため構わず「Yes, I’m sure」を選択する。なぜこのWarningが表示されたのかは分からない。

クローンが始まるので完了するまで待ちます。

これでクローンが完了するため非常に簡単です。しつこいですがClonezillaと同様に以下の対応は手動です。
1. /etc/fstab UUID 修正
2. /boot/firmware/cmdline.txt UUID 修正
3. パーティションサイズ 修正
4. ドライブサイズ 大 -> 小 はクローン未対応

rpi-clone

GitHub - billw2/rpi-clone: A shell script to clone a booted disk.
A shell script to clone a booted disk. Contribute to billw2/rpi-clone development by creating an account on GitHub.

最終的に辿り着いたのがこの「rpi-clone」になります。CUI環境で使用できる、しかもクローン元のシステムが起動状態でクローンできます。「rpi」と付いていますが、ラズパイ専用ではなさそう。

ラズパイのクローンと言えばGUIで使用する「SD Card Copier」で、CUI環境Onlyの私にはわざわざGUI環境まで準備するのが面倒 & ディスク容量の無駄使いなので、コマンドだけで完結するのは非常に助かります。

実際に使ったツールなので以下に紹介します。

goldear@rpi5-pt3:~/work/tools $ git clone https://github.com/billw2/rpi-clone.git

上記コマンドでリポジトリからローカルにクローンします。場所はどこでも構いません。

goldear@rpi5-pt3:~/work/tools $ cd rpi-clone/
goldear@rpi5-pt3:~/work/tools/rpi-clone $ sudo cp rpi-clone rpi-clone-setup /usr/local/sbin/

rpi-clone, rpi-clone-setup を /usr/local/sbin にコピーします。

goldear@rpi5-pt3:~/work/tools/rpi-clone $ printenv | grep /usr/local/sbin

環境変数PATH が通っているか確認します。設定されていなかったら「export PATH=”$PATH:/usr/local/sbin”」でパスを通しておく。

goldear@rpi5-pt3:~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 512M 0 part
└─sda2 8:2 0 232.4G 0 part
mmcblk0 179:0 0 28.9G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 28.3G 0 part /

今回は MicroSD(mmcblk0) から USB SSD(sda) にクローンしてみます。

Issue #123: Errors with NVMe on Compute Module 4. by geerlingguy · Pull Request #147 · billw2/rpi-clone
Fixes #123. Allows users to work with NVMe drives on the CM4.
rpi-clone from NVME to USB-Stick · Issue #150 · billw2/rpi-clone
I have a Notebook with an NVME SSD and Debian 11 64 bit. If I install rpi-clone $ git clone $ cd rpi-clone $ sudo cp rpi...

現状NVMeはサポートしていないとのことです。issueが挙げられているので、参考にrpi-cloneを修正すればできなくはなさそうです。

goldear@rpi5-pt3:~ $ sudo rpi-clone sda
Destination disk partition /dev/sda2 is mounted on .
The clone cannot proceed unless it is unmounted.
Do you want to unmount ? (yes/no):yes
Destination disk partition /dev/sda1 is mounted on .
The clone cannot proceed unless it is unmounted.
Do you want to unmount ? (yes/no): yes

USB SSD(sda1 & sda2)がすでにマウントされているので、アンマウントするため「yes」と打つ。

Booted disk: mmcblk0 31.0GB Destination disk: sda 250.1GB
—————————————————————————
Part Size FS Label Part Size FS Label
1 /boot/firmware 512.0M fat32 — 1 512.0M fat32 —
2 root 28.3G ext4 rootfs 2 232.4G ext4 —
—————————————————————————
== SYNC mmcblk0 file systems to sda ==
/boot/firmware (75.5M used) : SYNC to sda1 (512.0M size)
/ (9.6G used) : SYNC to sda2 (232.4G size)
—————————————————————————
Run setup script : no.
Verbose mode : no.
———————–:

Ok to proceed with the clone? (yes/no):yes

クローンの処理内容が表示されます。USB SSD(sda)は初期化されるよとのことですが、「yes」で実行します。

Syncing file systems (can take a long time)
Syncing mounted partitions:
Mounting /dev/sda2 on /mnt/clone
mount: (hint) your fstab has been modified, but systemd still uses
the old version; use ‘systemctl daemon-reload’ to reload.
=> rsync // /mnt/clone with-root-excludes …
Mounting /dev/sda1 on /mnt/clone/boot/firmware
mount: (hint) your fstab has been modified, but systemd still uses
the old version; use ‘systemctl daemon-reload’ to reload.
=> rsync /boot/firmware/ /mnt/clone/boot/firmware …

Editing /mnt/clone/etc/fstab PARTUUID to use 5fcce8a6
===============================
Done with clone to /dev/sda
Start – 14:20:37 End – 14:21:07 Elapsed Time – 0:30

Cloned partitions are mounted on /mnt/clone for inspection or customizing.

Hit Enter when ready to unmount the /dev/sda partitions …
unmounting /mnt/clone/boot/firmware
unmounting /mnt/clone
===============================

クローン処理が実行されて、最後にEnterキーを押して完了です。

goldear@rpi5-pt3:~ $ sudo fdisk -l
Disk /dev/mmcblk0: 28.85 GiB, 30979129344 bytes, 60506112 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x88f1d906

Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 1056767 1048576 512M c W95 FAT32 (LBA)
/dev/mmcblk0p2 1056768 60506111 59449344 28.3G 83 Linux

Disk /dev/sda: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: SSD-PUT/N
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0x5fcce8a6

Device Boot Start End Sectors Size Id Type
/dev/sda1 8192 1056767 1048576 512M c W95 FAT32 (LBA)
/dev/sda2 1056768 488397167 487340400 232.4G 83 Linux

問題なくクローンされていそう。

1. /etc/fstab UUID 修正
2. /boot/firmware/cmdline.txt UUID 修正
3. パーティションサイズ 修正
4. ドライブサイズ 大 -> 小 はクローン未対応

debian12 bookworm 以外はクローン完了(推測ですが…) 、bookworm は上記2について手動修正が必要です。

goldear@rpi5-pt3:~ $ blkid
/dev/mmcblk0p1: ・・・ PARTUUID=”88f1d906-01″
/dev/mmcblk0p2: ・・・ PARTUUID=”88f1d906-02″
/dev/sda2: UUID=”(sda2 UUID)>” BLOCK_SIZE=”4096″ TYPE=”ext4″ PARTUUID=”5fcce8a6-02″
/dev/sda1: UUID=”(sda1 UUID)” BLOCK_SIZE=”512″ TYPE=”vfat” PARTUUID=”5fcce8a6-01″

上記fdiskのDisk identifier でも確認できますが、Disk blkid コマンドでMicroSD(mmcblk0)とUSB SSD(sda) のPARTUUIDを確認できます。

goldear@rpi5-pt3:~ $ cat /media/goldear/(sda2 UUID)/etc/fstab
proc /proc proc defaults 0 0
PARTUUID=5fcce8a6-01 /boot/firmware vfat defaults 0 2
PARTUUID=5fcce8a6-02 / ext4 defaults,noatime 0 1

sda2 の/etc/fstab はMicroSDのUUIDからUSB SSDのUUIDにすでに書き換えられています。 

goldear@rpi5-pt3:~ $ cat /media/goldear/(sda1 UUID)/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=88f1d906-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

sda1 bootfs直下の cmdline.txtはrootfsのPARTUUIDがMicroSD(mmcblk0p2)のままであり、書き換えられていません。

これをUSB SSD(sda2)のPARTUUID=5fcce8a6-02に書き換えることで起動するようになります。

まとめ

私が知らないだけだったのか、それとも本当にあまり知られていないのか、分かりませんが「rpi-clone」がなかなか使い勝手の良いツールでした。

「rpi-clone」は数年更新されていないのでNVMeサポートは絶望的かなと思いますが、中身はただのスクリプトなので調査してNVMe SSDもクローンできるようにしたいな。

コメント