ccollect による日々のバックアップ

ccollect – (pseudo) incremental backup with different exclude lists using hardlinks and rsync

社内の Subversion, Trac, tDiary などを実行しているサーバがあるのですが、これらのデータの世代別バックアップを取るのに ccollect を使っています。

ccollect で特徴的なところは、rsync によりインクリメンタルなバックアップを実行するようになっており shell script で出来ているところです。また、変更のないファイルは hardlink が作成されディスクを消費しないように出来ています。

インストール

現状 ccollect をパッケージにしている Linux distributor はないようなので、ソースからインストールします。まず ccollect のサイトから ccollect-0.7.0.tar.bz2 をダウンロードします。

展開する場所は、ここでは /usr/local/share にインストールすることにします。

$ tar xjf ccollect-0.7.0.tar.bz2 -C /usr/local/share

/usr/local/share/ccollect-0.7.0 に展開されます。

後で役に立つかも知れないので /usr/local/share/ccollect でアクセスできるように symlink を作成しておきます。

$ ln -s ccollect-0.7.0 /usr/local/share/ccollect

設定

ccollect の設定ファイルは /etc/ccollect ディレクトリに置きます。環境変数 CCOLLECT_CONF で指定すれば別のディレクトリに置くことも出来ます。

今回は /var, /home, /etc をバックアップ対象として 60 日保存されるように設定しました。

mkdir /etc/ccollect

interval

まずは 60 日保存をデフォルトの設定として /etc/ccollect/defaults/intervals/daily に書き込みます。

mkdir -p /etc/ccollect/defaults/intervals
echo -n 60 >/etc/ccollect/defaults/intervals/daily

source

次は /etc/ccollect/sources ディレクトリにバックアップの設定を対象ごとに記述します。

mkdir /etc/ccollect/sources
# /var
mkdir /etc/ccollect/sources/var
echo '/var' >/etc/ccollect/sources/var/source
echo '/disk/backups/var' >/etc/ccollect/sources/var/destination
echo '/var/tmp' >/etc/ccollect/sources/var/exclude
echo '/var/cache' >>/etc/ccollect/sources/var/exclude
# /home
mkdir /etc/ccollect/sources/home
echo '/home' >/etc/ccollect/sources/home/source
echo '/disk/backups/home' >/etc/ccollect/sources/home/destination
# /etc
mkdir /etc/ccollect/sources/etc
echo '/etc' >/etc/ccollect/sources/etc/source
echo '/disk/backups/etc' >/etc/ccollect/sources/etc/destination

上記のように source にバックアップ元を、destination にバックアップ先を書き込んでおくだけです。 またバックアップ対象から除外したい場合には exclude ファイルに対象となるディレクトリをリストしておきます。

バックアップの直前でコマンドを実行することやリモートマシンにあるディレクトリをバックアップすること(rsync + ssh で)も出来ますので、より細かな設定は Source configuration を見てください。

バックアップ実行

後は次のコマンドを1日1回実行すれば、すべてのバックアップ元に対して 60 日保存のバックアップが実行できます。

/usr/local/share/ccollect/ccollect.sh -a daily

手動で実行してバックアップができているか試しておきます。

$ ls -l /disk/backups/var
total 0
drwxr-xr-x 3 root root 16 2008-04-24 04:51 daily.20080424-0451.17298
drwxr-xr-x 3 root root 16 2008-04-25 04:51 daily.20080425-0451.17953
drwxr-xr-x 3 root root 16 2008-04-26 04:51 daily.20080426-0451.18710
drwxr-xr-x 3 root root 16 2008-04-27 04:51 daily.20080427-0451.19905
drwxr-xr-x 3 root root 16 2008-04-28 04:51 daily.20080428-0451.20670

うまくいっていれば上記のようなディレクトリが出来ているはずです。

バックアップ対象ごとに設定可能な項目

最後にバックアップごとに指定できる項目を列挙しておきます。

source

バックアップ対象のパスを rsync が理解できる形式でテキストで記述します。

destination

バックアップ先のディレクトリをテキストで記述します。

verbose

/etc/ccollect/sources/NAME/verbose というファイルがあると verbose モードになります。 実際には rsync に -v オプションが渡ります。

very_verbose

verbose モードよりも更に verbose になります。これもファイルがあるとこのモードになります。 実際には mkdir -v, rm -v, rsync -vv で実行されます。

summary

rsync が終わったときにサマリーを出力させたい場合には summary ファイルを作成しておきます。

exclude

exclude ファイルにはバックアップ対象から除外したいパスを一行ずつ記述します。

rsync_options

rsync に渡したいオプションがあれば、rsync_options ファイルに一行ごとに記述します。

pre_exec

このファイルが用意すとバックアップ元に対してバックアップを開始する前に実行してくれます。 pre_exec を実行しようとするので、pre_exec ファイルは実行可能にしておきます。

post_exec

pre_exec はバックアップの開始前ですが、post_exec はバックアップの終了後に実行されます。 このファイルも同様に実行可能にしておきます。

delete_incomplete

このファイルがあると、バックアップが不完全だった場合に不完全になったバックアップ先のディレクトリを削除するようになります。

remote_host

バックアップ先を自マシンではなくて、別のマシンにしたい場合にはこの remote_host ファイルにそのホスト名を記述します。

Categorized: backup

Comments are closed.