一応の完了: 玄箱でバックアップ
- 公開日: 2008/11/01(土) 22:52[JST]
「バックアップを考える」、「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関連だった。
を付与しています。