一応の完了: 玄箱でバックアップ
- 公開日: 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関連だった。