Raspberry Pi の Raspbian OS を ”dumpコマンド” でバックアップ

Raspberry Pi 上の Raspbian OS の内容を ”dumpコマンド” を使用してバックアップファイルにする手順を記述します。

”ddコマンド”でのバックアップは、SDカード等のブロックデバイスを、指定したサイズ(ブロックサイズ*カウント数)分をそのまま読取るため、実際にはデータの無い未使用の領域もバックアップすることになり非効率です。
それに対して ”dumpコマンド” は、Raspbian OSが格納されている、EXT4ファイルシステム内全体をバックアップしますが、未使用領域は読取られず効率的です。

記載する手順は、バックアップ対象のRaspbian OSがインストールされているSDカードが下記の状態を例としています。
・NOOBS未使用で、イメージファイルから作成
・SDカードの記録容量=16GByte
・Raspberry PiからSDカードを取り外した状態でのオフラインバックアップ
バックアップ作業もRaspberry Piを使用して行います。(バックアップ対象とは異なるSDカードでbootしたRaspbian環境を使用)

1. バックアップ対象 Raspbian OS のカーネル版数確認

”dumpコマンド” でバックアップする、Raspbian OSのEXT4ファイルシステムは、SDカードのパーティション”2″の部分になります。
万一SDカードが破損し読取り不能になった場合、カーネルイメージが格納されているパーティション”1″の部分と合わせての復元が必要になるため、カーネル版数の確認を行っておきます。
※バックアップ対象のRaspbian OSが起動している状態で確認します。
※カーネル版数がRaspbianダウンロードサイトのイメージと同じ版数の場合は、パーティション”1″は同イメージから復元できます。(ダウンロードサイトの版数と異なる場合は、下部の”補足1″を参照願います。)

# uname -r
4.14.50-v7+

2. ”dumpコマンド” での Raspbian OS環境バックアップ

バックアップ対象の Raspbian OSがインストールされているSDカードを、USB SDカードリーダ/ライタにセットして、作業用環境のRaspberry Piに接続します。
※ 接続したSDカードは /dev/sda にて認識しているとします。

■作業用環境に"dumpコマンド"がない場合は、インストールします。
# apt-get install dump

復元時に備えて、バックアップ対象の Raspbian OSがインストールされているSDカードの情報を確認し、記録しておきます。
※ パーティションのセクタ情報
※ PARTUUID情報

# fdisk -l /dev/sda
Disk /dev/sda: 14.7 GiB, 15722348544 bytes, 30707712 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: 0x878b188e

Device     Boot Start      End  Sectors  Size Id Type
/dev/sda1        8192    96663    88472 43.2M  c W95 FAT32 (LBA)
/dev/sda2       98304 29884415 29786112 14.2G 83 Linux

# blkid /dev/sda1
/dev/sda1: LABEL="boot" UUID="3725-1C05" TYPE="vfat" PARTUUID="878b188e-01"

# blkid /dev/sda2
/dev/sda2: LABEL="rootfs" UUID="56b92edc-055e-40ce-9315-910d62f52020" TYPE="ext4" PARTUUID="878b188e-02"

dumpコマンドで /dev/sda2 に格納されている、Raspbian OS環境のバックアップファイルを作成します。このとき圧縮オプション”-z”を指定して、出力されるファイルの縮小化を図ります。
その他のオプションの詳細については、個別に確認願います。
※ 作業用環境でのdumpバックアップファイル保存先は /root とし、同ディレクトリをカレントとしてコマンド操作します。
※ バックアップファイル名は raspbian.dump.gz としています。

# dump -z -0uf raspbian.dump.gz /dev/sda2
DUMP: Date of this level 0 dump: Mon Sep 17 23:21:19 2018
DUMP: Dumping /dev/sda2 (an unlisted file system) to raspbian.dump.gz
DUMP: Label: rootfs
DUMP: Writing 10 Kilobyte records
DUMP: Compressing output at transformation level 2 (zlib)
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 1213336 blocks.
DUMP: Volume 1 started with block 1 at: Mon Sep 17 23:21:20 2018
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing raspbian.dump.gz
DUMP: Volume 1 completed at: Mon Sep 17 23:23:10 2018
DUMP: Volume 1 took 0:01:50
DUMP: Volume 1 transfer rate: 4762 kB/s
DUMP: Volume 1 1213780kB uncompressed, 523839kB compressed, 2.318:1
DUMP: 1213780 blocks (1185.33MB) on 1 volume(s)
DUMP: finished in 110 seconds, throughput 11034 kBytes/sec
DUMP: Date of this level 0 dump: Mon Sep 17 23:21:19 2018
DUMP: Date this dump completed: Mon Sep 17 23:23:10 2018
DUMP: Average transfer rate: 4762 kB/s
DUMP: Wrote 1213780kB uncompressed, 523839kB compressed, 2.318:1
DUMP: DUMP IS DONE

※バックアップしたRaspbian OS環境は、RASPBIAN STRETCH LITEインストール直後のものだったため、出力された圧縮ファイルサイズは約523Mbyte、バックアップ時間約2分でした。

補足1. boot領域のバックアップ

SDカードの破損に備え、バックアップ対象のSDカードの先頭部分から、カーネルイメージが格納されているboot領域(パーティション”1″)の終端部分までを “ddコマンド” でバックアップします。
指定するcount値は、fdiskで確認した /dev/sda1 のセクタEnd=”96663″+1を指定します。
※ 作業用環境での ddバックアップファイル保存先は /root とし、同ディレクトリをカレントとしてコマンド操作します。
※ バックアップファイル名は dd_sd-card_p1_Kernel4.14.50-v7_backup.gz とします。

# dd if=/dev/sda bs=512 count=96664 | gzip -c > dd_sd-card_p1_Kernel4.14.50-v7_backup.gz
96664+0 レコード入力
96664+0 レコード出力
49491968 bytes (49 MB, 47 MiB) copied, 10.8336 s, 4.6 MB/s