日記とか、工作記録とか

自分に書けることを何でも書いてゆきます。作った物、買ったもの、コンピュータ系の話題が多くなるかもしれません。

Raspberry pi 3のバックアップ再び(rpi-clone)

以前バックアップについては一度書きましたが、以前のエントリでは、microSDカードを抜いてPCでバックアップを取る方法でした。今回はRaspberry piを起動したままで取得することを試みます。
f:id:WindVoice:20170129223222j:plain

準備

今回のバックアップはmicroSDカードに取得します。以前書いた方法はPCにファイルの形でとることができるので、場合によってはこちらのほうが便利かもしれません。SDカードを交換して簡単に環境を入れ替えたい場合は今回の方法がよさそうです。まずは安いSDカードとUSB-microSDカードリーダを入手しました。どっちも安いです。

rpi-cloneのインストール

インストールというほどのことはないですが…… GitHubにソースがあるのでcloneしました。
シェルスクリプトで、作者の方によれば/usr/local/binにコピーする説明となっています。

pi@raspberrypi:~ $ git clone https://github.com/billw2/rpi-clone.git
Cloning into 'rpi-clone'...
remote: Counting objects: 58, done.
remote: Total 58 (delta 0), reused 0 (delta 0), pack-reused 58
Unpacking objects: 100% (58/58), done.
Checking connectivity... done.
pi@raspberrypi:~ $ cd rpi-clone/
pi@raspberrypi:~/rpi-clone $ ls
README.md  rpi-clone
pi@raspberrypi:~/rpi-clone $ sudo cp rpi-clone /usr/local/sbin
pi@raspberrypi:~/rpi-clone $ type rpi-clone
rpi-clone は /usr/local/sbin/rpi-clone です
pi@raspberrypi:~/rpi-clone $

USBメモリとして認識させる

実はここでしばらくうまくいかなくて悩みました。ネットを探しても、みんなすんなり認識しているのですが、なぜか私のmicroSDカードは認識しない…… 結局カードリーダにしっかりカードがささっていなくて認識していなかったようです。このカードリーダ、ちゃんと差し込まれていなくても青いLEDが点灯するので怪しいと思いませんでした。最終的には/dev/sdbとして認識しました。

pi@raspberrypi:/dev $ sudo lsusb
Bus 001 Device 009: ID 0bda:0109 Realtek Semiconductor Corp.★
Bus 001 Device 004: ID 174c:1153 ASMedia Technology Inc.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspberrypi:/dev $ sudo fdisk -l

Disk /dev/ram0: 4 MiB, 4194304 bytes, 8192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

...

Disk /dev/sdb: 28.8 GiB, 30945574912 bytes, 60440576 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: 0x00000000

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdb1        8192 60440575 60432384 28.8G  c W95 FAT32 (LBA)

pi@raspberrypi:/dev $

rpi-cloneでコピー

コマンドにバックアップ先のmicroSDカードのデバイス名(sdb)を指定します。SDカードは最初FATでフォーマットされているので、そのままではバックアップできません。パーティションから作り直しになるので、--force-initializeオプションを指定しました。あとはひたすら、ひたすら待ちます。忍耐です。なお、バックアップ中はrootファイルシステムの変更があるのは良くないと思われます。コピーしたカードから正常に起動できない可能性がでてくるからです。信頼性の高さが求められるような状況では使わないほうがいいかもね。

pi@raspberrypi:~/rpi-clone $ sudo rpi-clone sdb --force-initialize

Forcing a partition initialization of destination disk sdb
The existing destination disk 'sdb' partitions are:
Disk /dev/sdb: 30946MB
Partition Table: msdos

Number  Start   End      Size     Type     File system  Flags
 1      4.19MB  30946MB  30941MB  primary  fat32        lba

*** All data on destination disk sdb will be overwritten! ***

Do you want to initialize the destination disk /dev/sdb? (yes/no): yes

Imaging the partition structure, copying 1181 megabytes...
1181+0 レコード入力
1181+0 レコード出力
1238368256 バイト (1.2 GB) コピーされました、 140.037 秒、 8.8 MB/秒
Running fsck on /dev/sdb1...
Sizing partition 2 (root partition) to use all SD card space...
mke2fs 1.42.12 (29-Aug-2014)
Found a dos partition table in /dev/sdb2
Creating filesystem with 7268695 4k blocks and 1818624 inodes
Filesystem UUID: 01ad2d41-0ad0-4b22-a402-d4bc93355317
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done


/dev/sdb is initialized and resized.  Its partitions are:
Disk /dev/sdb: 30946MB
Partition Table: msdos

Number  Start   End      Size     Type     File system  Flags
 1      4.19MB  1173MB   1169MB   primary  fat32        lba
 2      1173MB  30946MB  29773MB  primary  ext4

e2label: Attempt to read block from filesystem resulted in short read while trying to open /dev/mmcblk0p2
Couldn't find valid filesystem superblock.

Your booted /dev/mmcblk0p2 rootfs existing label:
You may enter a label for the destination rootfs /dev/sdb2: bkuppi

======== Clone Summary ========
Clone mode               :  rsync all files to sdb root file system
Clone destination disk   :  sdb
Clone destination rootfs :  /dev/sdb2 (bkuppi) on /mnt/clone
Clone destination bootfs :  /dev/sdb1 on /mnt/clone/boot
Verbose mode             :  off
===============================
Final check, is it Ok to proceed with the clone (yes/no)?: yes
=> Mounting /dev/sdb2 (bkuppi) on /mnt/clone
=> Mounting /dev/sdb1 on /mnt/clone/boot
===============================
Starting the filesystem rsync to sdb
(This may take several minutes)...

*** Done with clone to /dev/sdb ***
    Started: 09:58:10    Finished: 12:13:47

Hit Enter when ready to unmount the /dev/sdb partitions...unmounting /mnt/clone/boot
unmounting /mnt/clone
===============================
pi@raspberrypi:~/rpi-clone $

最後に

コピーには時間がかかります。大きいことはいいことだ、ということで32GBのカードを使っているのですが、コピーに2時間15分かかりました。忍耐です。終わるまでひたすら忍耐です。