人気ブログランキング | 話題のタグを見る
(Linux)バックアップシェルスクリプトで世代管理2

(Linux)バックアップシェルスクリプトで世代管理1で、世代管理機能付きのバックアップシェルスクリプトを書きました。
しかし、いざ運用を始めると数ヶ月前のデータがほしいなんてことも想定されます。

ということで、下記のようなバックアッププランを立てました。
・日次バックアップ(直近7日間保存)
・週次バックアップ(直近3週間分保存)
・月次バックアップ(直近2ヶ月間保存)

具体的に、日次バックアップは(Linux)バックアップシェルスクリプトで世代管理1のスクリプトで cron を使い毎日動かします。
週次バックアップと、月次バックアップは下記スクリプトを使い、日次バックアップのアップの最新版を各週次・月次バックアップ先にコピーし古いファイルは削除するようにしました。(なお、今回古いファイルの削除はファイルの更新日時から判断するようにしています。)
スクリプトの引数で、週次(week)か月次(month)か判断するようにしています。
スクリプトファイルは、(Linux)バックアップシェルスクリプトで世代管理1のスクリプトと同じディレクトリに保存します。
ファイル名は、/root/sh/bkup_cp.sh とします。

#! /bin/sh

#このスクリプトのパスを取得
MYPATH=$(cd $(dirname $0);pwd)

#週次バックアップ先
TO_DIR_WEEK="/var/backup/week/"
#週次で更新日時が22日より古いデータは削除対象
DAYAGO_WEEK="22"

#月次バックアップ先
TO_DIR_MONTH="/var/backup/month/"
#月次で更新日時が61日より古いデータは削除対象
DAYAGO_MONTH="61"

#bkup.shで使っているバックアップ対象バックアップ先設定ファイル(bksrc.dat)を使用
cat ${MYPATH}/bksrc.dat | grep -v \# | while read BKSRC_DIR BKUP_DIR
do
#バックアップ先から、指定したバックアップファイルの最新版を取得
FROM_FILE="`ls -lt ${BKUP_DIR}* | head -n 1 | gawk '{print $9}'`"
#週次、月次のバックアップ先と、何日間のデータを残すか設定
case "$1" in
"week" ) TO_DIR=$TO_DIR_WEEK
DAYAGO="+${DAYAGO_WEEK}"
;;
"month" ) TO_DIR=$TO_DIR_MONTH
DAYAGO="+${DAYAGO_MONTH}"
;;
esac

#更新日時が指定より古いファイルを削除
find $TO_DIR -mtime $DAYAGO -type f -exec rm -f {} \;

#コピー
cp ${FROM_FILE} ${TO_DIR}
done


cron の設定は下記のようになります。

#日次バックアップ
0 4 * * * /root/sh/bkup.sh
#週次バックアップ(日曜)
0 5 * * 0 /root/sh/bkup_cp.sh week
#月次バックアップ(毎月一日)
0 6 1 * * /root/sh/bkup_cp.sh month



ちなみに、テストでファイルの日付を変更する必要がありますが、touchコマンドを使うとmtime が変更できるようです。


mtimeを2011/4/11 1:00:00 に変更
touch -t 201104110100.00 hoge.txt


atime,ctime,mtimeの確認は、stat コマンドを使えばいいようです。

# stat hoge.txt
File: `hoge.txt'
Size: 18 Blocks: 16 IO Block: 4096 通常ファイル
Device: fd00h/64768d Inode: 25624583 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-05-09 17:11:04.000000000 +0900
Modify: 2011-05-09 17:10:46.000000000 +0900
Change: 2011-05-09 17:10:46.000000000 +0900


参考:
【 更新日時を現在に変更する 】 - Linuxコマンド逆引き大全:ITpro
ファイルやディレクトリの最終更新日時を変更する - 試験運用中なLinux備忘録
ctimeは、内容か属性が修正された日時を指し、作成日時を指すのではない - 試験運用中なLinux備忘録
by Jehoshaphat | 2011-10-05 00:09 | Linux


<< (Linux)tarを使うとき... (Linux)バックアップシェ... >>