USBメモリからのブートを試しているときに、X環境のSD Card Copierを使用していましたが、流石にそのためだけにX環境にするものちょっとどうだろと思っていました。コンソールから使えるといいのにな~と。それならddコマンド
をつかえばいいじゃんというのが一般論なのですが、以前一度コマンドの使い方を間違えてしまって、メモリを破壊してしまったことがありそれ以降ddコマンド
恐怖症になってしまいました。
そこで色々検索していると、以下のエントリに良さそうな情報が!
rpi-clone
というアプリケーションがあってRaspberryPi
のSDカードのイメージを指定したブロックデバイスにコピーしてくれるというものです。GitHubのページは以下になります。使い方も簡単なので便利そう。
rpi-clone
をインストールする
GitHubのページにも記載がありますが、以下のようにすればインストールができます。
$ git clone https://github.com/billw2/rpi-clone.git $ cd rpi-clone $ sudo cp rpi-clone rpi-clone-setup /usr/local/sbin
基本的にはアプリケーションのファイルをコピーするだけなのでそこまで大きな負担もない感じですね。
rpi-clone
の使用方法
rpi-clone
は引数にコピー先のブロックデバイスを指定することになります。使用するUSBストレージを確認するには以下のようにlsblk
コマンドで確認を行います。
$ lsblk
lsblk 実行結果
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 1 15G 0 disk ├─sda1 8:1 1 256M 0 part └─sda2 8:2 1 14.7G 0 part mmcblk0 179:0 0 14.5G 0 disk ├─mmcblk0p1 179:1 0 256M 0 part /boot └─mmcblk0p2 179:2 0 14.2G 0 part /
この例では/dev/sda
としてUSBストレージが認識されているのでrpi-clone
にも/dev/sdaを指定することになります。実行時の指定は/dev/sda
の/dev/
を除いたsda
を指定します。
rpi-clone
はroot権限が必要になるのでsudoと組み合わせて実行を行ってください。
rpi-clone 実行結果
$ sudo rpi-clone sda Booted disk: mmcblk0 15.5GB Destination disk: sda 16.0GB --------------------------------------------------------------------------- Part Size FS Label Part Size FS Label 1 /boot 256.0M fat32 -- 1 256.0M fat32 -- 2 root 14.2G ext4 rootfs 2 14.7G ext4 rootfs --------------------------------------------------------------------------- == SYNC mmcblk0 file systems to sda == /boot (50.5M used) : SYNC to sda1 (256.0M size) / (2.9G used) : SYNC to sda2 (14.7G size) --------------------------------------------------------------------------- Run setup script : no. Verbose mode : no. -----------------------: Ok to proceed with the clone? (yes/no): yes 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 => rsync /boot/ /mnt/clone/boot ... Editing /mnt/clone/boot/cmdline.txt PARTUUID to use ea7d04d6 Editing /mnt/clone/etc/fstab PARTUUID to use ea7d04d6 =============================== Done with clone to /dev/sda Start - 18:53:27 End - 18:56:39 Elapsed Time - 3:12 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 unmounting /mnt/clone ===============================
実行すると、書き込み先のファイルが消えるので再度確認があります。処理がOKであればyes
として問題ありません。
実行時の出力を見る限りrsync
コマンドを使用してSDカードメモリ内のファイルのバックアップを行っているようです。この感じだと、差異のあるファイル分しか書き込みを行わないので、時間の短縮ができます。また、パーティション処理も個別に行っているのでサイズ違いのメディアでも問題なくバックアップができるのもメリットです。
実行が終わるとUSBストレージデバイスはアンマウントされ、バックアップが完了です。rsync
による同期なのでファイル内容に差異が少ない場合にはスキップされ、さらに使用したのがUSB3.0対応のUSBメモリなので高速に終わりました。全く違う場合には時間はかかりますのでご注意ください。
なおRaspberryPi3B(3B+)
はバックアップしたUSBでそのまま起動可能ですが、RaspberryPi 4B
はUSB起動はできません。USB起動が正式対応されればrpi-clone
側が対応する可能性は高そうですね
おわりに
これでX環境でなくてもSDカードのバックアップが短時間でとれるようになりました。昔はイメージファイルでバックアップをとっていましたがこちらのほうが微妙にSDカードのサイズが違っていても楽にバックアップができるので便利です。もう少しバックアップをマメにやってみようかな。
関連