Raspberry Pi のバックアップ手順のメモ

まずシステムの入っている micro SD のパーティション情報を確認する。
root@raspberrypi /mnt/Backup # fdisk -lDisk /dev/mmcblk0: 8017 MB, 8017412096 bytes
4 heads, 16 sectors/track, 244672 cylinders, total 15659008 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
Disk identifier: 0x0009bf4f
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 15659007 7768064 83 Linux

/dev/mmcblk0 がバックアップ対象の micro SD なので、このデバイスを丸ごと dd する。時間がかかるので & をつけてバックグラウンドタスクで処理させる。
詳しくは man dd で。
root@raspberrypi /mnt/Backup # dd if=/dev/mmcblk0 of=raspberry_backup.img & pid=$!
root@raspberrypi /mnt/Backup # kill -USR1 $pid

バックアップしたファイルのパーティション情報を確認する。
root@raspberrypi /mnt/Backup # parted raspberry_backup.img unit b printModel: (file)
Disk /mnt/Backup/raspberrypi_backup.img: 8017412096B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 4194304B 62914559B 58720256B primary fat16 lba
2 62914560B 8017412095B 7954497536B primary ext4

最初の fdisk の結果を 512倍すると parted の結果と同じになるはず。

この 2 番目のパーティションが raspbian 本体なので、loop device にオフセットをつけて割り当てる。
root@raspberrypi /mnt/Backup # losetup -o 62914560 -f raspberrypi_backup.img
root@raspberrypi /mnt/Backup # losetup -a
/dev/loop0: [0012]:2251799813721360 (/mnt/Backup/raspberrypi_backup.img), offset 62914560

dd している間にファイル更新があればその部分で不整合を起こしてしまっているので、修復を行う必要がある。
root@raspberrypi /mnt/Backup # e2fsck -fp /dev/loop0root: 130335/260096 files (0.8% non-contiguous), 1037181/1044831 blocks
何回か e2fsck して修復箇所がなくなったことを確認しておく。

デフラグをしてファイルをパーティションの頭のほうに集める。
root@raspberrypi /mnt/Backup # resize2fs -fM /dev/loop0resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/loop0 to 1046519 (4k) blocks.
The filesystem on /dev/loop0 is now 1046519 blocks long.
resize2fs 1.42.5 (29-Jul-2012)
The filesystem is already 1044831 blocks long. Nothing to do!

こちらも何回か resize2fs して Nothing to do! となるまで繰り返すことでバックアップサイズを最小化することができる。最終的に何ブロックになったか覚えておく。この場合は 1044831 ブロック。1ブロック4096バイトなので、サイズは 1044831 * 4096 = 4279627776 バイト。

loop device を開放する。
root@raspberrypi /mnt/Backup # losetup -d /dev/loop0

新しく縮小されたパーティションのサイズの計算をしておく。
最終オフセット = 先頭オフセット 62914560 + サイズ 4279627776 – 1 = 4342542335

リサイズするパーティションを確認する。
root@raspberrypi /mnt/Backup # parted raspberrypi_20150825_all.imgGNU Parted 2.3
Using /mnt/Backup/raspberrypi_backup.img
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) unit b
(parted) p
Model: (file)
Disk /mnt/Backup/raspberrypi_backup.img: 8017412096B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 4194304B 62914559B 58720256B primary fat16 lba
2 62914560B 8017412095B 7954497536B primary ext4

リサイズは出来ないと怒られるので、パーティション2を削除して、縮小するサイズで作り直す。
(parted) rm 2
(parted) mkpart primary 62914560 4342542335
(parted) quit

パーティション情報上はサイズが小さくなったので、実バックアップイメージ上のいらなくなった部分を切り捨てる。
ファイルサイズ = 最終オフセット + 1 = 4342542336
root@raspberrypi /mnt/Backup # truncate -s 4342542336 raspberrypi_backup.img

Add a Comment

メールアドレスが公開されることはありません。