Linuxのcronで世代管理のバックアップを回す

Linuxのcronで世代管理のバックアップを回す処理を書いた。
http://nullpopopo.blogcube.info/2008/02/backup.htmlを参考にした。

バックアップ方針

Subversionの最新ソースをexportして、日付名を付けてtar.zipで圧縮する。このシェルスクリプトをcronで毎日実行する。7世代バックアップし古いファイルは削除する。

詳細仕様

  1. /backup/tmpディレクトリ以下を一旦削除する(前回のエクスポート内容を消すため)
  2. /backup/tmpにsvn exportコマンドでローカルサーバーの最新リポジトリをエクスポートする。--forceオプションでtmpディレクトリがあってもなくてもエクスポート可能。
  3. tar cvzfコマンドで./tmpディレクトリ以下をtar.zipに圧縮する。そのファイルを/backup以下に置く。SVN_EXPORT_`date +%Y%m%d`.tar.gzでファイル名に日付を入れる。
  4. 所有者をroot、権限を読み取り専用にする
  5. もし7日前のファイルがあれば削除する(ファイル名でチェック)

ソース(backup.sh)

#!/bin/sh
# this is "backup.sh"

# backup svn export for 7ages.

BACKUPDIR=/backup/

cd $BACKUPDIR
rm -rf ./tmp/*
        svn export --force svn://localhost ./tmp

### /tmpディレクトリを日付で7世代バックアップする.
### もし、7日前のファイル名のものがあったら削除する.
echo
echo "backup SVN HEAD export"
echo


        tar cvzf $BACKUPDIR/SVN_EXPORT_`date +%Y%m%d`.tar.gz ./tmp
        chown root. $BACKUPDIR/SVN_EXPORT_`date +%Y%m%d`.tar.gz
        chmod 600 $BACKUPDIR/SVN_EXPORT_`date +%Y%m%d`.tar.gz

    if test -f $BACKUPDIR/SVN_EXPORT_`date +%Y%m%d -d '7day ago'`.tar.gz
        then
        rm -f $BACKUPDIR/SVN_EXPORT_`date +%Y%m%d -d '7day ago'`.tar.gz
    fi
echo
echo "backup SVN completed"
echo

設定とテスト

# mkdir /backup/
# mkdir /backup/tmp
# vi /backup/backup.sh --以下のソースを記述
# chmod 755 /backup/backup.sh


実験的に7日前のファイルを作成する。
# cp SVN_EXPORT_20080605.tar.gz SVN_EXPORT_20080604.tar.gz
# cp SVN_EXPORT_20080605.tar.gz SVN_EXPORT_20080603.tar.gz
# cp SVN_EXPORT_20080605.tar.gz SVN_EXPORT_20080602.tar.gz
# cp SVN_EXPORT_20080605.tar.gz SVN_EXPORT_20080601.tar.gz
# cp SVN_EXPORT_20080605.tar.gz SVN_EXPORT_20080531.tar.gz
# cp SVN_EXPORT_20080605.tar.gz SVN_EXPORT_20080530.tar.gz
# cp SVN_EXPORT_20080605.tar.gz SVN_EXPORT_20080529.tar.gz


7世代分実行済…という状態になった。
# ls -la /backup/
-rw------- 1 root root 1499240 6月 5 14:35 SVN_EXPORT_20080529.tar.gz
-rw------- 1 root root 1499240 6月 5 14:35 SVN_EXPORT_20080530.tar.gz
-rw------- 1 root root 1499240 6月 5 14:35 SVN_EXPORT_20080531.tar.gz
-rw------- 1 root root 1499240 6月 5 14:34 SVN_EXPORT_20080601.tar.gz
-rw------- 1 root root 1499240 6月 5 14:34 SVN_EXPORT_20080602.tar.gz
-rw------- 1 root root 1499240 6月 5 14:34 SVN_EXPORT_20080603.tar.gz
-rw------- 1 root root 1499240 6月 5 14:34 SVN_EXPORT_20080604.tar.gz


# /backup/backup.sh --バックアップ実行
SVN_EXPORT_20080605が作成されSVN_EXPORT_20080529が削除された。
# ls -la /backup/
-rw------- 1 root root 1499240 6月 5 14:35 SVN_EXPORT_20080530.tar.gz
-rw------- 1 root root 1499240 6月 5 14:35 SVN_EXPORT_20080531.tar.gz
-rw------- 1 root root 1499240 6月 5 14:34 SVN_EXPORT_20080601.tar.gz
-rw------- 1 root root 1499240 6月 5 14:34 SVN_EXPORT_20080602.tar.gz
-rw------- 1 root root 1499240 6月 5 14:34 SVN_EXPORT_20080603.tar.gz
-rw------- 1 root root 1499240 6月 5 14:34 SVN_EXPORT_20080604.tar.gz
-rw------- 1 root root 1499240 6月 5 14:36 SVN_EXPORT_20080605.tar.gz]


復旧では以下のコマンドでtarを解凍する。
# tar xvf SVN_EXPORT_20080605.tar.gz