目次
実は私は一度自作NASの全データを吹っ飛ばしている。不用意にGPTテーブルに破壊的な変更を加えてしまい、元に戻せなくなったのだ。
バックアップを取っていればよかったけれどそのようなものは設定してなかったので、撮り貯めていた SteamVR のゲームのプレイ動画や写真などが消えてしまった。幸いPC上にコピーがあったので一部は復元できたけど、もう取り戻せないデータもおそらくあったと思う。
Synology などの最近のNASアプライアンスには Amazon S3 へのバックアップ機能もあるようなので、以前作ったNASに Duplicity をインストールしてクラウドへのバックアップ機能を実装する。ちなみに今回は FreeBSD へインストールしているが、Duplicity は Ubuntu デフォルトのバックアップアプリ Déjà Dup のバックエンドでもあるので、Linux でも同じように設定できると思う。
GPG キーの作成
Duplicity は GPG による暗号化バックアップに対応している。システムに GPG キーがなくても Duplicity が自動的に初回バックアップ時に作成してくれるが、今回は GPG キーの保存場所等を指定したかったため、以下のように手動で作成した。
NanoBSD の場合、 / はリードオンリーマウントされているため、別にマウントしたファイルシステム上に GPG のキーリングを保存することにした。
# mkdir -p /mnt/credentials/gnupg
# chmod 700 /mnt/credentials/gnupg
# gpg --homedir /mnt/credentials/gnupg --quick-generate-key mynas default default never
あとで作成したキーのフィンガープリントが必要になるので、以下のコマンドで確認しておく。
# gpg --homedir /mnt/credentials/gnupg --list-keys
Duplicity 用の一時ファイル保存場所の作成
これも NanoBSD 固有の話だが、NanoBSD は /etc 以外はリードオンリーなので ~/.cache などが通常は使えない。また /tmp の割り当てもデフォルトでは非常に小さい容量となっている。
Duplicity はバックアップ中にロックファイルや一時ファイルを ~/.cache や /tmp に作ろうとするためデフォルト設定ではエラーになる。よって以下のように前もって Duplicity 用の一時ファイルの保存場所を作成しておく。
# mkdir -p /mnt/system/duplicity/cache
# mkdir -p /mnt/system/duplicity/tmp
Amazon S3 バケットの作成
Amazon S3 のバケットは事前に作成しておく必要がある。ストレージクラスは Duplicity が設定してくれるのでバケット作成時はデフォルトで問題ない。Duplicity は複数のストレージクラスに対応してるため、用途によって標準 S3、S3 標準 IA、S3 1ゾーンIA、Glacier S3、Glacier Deep Archive S3 をバックアップのストレージに使用することができる。詳しくは man duplicity で確認できる。
今回は表題にもある通り Glacier を使うことにした。事故がない限りはリストアはしないので、標準ではなく Glacier で十分と考えた。Glacier を使う場合は Duplicity のオプションに –s3-use-glacier を指定すればよい。
AWS IAM ユーザーの作成
Duplicity はバックエンドに boto を使用している。AWS の認証には aws-cli と同じようにアクセスキーIDとシークレットアクセスキーが必要になるので、事前に NAS 用のユーザーを作成し、 アクセスキーIDとシークレットアクセスキーを控えておくこと。
バックアップスクリプトの作成
あとで periodic(8) に定期実行させるつもりなので /etc/periodic.local.d というディレクトリを作成して、そこにスクリプトを置くことにする。
# mkdir /etc/periodic.local.d
S3 へのバックアップに必要なバケット、認証情報を準備できたら以下のようなスクリプトを作成する。メンテナンス性を考慮して設定ファイル (config) とスクリプト本体 (duplicity-full.sh) に分割した。
以下、設定ファイル。
# /etc/periodic.local.d/config
# バックアップ対象とバックアップ先
DUPLICITY_SOURCE_DIR="/mnt/share"
DUPLICITY_TARGET_URL="boto3+s3://your-bucketname/share"
# 暗号化(GnuPG)設定
export GNUPGHOME=/mnt/credentials/gnupg
export PASSPHRASE='【GPGキーのパスフレーズ】'
DUPLICITY_ENCRYPT_SIGN_KEY="【GPGキーのフィンガープリント】"
# Duplicity に渡すコマンドラインオプション
# -vd でデバッグログを出力
DUPLICITY_OPTS="-vd --s3-use-glacier --archive-dir /mnt/system/duplicity/cache --tempdir=/mnt/system/duplicity/tmp"
# AWS 認証情報 (boto3)
export AWS_ACCESS_KEY_ID="【IAMユーザーのアクセスキーID】 "
export AWS_SECRET_ACCESS_KEY="【IAMユーザーのシークレットキー】"
スクリプト本体。
# /etc/periodic.local.d/duplicity-full.sh
. /etc/periodic.local.d/config
/usr/local/bin/duplicity full \
$DUPLICITY_OPTS \
--encrypt-sign-key $DUPLICITY_ENCRYPT_SIGN_KEY \
$DUPLICITY_SOURCE_DIR \
$DUPLICITY_TARGET_URL
最初のフルバックアップ
先ほど作ったスクリプトを実行して、フルバックアップが正常に作成されるか確認する。
# chmod +x /etc/periodic.local.d/duplicity-full.sh
# /etc/periodic.local.d/duplicity-full.sh
実行後、この記事をまとめながら1.5時間が経過したがまだ終わらない。きっと一晩ほっとけば終わってるだろう。
次回はリストアか、差分バックアップを検証する予定。
Tweet
2 Replies to “Duplicity+Amazon S3 Glacier で NAS をバックアップ インストール編”