Be Silent! 〜 ミニサーバ日記 〜 27. 設定ファイルを定期的にバックアップ


 だいぶ安定してきたので、/etc以下その他の設定ファイルを バックアップするスクリプトを組んで、定期的に流すようにしてみた。

 まずは大体、この辺をバックアップする。

 各種設定ファイルが入っている/etc/、ログがのきなみ入っている/var/log/は いうまでもないだろう。 いっちょまえにDNSサーバも動かしているので、そのデータベースのある/var/named/も バックアップする。 /home/share/というのは、ミニサーバよりも、むしろ他のWindowsマシンから 共有されるファイルが入っているところ。それはそれで重要なファイル達だ。 あと自前のプログラムとかスクリプトとかが入っているのが/usr/local/以下。 ついでにRedHatなので、RPMのデータベース(/var/lib/rpm/)もバックアップ とってやらなければ。(笑)

 これらをそれぞれ .tgz に固めて、適当なところに退避させておこうというわけだ。 こういうのを保管するのに、標準的な場所というのを知らないので、 適当にディレクトリを用意してそこに保存するようにした。

 そして、不意のクラッシュに備えるという目的と同じくらい重要なもう一つの目的、 「失敗したときに元に戻せるようにする」ために、バックアップは複数世代 保存しておくようにするのだ。 変な風に設定を変えちゃった直後にバックアップが上書きされちゃったりすると、 動かない設定ファイルを後生大事にバックアップすることに(笑)

 そこで、.tgzを作る前に、こんなスクリプトを呼んで、最新+4世代、合計5世代 保管できるようにしてみた。小さいので以下に書いてしまおう。

#!/bin/sh
#
# 2003/11/30 opa

MYNAME=rotate-5g

if [ ! "$1" ]; then
	echo "usage: $MYNAME rotate-filename"
	exit 100
fi

for F; do
	if [ -f "$F" ]; then
	  if [ -f "$F.1" ]; then
	    if [ -f "$F.2" ]; then
	      if [ -f "$F.3" ]; then
	        if [ -f "$F.4" ]; then
	          rm --force "$F.4"
	        fi
	        mv --force "$F.3" "$F.4"
	      fi
	      mv --force "$F.2" "$F.3"
	    fi
	    mv --force "$F.1" "$F.2"
	  fi
	  mv --force "$F" "$F.1"
	fi

	touch "$F"
	if [ -f "$F.1" ]; then
		chown --quiet --reference="$F.1" "$F"
		chmod --quiet --reference="$F.1" "$F"
	fi
done

 大したことはない、logrotateの真似事をしているだけだ。(^_^;

 引数としてファイル名を与えると、例えばetc.tgzという引数を与えれば、それを etc.tgz.1という名前にリネームする。但しその前にetc.tgz.1というファイルが既に あるかどうか確認し、もしあればそれをetc.tgz.2という名前にリネームする。但し その前にetc.tgz.2というファイルが既にあるかどうか確認し・・・という具合だ。

 これを使ってサクサクと作ったスクリプトを毎週流すことにより、とりあえず 不意の事故でも、最大で1週間のまきもどりで済む。あるいは何か設定を間違えても 5週間以内に間違いに気付けば、簡単に元に戻せる、ということになる。

 ま、これだけやっても壊れるときは壊れるが。(^_^;


トップ もどる