Jul 05, 2015
duplicityを使ったバックアップを支援するスクリプト(実験中)
差分バックアップをやりたくて、でも自分であれこれ考えて作るのしんどいわって思って、UbuntuデフォルトのバックアップツールのDeja Dupを試してみてたんだけど、こいつはデスクトップ環境にログインしてないと動かないという制限がある。
Deja Dup自体はduplicityというコマンドラインツールのフロントエンドに過ぎないのでそっちを直接実行すればいいらしい、という事までは知ってたんだけど、なんかオプションがめっちゃ多くてやる気萎える感じだったので、諦めてしまってた。
ラズパイを使ったファイルサーバーでも、バックアップ態勢を確立するにあたってまたDeja Dup頼みかなあと思いながら試してみてたんだけど、なにげなくtop
の画面眺めてたらduplicity
のコマンド列(Deja Dupがいい感じにオプション指定を組み立てた状態の物)が出ていて、なんだこれコピペすればいいんじゃん!と思って、それを足がかりにして簡単なスクリプトを書いてみた。
#!/bin/bash
# バックアップの保存先
destination=/mnt/backup-external/backup
# バックアップに含める物、含めない物
includes="/root /etc /mnt/main-external"
excludes="/root/.cache /mnt/main-external/home/piro/.cache"
# アクセス権がらみのトラブルを避けるために、root以外での実行は禁止する
if [ "$EUID" != "0" ]; then
echo "You must run this script as the root."
exit 1
fi
# root直下でバックアップ対象以外のディレクトリはバックアップ対象から除外
for dir in /*
do
if echo " $includes " | grep -v " $dir "
then
excludes="$excludes $dir"
fi
done
echo "includes: $includes"
echo "excludes: $excludes"
mkdir -p $destination/archive
mkdir -p $destination/data
# duplicityのオプションを組み立てる
include_options=""
for include_target in $includes
do
include_options="$include_options --include=$include_target"
done
exclude_options=""
for exclude_target in $excludes
do
exclude_options="$exclude_options --exclude=$exclude_target"
done
other_options="--gio --volsize=50 --no-encryption --verbosity=9 --gpg-options=--no-use-agent --tempdir=/tmp \
--archive-dir=$destination/archive \
/ file://$destination/data"
# 差分実行
time duplicity incremental $include_options $exclude_options $other_options
# 失敗したら、フルバックアップにフォールバック
if [ $? != 0 ]
then
time duplicity full $include_options $exclude_options $other_options
fi
うまくいったら、rootのcronjobに指定しておこうと思う。
wikieditish message: Ready to edit this entry.