てきとうなメモ

本の感想とか技術メモとか

duplyでバックアップ

サーバのバックアップをしようと思ってduplyを試してみた。duplyはduplicityというバックアップツールのフロントエンドで、duplicityはコマンドラインオプションが複雑なので設定ファイルに記述できるようにしたツール。

コマンドラインで、フルバックアップ差分バックアップをとることができる。

インストールはapt-getでできる

$ apt-get install duply

duplyは複数のバックアップ設定を作成でき、以下のコマンド形式で実行する。

$ duply 設定名 サブコマンド

まず、最初に設定を作成するために以下のコマンドを実行する。

$ duply mybackup create

mybackupは設定名である。このコマンドを実行すると、$HOME/.duply/mybackupに設定用ディレクトリが作成され、$HOME/.duply/mybackup/configが設定ファイルになる。mybackupは
設定はこんな感じ

# gpg key data (for symmetric encryption comment out GPG_KEY)
# symmetric encryptionにするのでコメントアウトする
#GPG_KEY='_KEY_ID_'
GPG_PW='_GPG_PASSWORD_'

...

# バックアップ先。同じマシン上の外付ハードディスクにバックアップする場合はfile:///で指定
TARGET='file:///backup'

...

# base directory to backup
# どのディレクトリをinclude/excludeするかは別ファイル(exclude)で設定する
SOURCE='/'

...

# Number of full backups to keep. Used for the "purge-full" command. 
# See duplicity man page, action "remove-all-but-n-full".
# defaults to 1, if not set 
# 念のためフルバックアップも5個残す。purge-full --forceするまでは残るようだが
MAX_FULL_BACKUPS=5

...

# activates duplicity --full-if-older-than option (since duplicity v0.4.4.RC3) 
# forces a full backup if last full backup reaches a specified age, for the 
# format of MAX_FULLBKP_AGE see duplicity man page, chapter TIME_FORMATS
# Uncomment the following two lines to enable this setting.
# 1ヶ月以上経過するとフルバックアップする
MAX_FULLBKP_AGE=1M
DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE "

...

あとはバックアップ対象を$HOME/.duply/mybackup/excludeに記述。こんな感じ。+がincludeで-がexclude。ワイルドカードも利用できる。

+ /etc
+ /var/www/html
+ /var/svn
+ /var/trac
+ /opt/local/moin
- /**

よく使いそうなサブコマンドは以下かな。

バックアップするには以下のコマンド。初回かどうか、$MAX_FULLBKP_AGEを超えているかどうかでフルか差分かが決まる。

$ duply mybackup backup

フルバックアップする

$ duply mybackup full

差分バックアップする

$ duply mybackup incr

バックアップしたファイルを表示

$ duply mybackup list

バックアップ状態を表示

$ duply mybackup status

リストアする

$ duply mybackup restore /path/to/restore

$MAX_AGE以前の古いバックアップを削除

$ duply mybackup purge --force

あとは定期的に実行するようにcrontabに書いておく

00 5    * * *   root    duply mybackup backup > /backup/log 2>&1

これで多分うまくいくはず