duplicityでS3 Glacierにバックアップ


duplicityはLinuxで差分バックアップを取るソフトです。
最近はクラウドストレージにも対応していて、Amazon S3にバックアップが置けます。
ここでGlacierを使うと容量料金が下がりますが、バックアップのバケット全体にGlacierに移動するLifecycleを設定してしまうと、メタデータまでGlacierに移動されてしまいます。次回のバックアップ時に、メタデータ取り出しのためにバックアップ開始まで何時間もかかる羽目になります。

容量を喰わないメタデータはS3のままで、データのみをGlacierに移動する方法がわかりました。

データのみを区別するためのprefix

必須なのは--file-prefix-archiveです。一つのバケット内に複数のバックアップを置くためにホスト名などをつける場合、archiveのあとにつける必要があります。

OPTS="--file-prefix-archive=archive-${HOST}- --file-prefix-manifest=manifest-${HOST}- --file-prefix-signature=signature-${HOST}-"

S3をバックアップ先として指定

export AWS_ACCESS_KEY_ID=……
export AWS_SECRET_ACCESS_KEY=……
OPTS="${OPTS} --s3-use-new-style --encrypt-key=${GPG_KEY} --sign-key=${GPG_KEY}"
duplicity $EXCLUDE $OPTS $SRC s3+http://teikan/duplicity

バックアップ結果

こんな感じでS3にバックアップが取れました。

データ(archive)5GBに対して、メタデータ(manifest+signature)は39MBなので、S3に置いたままでも惜しくありません。

Lifecycleの設定

バケット名duplicityに加えて、--file-prefix-archiveで指定したarchiveをプレフィックスに指定するのがポイントです。

結果

数日後に確認すると、期待通りarchiveだけGlacierに移動されていました。

他の方法

Lifecycleに頼らず、--s3-use-glacier というオプションでいきなりGlacierに置く方法もあるようですが、ちゃんと動くのかよくわからないチケットもあり、試していません。