2008/12/30

linuxwiki@ぱ研 - rsyncでお手軽バックアップ

linuxwiki@ぱ研 - rsyncでお手軽バックアップ

【rsync差分バックアップシェル】
インクリメンタルバックアップ(差分バックアップ)

Linuxの場合,一度消去してしまったファイルは復活できないことがほとんどです.大切なファイルを間違って消してしまって,数日後に気付いて大慌てという経験をもっている人もいるでしょう(僕だけ?(^^;).そこで,rsyncの差分バックアップ機能を利用して,更新されたファイルをバックアップするとともに,古いファイルも一定期間保存することにします.

以下のスクリプトを見てください(bashを使うことを想定しています).

#!/bin/sh
# Daily backup script
#
# Copyright (C) 2002 Takeru KOMORIYA
#
# v0.2 10/28,2002
# Fixed old directories remove bug.
# Fixed backup_exclude problem.
# v0.1 9/2,2002
# First version.
#
########################################################################
# Note:
# 1. see 'man rsync' for detailed options.
# 2.Users can specify exclude directory in file 'backup_exclude'
# like this ("/" must be followd):
# tmp/
# unused/
########################################################################
BACKUPDIRS="/home /mnt/kappa /etc /root /work"
BACKUPTO="/backup"
EXPIREDAYS=30

EXECDIR=${0%/*}
EXCLUDEFILE=$EXECDIR/backup_exclude

echo -n "*** Daily inclemental backup start on "
date "+%Y/%m/%d %T"

# delete old backup directories
echo " Deleting old backup directories..."
DATE=`date +%Y%m%d`

for DIR in `ls $BACKUPTO | grep "_backup_"`
do
BDATE=`echo $DIR | sed "s/_backup_//"`
EXPIREDATE=`date +%Y%m%d -d "$EXPIREDAYS days ago"`
if [ $BDATE -le $EXPIREDATE ]
then
echo " deleting $BACKUPTO/$DIR"
rm -rf $BACKUPTO/$DIR
fi
done

# rsync options
OPTS="--force --delete-excluded --delete --backup --backup-dir=$BACKUPTO/_backup_$DATE -a"
if [ -f $EXCLUDEFILE ]; then
OPTS="$OPTS --exclude-from=$EXCLUDEFILE"
fi

# execute backup
echo " Executing backup with rsync..."
for dir in $BACKUPDIRS
do
echo " rsync $OPTS $dir $BACKUPTO"
rsync $OPTS $dir $BACKUPTO
done

# end of backup
echo -n "*** End of backup on "
date "+%Y/%m/%d %T"
echo

このスクリプトでは'BACKUPDIRS'で指定されたディレクトリ(ここでは"/home /mnt/kappa /etc /root /work"の5つ)を'BACKUPTO'で指定されたディレクトリ("/backup")にバックアップします.

バックアップ元で更新・削除されたファイルは,$BACKUPTO/_backup_(日付)/以下に保存されます(例えば "/backup/_backup_20020902/").この日付つきディレクトリはEXPIREDAYSで指定した期間(ここでは30日)が過ぎると自動的に消去されます.以上の処理により,間違って消去・上書きしてしまったファイルも一定期間保存されるようになっています.

また,Mozillaのキャッシュファイルなど,頻繁に更新されるけどバックアップしても意味のないようなものは,バックアップ対象から外すことができます.このスクリプトをおいたのと同じディレクトリに"backup_exclude"という名前のファイルを作成し,ファイルの中身には,

Cache/
*~

なとど書いておくと,"Cache"という名前のディレクトリや,末尾に'~'のついたファイルはバックアップされません.