一応の完了: 玄箱でバックアップ

バックアップを考える」、「Gentoo on 玄箱←失敗」、「Debian etch on 玄箱」の続き。

バックアップは以下の方針でいくことにした。

  • Level0 dumpは時間もかかるので、make world時に行う。

  • 毎週水曜深夜にLevel1 dump。

  • それ以外の日はLevel2 dump。

んで、こんなスクリプトを作ってみた。FreeBSD用なんで、他の環境で動くかは分かりません。 /backup がサーバにマウントした玄箱の共有ボリューム、SERVERNAMEが玄箱のSambaのNetBIOS名です。自分が使えりゃそれでいい的なスクリプトなんで、全然スマートじゃないとおもいます。ごのスクリプトを毎日cronで実行させる予定。

#!/bin/sh

#自動バックアップスクリプト
#2008/11/1 作成 by KtJ

# /, /var, /usrをdumpでバックアップ
# /のバックアップ先→/backup/dump/root.???
# /varのバックアップ先→/backup/dump/var.???
# /usrのバックアップ先→/backup/dump/usr.???
# ???: バックアップを行った日の前日の曜日
# 木曜に実行したときは、dumpでLevel 1バックアップ
# それ以外の日に実行した場合は、dumpでLevel 2バックアップ
# (木曜からの差分)
# Level 0バックアップはmake world時に実行

# まず念のためにjailを落とす

echo "stopping jail"
/etc/rc.d/jail stop
echo "jail is stopped"


#曜日の取得(日曜=0、月曜=1・・土曜=7)
DAY=`/bin/date +%w`

#バックアップ用ボリュームのマウント
MT=`df | grep SERVERNAME`
if [ ! "${MT}" ]
then
      echo "/backup is not mounted. Now mounting"
      /sbin/mount /backup
      echo "Mounted"
else
      echo "/backup is already mounted"
fi

#バックアップ処理
case "${DAY}" in
      0) DAY2="sat"
      DAY3="fri";;

      1) DAY2="sun"
      DAY3="sat";;

      2) DAY2="mon"
      DAY3="sun";;

      3) DAY2="tue"
      DAY3="mon";;

      4) DAY2="wed"
      DAY3="tue";;

      5) DAY2="thu"
      DAY3="wed";;

      *) DAY2="fri"
      DAY3="thu";;
esac

if [ "${DAY}" -eq 4 ]
then
      echo "Backupping root"
      OUTPUT_FILE="/backup/dump/root.""${DAY2}"
      /sbin/dump -1 -u -a -L -f "${OUTPUT_FILE}" / 1>/dev/null 2>>/var/log/dump.error
      echo "done"
      echo "Backupping var"
      OUTPUT_FILE="/backup/dump/var.""${DAY2}"
      /sbin/dump -1 -u -a -L -f "${OUTPUT_FILE}" /var 1>/dev/null 2>>/var/log/dump.error
      echo "done"
      echo "Backupping usr"
      OUTPUT_FILE="/backup/dump/usr.""${DAY2}"
      /sbin/dump -1 -u -a -L -f "${OUTPUT_FILE}" /usr 1>/dev/null 2>>/var/log/dump.error
      echo "done"
else
      echo "Backupping root"
      OUTPUT_FILE="/backup/dump/root.""${DAY2}"
      /sbin/dump -2 -u -a -L -f "${OUTPUT_FILE}" / 1>/dev/null 2>>/var/log/dump.error
      echo "done"
      echo "Backupping var"
      OUTPUT_FILE="/backup/dump/var.""${DAY2}"
      /sbin/dump -2 -u -a -L -f "${OUTPUT_FILE}" /var 1>/dev/null 2>>/var/log/dump.error
      echo "done"
      echo "Backupping usr"
      OUTPUT_FILE="/backup/dump/usr.""${DAY2}"
      /sbin/dump -2 -u -a -L -f "${OUTPUT_FILE}" /usr 1>/dev/null 2>>/var/log/dump.error
      echo "done"
fi

#バックアップ用ドライブのアンマウント
/sbin/umount /backup

#jailの再開
echo "restarting jail"
/etc/rc.d/jail start
echo "done"

それから、Level0 dump用のスクリプトも作成。こちらは一度実行して動作することを確認しました。

#!/bin/sh

#自動バックアップスクリプト(Level0)
#2008/11/1 作成 by KtJ

# /, /var, /usrをdumpでバックアップ
# /のバックアップ先→/backup/dump/root.0
# /varのバックアップ先→/backup/dump/var.0
# /usrのバックアップ先→/backup/dump/usr.0
# make world時にシングルユーザモードで実行するLevel 0バックアップ

#バックアップ用ボリュームのマウント
MT=`df | grep SKYTRAIN`
if [ ! "${MT}" ]
then
      echo "/backup is not mounted. Now mounting"
      /sbin/mount /backup
      echo "Mounted"
else
      echo "/backup is already mounted"
fi

#バックアップ処理
echo "Backupping root"
OUTPUT_FILE="/backup/dump/root.0"
/sbin/dump -0 -u -a -L -f "${OUTPUT_FILE}" / 1>/dev/null 2>>/var/log/dump.error
echo "done"
echo "Backupping var"
OUTPUT_FILE="/backup/dump/var.0"
/sbin/dump -0 -u -a -L -f "${OUTPUT_FILE}" /var 1>/dev/null 2>>/var/log/dump.error
echo "done"
echo "Backupping usr"
OUTPUT_FILE="/backup/dump/usr.0"
/sbin/dump -0 -u -a -L -f "${OUTPUT_FILE}" /usr 1>/dev/null 2>>/var/log/dump.error
echo "done"

#バックアップ用ドライブのアンマウント
/sbin/umount /backup

処理時間は一時間あたり10Gバイト程度でした。ちと遅いかな。

あと、サーバがmake worldで落ちているときも他のPCが使えるよう、bind9(slave)とsquidGuardも玄箱に導入。これで一応玄箱の設定は完了(squidとsquidGuardの設定はこれからだが)。当面はこれ以上のことは玄箱にさせないつもり。

結局、玄箱には以下のパッケージを導入した。

  • Samba3 (サーバのバックアップ専用ファイルサーバ)

  • postfix (バックアップMX専用のメールサーバ)

  • bind9 (slave DNS)

  • squid (プロキシサーバ。squidGuardと組み合わせてhttpのフィルタリングを行う)

  • openntpd (ntpサーバ)

  • openssh server (sshサーバ)

  • apcupsd (UPS関連)

これで/dev/hda1の使用量は531MB。うち/varが189MB。何でこんなに?と思ったらaptとdpkg関連だった。

コメント(0)



Note

本サイトのハイパーリンクの一部は、オリジナルのサイトが閉鎖してしまったため"Internet archive Wayback Machine"へのリンクとなっています。そのようなリンクにはアイコン[archive]を付与しています。

本サイトはCookieを使用しています。本サイトにおけるCookieは以下の三種類のみであり、Cookieの内容に基づいてサイトの表示を変更する以外の用途には用いておりません。