manekineko倉金家ホームページ

趣味の部屋/インターネットサーバー/サーバー構築メモ

6.サーバーバックアップ

2007年2月24日 2009年2月16日 改定
サーバーをバックアップをするための設定をします。

NFSが繋がり、ユーザの設定が完了したのでさっそくバックアップ用のスクリプトを書いてバックアップをやります。

・前回のバックアップから更新されたファイルのみ上書きする。
・バックアップの状況は画面に表示すると共にログファイルにも記録する。
・メッセージとログを極力見やすくする。

ということにします。

バックアップ用スクリプト
まずホームページをバックアップするためのスクリプトを書きます。
テキストエディタでsite-backup.shを新規作成し、/rootディレクトリにでもおいておきます。

(site-backup.sh)
#!/bin/bash

LOGFILE="/var/log/site-backup.log"
function dircopy()
{
 echo "copying from $1 to $2" | tee -a "$LOGFILE"
 if [ -d "$1" ]
  then
   cd "$1"
   find . -print | cpio -admpv "$2" 2>&1 \
    | grep -v "newer or same age version exists" \
    | sed "s/\/\.\//\//" \
    | /root/pickup_file.sh \
    | tee -a "$LOGFILE"
   echo | tee -a "$LOGFILE"
  else
   echo "Can't open $1" | tee -a "$LOGFILE"
   echo | tee -a "$LOGFILE"
 fi
}

#kuragane.jpのバックアップ
SRCDIR="/mnt/home.baba/kuragane.jp"
TGTDIR="/home/kuragane.jp"
dircopy $SRCDIR $TDTDIR

#....のバックアップ
....
という具合。

バックアップログは/var/log/site-backup.logに記録されますが、このとき更新されていないファイルについては、
... newer or same age version exists ...
のメッセージを出して上書きしないのでそれは記録しないようにしてあります。
さらにsedでメッセージを少し整形してさらにファイル名のみを表示させるためのスクリプトpickup_file.shを通し、更新されたファイルのみを表示するようにしていますので非常にわかりやすくなります。

(/root/pickup_file.sh)
#!/bin/sh
while read path
do
  if [ -f "$path" ] ; then
    echo "$path"
  elif [ ! -d "$path" ] ; then
    echo "$path"
  fi
done

バックアップ
rootターミナルからsite-backup.shを実行します。

copying from /mnt/home.baba/kuragane.jp to /home/kuragane.jp
........(更新されたファイル名)
........(更新されたファイル名)
1234 blocks

と表示され、ファイルを見てみるとちゃんとコピーされていました。

めでたしめでたし。

あとは同様にその他必要なデータなどのバックアップスクリプトを作ってバックアップ完了。
自動で一日一回バックアップするなどもできますが、さほど更新頻度も高くないので手動でも充分。