rsyncでバックアップ
昔業務系システムを自分で管理していた時代はtarをcronで定期実行していましたが、コンテンツ系システムだとファイル数が非常に多く、差分バックアップを使わないとディスクスペースや処理時間がかかってしまうのでrsyncを使ってローカルに差分バックアップをとるようにしてみました。
本当はディスクシステムを使ったスナップショットやらちゃんとした市販ソフトの適応を検討するべきなのでしょうが小規模ならばこれでもよいかなと。
とりあえず動いているみたいなので置いておきます。OSはcentos5.5です。
rsyncエラー時の処理はテストしてみていません。
サンプルコード
#!/bin/bash # # rsyncを使った差分バックアップ # $BACKUPDIR配下にbackup0〜backup$BACKUPGENのフォルダ名でバックアップ # backup0が最新バックアップで実行する毎にbackupフォルダをずらす # backup日時はフォルダの日時で判別可能なので特に取らない # rsyncの差分はbackup1とバックアップ対象を比較 # backup0が存在していない場合はフルバックアップ # #--- 設定 --- #バックアップ履歴数 BACKUPGEN=4 #バックアップ対象 BACKUPFROMDIR="/var/www/moodle01" #バックアップ先フォルダ BACKUPDIR="/backup" #前準備 echo "`date` backup start" CNT=$BACKUPGEN while [ $CNT -ge 0 ] do if [ $CNT -eq $BACKUPGEN ] then # 最後の1つを削除 if [ -d $BACKUPDIR/backup$CNT ]; then echo "rm -fr $BACKUPDIR/backup$CNT" rm -fr $BACKUPDIR/backup$CNT fi else MVCNT=`expr $CNT + 1` #バックアップディレクトリをずらす if [ -d $BACKUPDIR/backup$CNT ] then echo "mv $BACKUPDIR/backup$CNT $BACKUPDIR/backup$MVCNT" mv $BACKUPDIR/backup$CNT $BACKUPDIR/backup$MVCNT fi fi CNT=`expr $CNT - 1` done #rsync準備 RSYNCCMD="rsync -av --delete" if [ -d $BACKUPDIR/backup1 ]; then #backup1との差分をbackup0にバックアップ echo "$RSYNCCMD --link-dest=../backup1 $BACKUPFROMDIR $BACKUPDIR/backup0" $RSYNCCMD --link-dest=../backup1 $BACKUPFROMDIR $BACKUPDIR/backup0 else #初回のフルバックアップ echo "$RSYNCCMD $BACKUPFROMDIR $BACKUPDIR/backup0" $RSYNCCMD $BACKUPFROMDIR $BACKUPDIR/backup0 fi code=$? if [ $code -ne 0 ]; then mail -s "BACKUP NG CODE IS $code" root exit 1 fi echo "`date` backup end" exit 0
余談
あと久々にsh弄るとけっこう忘れていてショックが大きかった・・・。久々に下記の本を引っ張り出して書いていました。
もともとWebアプリよりはクラサバ系のアプリをUNIXで組んでいたので、linuxを初めて使ったとき、各種資源がどう扱われるのか知りたくてこの本を買いましたが、今でも十分通用する良書かと思います。
Webだけやるならここまでのことを知らなくともどうにでもなりますが、このあたりをちゃんと知っているエンジニアはトラブルシューティング能力が段違いですね。こういった要素がちゃんと評価される世の中になってほしいです。
Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて
- 作者: ニールマシュー,リチャードストーンズ,Neil Matthew,Richard Stones,葛西重夫
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/08
- メディア: 単行本
- 購入: 4人 クリック: 69回
- この商品を含むブログ (20件) を見る