目次
前々回・前回のあらすじ
NAS のデータを全部吹っ飛ばした反省からバックアップをクラウドストレージにアップロードするようにしたが、AWS S3 は通信費用が高くてつらいので Backblaze B2 Cloud Storage に変更したのであった。
差分バックアップの日次実行
前回実施した初回の完全バックアップは約200GBのバックアップで34時間ほどかかった。丸一日以上だ。毎日完全バックアップはできないので、普段は差分バックアップを行い、たまに完全バックアップをするという運用となる。
Duplicity は引数に full と明示的に指定すると完全バックアップになるが、指定しなかった場合は差分バックアップになる。なお初回の完全バックアップが未実施の場合は未指定でも完全バックアップが実行される。差分バックアップが取れるように、以前作成したバックアップスクリプトを以下のように若干変更して /etc/periodic.local.d/duplicity.sh という名前で保存した。
. /etc/periodic.local.d/config
/usr/local/bin/duplicity \
$DUPLICITY_OPTS \
--encrypt-sign-key $DUPLICITY_ENCRYPT_SIGN_KEY \
$DUPLICITY_SOURCE_DIR \
$DUPLICITY_TARGET_URL
exit 0
FreeBSD の periodic(8) を使う場合、最後の exit 0 は必須である。これがないと periodic はコマンドが失敗したと判断して日次バッチの完了メールの送信を中断してしまう。
これを毎日実行するには /etc/daily.local というシェルスクリプトを作り、そのスクリプトから上記のスクリプトを実行するようにすればよい。
#!/bin/sh
sh /etc/periodic.local.d/duplicity.sh
うまく設定できれば、以下のようなメールが毎晩届くようになるはず。
..snip..
Running /etc/daily.local:
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Mon Aug 16 23:59:36 2021
Reuse configured PASSPHRASE as SIGN_PASSPHRASE
--------------[ Backup Statistics ]--------------
StartTime 1630349385.77 (Tue Aug 31 03:49:45 2021)
EndTime 1630349540.34 (Tue Aug 31 03:52:20 2021)
ElapsedTime 154.57 (2 minutes 34.57 seconds)
SourceFiles 161465
SourceFileSize 291116645894 (271 GB)
NewFiles 6
NewFileSize 2998 (2.93 KB)
DeletedFiles 0
ChangedFiles 4
ChangedFileSize 120039098 (114 MB)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 10
RawDeltaSize 37525020 (35.8 MB)
TotalDestinationSizeChange 10654016 (10.2 MB)
Errors 0
-------------------------------------------------
..snip..
ファイルのリストア
バックアップができたら意図どおりにリストアできるか確認する。
以下は間違って消したパスワードDB(暗号化してある)を B2 Cloud Storage から /mnt/share/jsaito/RESTORE にリストアする例。
# sh
# . /etc/periodic.local.d/config
# mkdir /mnt/share/jsaito/RESTORE
# /usr/local/bin/duplicity restore $DUPLICITY_OPTS --encrypt-sign-key $DUPLICITY_ENCRYPT_SIGN
_KEY $DUPLICITY_TARGET_URL --file-to-restore jsaito/Credentials /mnt/share/jsaito/RESTORE
上でリストアしたファイルは1個だけだが私の環境ではすぐには終わらなかった 。Alians: Fireteam Elite で遊んでいる間に終わってたので、30分以内では終わっていたと思う。おそらくバックアップのチャンクのサイズが大きかったり、複数のチャンクにリストア対象のファイルが分散しているとリストアに時間がかかるのではないか。
Tweet