最近、Raspberry Pi 5(Linux)がマイブームなgoldear@goldear820です。
Raspberry Piを使っていると、ある時点でのシステムをバックアップしておきたいことが意外とあります。システムディスクを別ディスクにクローンしたり、ディスクイメージを作成して残しておきます。
クローン/イメージ作成手法は色々あり(LinuxのGUI上で作業したり、CUIで長々コマンド打っていくのは面倒で嫌)、簡単な方法をまとめました。
Raspberry Pi 5 で Raspberry Pi OS debian12 bookworm 64bit を動かしています。
以下が対象のLinuxOSとカーネルバージョンです。その他の環境では動作しない可能性があります。
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/”
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のブータブルメディアを作成して、クローン/イメージの作成を行います。
日本語に対応しており機能も豊富ですが、ブータブルメディアを作るのが面倒である。またクローンした際に付いてまわる以下について手動で対応する必要 or 未対応がある。
1. /etc/fstab UUID 修正
2. /boot/firmware/cmdline.txt UUID 修正
3. パーティションサイズ 修正
4. ドライブサイズ 大 -> 小 はクローン未対応
後述する rpi-clone は bookworm 環境依存で 2 以外は対応している。
DD for Windows R2
Windows上でddが使えるツールとして有名であり、私も真っ先に使用したツールです。
ただ実際に使用してみると、NVMe SSD & SATA SSD のイメージ作成完了前に必ずエラー終了します。ドライブと作成したイメージの照合も一致しません。
MicroSDについては問題なく使用できるのですが、使用ディスクが限定されてしまい使い勝手が悪そうです。MicroSDがメインの人にはオススメできます。
Etcher
あまり聞き馴染みのないツールでしたが、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
最終的に辿り着いたのがこの「rpi-clone」になります。CUI環境で使用できる、しかもクローン元のシステムが起動状態でクローンできます。「rpi」と付いていますが、ラズパイ専用ではなさそう。
ラズパイのクローンと言えばGUIで使用する「SD Card Copier」で、CUI環境Onlyの私にはわざわざGUI環境まで準備するのが面倒 & ディスク容量の無駄使いなので、コマンドだけで完結するのは非常に助かります。
実際に使ったツールなので以下に紹介します。
上記コマンドでリポジトリからローカルにクローンします。場所はどこでも構いません。
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 にコピーします。
環境変数PATH が通っているか確認します。設定されていなかったら「export PATH=”$PATH:/usr/local/sbin”」でパスを通しておく。
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) にクローンしてみます。
現状NVMeはサポートしていないとのことです。issueが挙げられているので、参考にrpi-cloneを修正すればできなくはなさそうです。
Destination disk partition /dev/sda2 is mounted on
The clone cannot proceed unless it is unmounted.
Do you want to unmount
Destination disk partition /dev/sda1 is mounted on
The clone cannot proceed unless it is unmounted.
Do you want to unmount
USB SSD(sda1 & sda2)がすでにマウントされているので、アンマウントするため「yes」と打つ。
—————————————————————————
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 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キーを押して完了です。
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について手動修正が必要です。
/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を確認できます。
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にすでに書き換えられています。
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もクローンできるようにしたいな。
コメント