ubuntu は deja-dup が標準で入っているので,使われていることが多いと思うが,NW越しにパスワードをかけて保存しようとすると,うまくいかないことがある.
で,deja-dupが呼び出しているduplicityを直接叩くことにする.
あと,うちの環境では何故かsmb経由では保存がうまくできなかったので,FTP経由にした.
これで保存したバックアップは,deja-dupから読み込むことができるけど,リストアスクリプトも用意してみた.
ちなみに,deja-dupが呼び出す時のオプションは,適当なバックアップを手動で走らせている間に,$ ps aux | grep duplicity
で見ると良い.
設定ファイル,定期バックアップスクリプト,古いバックアップの削除スクリプト,リストアスクリプトの例.
# 保存するディレクトリリストをスペース区切りで DIRS='/home/USERNAME /MYDIR' # 連想配列の宣言 declare -A INCLUDE declare -A EXCLUDE # duplicity は include/exclude に合致するディレクトリが実際にないとエラーを吐くので, # ターゲットディレクトリ毎に指定する必要がある # deja-dup がここを include に入れていた..cacheをexcludeしつつ,このファイルだけincludeしたりできる. INCLUDE['/home/USERNAME']='/home/USERNAME/.cache/deja-dup/metadata' # 半角スペース入りのディレクトリは後ろのfor loopでどうしても分割されてしまうので,半角スペース抜きに設定を変更するのが楽(vboxとか) EXCLUDE['/home/USERNAME']='/home/USERNAME/mountedvolumes /home/USERNAME/Dropbox /home/USERNAME/Downloads /home/USERNAME/.cache /home/USERNAME/.rnd /home/USERNAME/VirtualBoxVMs' INCLUDE['/MYDIR']='' EXCLUDE['/MYDIR']='/MYDIR/lost+found'
#!/bin/bash . ~/bin/duplicity_dirs.conf # environment variables # パスワードとかコマンドにもスクリプトにも入れたくない場合は,読み込むしかない USER=$(cat /home/USERNAME/username) # GnuPGに渡されるパスフレーズ export PASSPHRASE=$(cat /home/USERNAME/passphrase) # FTPログイン時に使用されるパスワード export FTP_PASSWORD=$(cat /home/USERNAME/password) # command CMD=/usr/bin/duplicity # バックアップ保存先 # destination DESTADDR=192.168.1.200 DESTPATH=/BackupDirectory # FTPの場合 DESTSRV=ftp://${USER}@${DESTADDR}/array1${DESTPATH} # LinkStationの場合,array1が間にはさまることに注意 # options # 1ヶ月ごとにフルバックアップを取る OPTIONS='--volsize=100 --gpg-options=--no-use-agent --archive-dir=/home/USERNAME/.cache/deja-dup --tempdir=/tmp --full-if-older-than 1M' # include オプションの生成 COMBINE_INC() { RESULT="" for STRING in $* do RESULT="${RESULT} --include=$STRING" done } # exclude オプションの生成 COMBINE_EXC() { RESULT="" for STRING in $* do RESULT="${RESULT} --exclude=$STRING" done } # loop for all target directories for DIR in $DIRS do echo backup $DIR # include COMBINE_INC ${INCLUDE[$DIR]} INC_OPT=$RESULT # exclude COMBINE_EXC ${EXCLUDE[$DIR]} EXC_OPT=$RESULT # command echo $CMD $INC_OPT $EXC_OPT $OPTIONS $DIR ${DESTSRV}$DIR $CMD $INC_OPT $EXC_OPT $OPTIONS $DIR ${DESTSRV}$DIR done export PASSPHRASE="" export FTP_PASSWORD=""
#!/bin/bash . ~/bin/duplicity_dirs.conf # environment variables # パスワードとかコマンドにもスクリプトにも入れたくない場合は,読み込むしかない USER=$(cat /home/USERNAME/username) # GnuPGに渡されるパスフレーズ export PASSPHRASE=$(cat /home/USERNAME/passphrase) # FTPログイン時に使用されるパスワード export FTP_PASSWORD=$(cat /home/USERNAME/password) # command CMD=/usr/bin/duplicity SUBCMD=remove-older-than # 経過時間を条件に削除するモード # バックアップ保存先 # destination DESTADDR=192.168.1.200 DESTPATH=/BackupDirectory # FTPの場合 DESTSRV=ftp://${USER}@${DESTADDR}/array1${DESTPATH} # LinkStationの場合,array1が間にはさまることに注意 # options PARAM=6M # 6ヶ月より古いものを消す OPTIONS='--force' # loop for all target directories for DIR in $DIRS do echo clear $DIR echo $CMD $SUBCMD $PARAM $OPTIONS ${DESTSRV}$DIR $CMD $SUBCMD $PARAM $OPTIONS ${DESTSRV}$DIR \ && echo "clear old data for $DIR" \ || echo "some error may happen in the process for $DIR" done export PASSPHRASE="" export FTP_PASSWORD=""
##!/bin/bash . ~/bin/duplicity_dirs.conf # environment variables # パスワードとかコマンドにもスクリプトにも入れたくない場合は,読み込むしかない USER=$(cat /home/USERNAME/username) # GnuPGに渡されるパスフレーズ export PASSPHRASE=$(cat /home/USERNAME/passphrase) # FTPログイン時に使用されるパスワード export FTP_PASSWORD=$(cat /home/USERNAME/password) # command CMD=/usr/bin/duplicity SUBCMD=restore # バックアップ保存先 # destination DESTADDR=192.168.1.200 DESTPATH=/BackupDirectory # FTPの場合 DESTSRV=ftp://${USER}@${DESTADDR}/array1${DESTPATH} # LinkStationの場合,array1が間にはさまることに注意 # 入力処理 - バックアップのURLを特定する # ターゲットディレクトリに部分一致があれば,DIRに値が入ったままbreakする仕組み for DIR in $DIRS do [ "${1#$DIR}" != "$1" ] && break DIR="" done [ "$DIR" == "" ] && exit # 対象ファイルの相対化 # duplicityは,バックアップ先のディレクトリからの相対パスが必要 RELPATH="${1#$DIR/}" OPTIONS="--file-to-restore $RELPATH" # リストアしたファイルを格納するテンポラリファイル # 直接書き戻すこともできるけど,リスキーだからやめた方が良い TARGET=~/restore mkdir -p $TARGET TARGET="${TARGET}/${RELPATH}" echo restore $1 echo $CMD $SUBCMD $OPTIONS ${DESTSRV}$DIR $TARGET $CMD $SUBCMD $OPTIONS ${DESTSRV}$DIR $TARGET \ && echo "files are restore into ${TARGET}" \ || echo "some error may happen in the process for ${TARGET}" export PASSPHRASE="" export FTP_PASSWORD=""
個人的には,バックアップをdaily,削除をmonthlyで回すくらいがオススメ.