バックアップの自動化
20130105

以下のバックアップポリシーに基づいて作成していきます。
 1.任意のディレクトリの中身を毎日決まった時間にバックアップする。
 2.月曜日と他の曜日では、バックアップする対象を変更出来るものとする。
 3.バックアップデータは7世代保持し、それ以前のバックアップデータについては削除を実施する。
確認環境
 CentOS6.x
 CentOS5.x
 Cron
◆処理の流れ(デフォルトの場合)
 1.「/win/BackUp/yyyymmdd」ディレクトリ作成
 2.バックアップ対象ディレクトリをgzで圧縮し、ログファイルを同時に作成
 →「/home」「/root」「/var/」をバックアップ
 3.7日以上前のバックアップファイルを削除
 4.詳細メールをroot宛に送信
◆まずはシェルスクリプトの作成
 [root@Server ~]# vi /root/backup.sh

#!/bin/sh
export LANG=ja_JP.UTF-8

# Ver 20111218

# バックアップ保存先ディレクトリ
DIR="/win/BackUp/"

# 特定の曜日のみ取得するバックアップを変更するか否か。「yes」で有効(デフォルト無効。毎日一定バックアップ)
# 有効化すると、月曜のみフルバックアップ、他曜日は一部のみバックアップと差別化が可能となります。
BACKUP_TYPE="no"

# バックアップ後に詳細メールを送信するか否か。「no」で無効。(デフォルト有効)
MAILMESSAGES="yes"
# メール送信先アドレス。(デフォルトroot宛)
MAILADDRESS="root"

if [ $BACKUP_TYPE = "no" ] ; then
# 特定の曜日のみ取得するバックアップを変更する設定を"無効化"した場合。(デフォルト設定)
# バックアップファイルの指定(デフォルト「/home」「/root」「/var/」)
LIST="/etc /home /root /var"
else

# 特定の曜日のみ取得するバックアップを変更する設定を"有効化"した場合。
# 曜日取得
DATE_W=`date '+%w'`
# フルバックアップ用、曜日判定(デフォルト「1」=月曜日)
if [ $DATE_W -eq 1 ] ; then
# バックアップファイルの指定
# 月曜のみフルバックアップ(保存先である「/Win」以外全てをバックアップ)
LIST=`ls / | egrep -v "win"`
else
# 火〜日曜は一部のみバックアップ(デフォルト 「/home」「/root」「/var/log」「/var/www」)
LIST="/home /root /var/log /var/www"
fi
fi

# タイムスタンプ設定
LOG_DATE=`date '+%Y%m%d'`

# バックアップ開始
mkdir $DIR$LOG_DATE
cd /
echo "----------バックアップ処理開始----------" >> $DIR$LOG_DATE/backup.log
tar czvfP $DIR$LOG_DATE/backup.tar.gz $LIST >> $DIR$LOG_DATE/backup.log 2>&1
echo "----------バックアップ処理終了----------" >> $DIR$LOG_DATE/backup.log

# 古いバックアップの削除(デフォルト7日)
echo "" >> $DIR$LOG_DATE/backup.log
echo "-----不要バックアップファイル削除開始-----" >> $DIR$LOG_DATE/backup.log
find $DIR -type d -mtime +6 -exec rm -rfv {} \; >> $DIR$LOG_DATE/backup.log 2>&1
echo "-----不要バックアップファイル削除終了-----" >> $DIR$LOG_DATE/backup.log

# メール送信
if [ $MAILMESSAGES = "yes" ] ; then
cat $DIR$LOG_DATE/backup.log | mail -s "$0" $MAILADDRESS
fi
◆一応実行権限を付与
 [root@Server ~]# chmod +x /root/backup.sh
◆cronにて自動実行するよう設定しましょう。
 [root@Server ~]# echo "05 5 * * * root bash /root/backup.sh >/dev/null 2>&1" >> /etc/crontab

毎日5時05分に自動実行されます。
変更する場合はcrontabにて設定を確認して下さい。

◆初回はとりあえず実験に動かしてみましょう
 [root@Server ~]# sh /root/backup.sh

バックアップ先に今日の日付のディレクトリが作成され、ファイルが2個(バックアップ+ログ)保存されていたら完了です。
〜バックアップ先ディレクトリをWindowsと共有している場合〜

普段使用しているWindowsマシンにて、BunBackupRealSync等でファイルの同期を取る事により、
同データを複数マシン(HDD)で保持する形となり、より高い安全性を保つことが出来ます。

Windowsの共有フォルダをLinuxでマウントして使用する方法参照

終わり。