■自動バックアップスクリプト
Apacheの導入で、すっかり家庭内ウェブサーバとして活躍するオールドPB。しかし、さすがに古いマシンだけに「いつなんどき動作を停止するかわからない」という不安がつきまとう。
べつに商用サービスを提供しているのではないのだから、神経質になることはないのかもしれないが、いちおう大事なファイルだけでもバックアップする方法を考えておいたほうがいいだろう。
なにかいい方法は無いかと調べていたら、
というスクリプトが手に入った。
これは、2つのディレクトリ、たとえばAディレクトリの内容をBディレクトリに差分コピーしてくれるスクリプトだ。これを2つのディスク上にあるディレクトリで実行すれば、常に同じ2つのディレクトリを保つことができるのだ。
私の環境では、NetBSDは外付けSCSIドライブで運用しているので、もともとの内蔵SCSIドライブをバックアップ用のディスクとして使うことにした。つまり、Aを外付けドライブ上のディレクトリ、Bを内蔵ドライブ上のディレクトリとして、ミラーリングするのだ。
私のPBの場合、 sd1 が外付けSCSIで、RootとUsrのパーティションがある。 sd2 が内蔵SCSIで、CDドライブは無いので、これを/mntディレクトリにマウントしてある。 sd2 は320MBとわずかな容量しかないが、とりあえずウェブページくらいならバックアップできるだろう。 「本当なら、同容量のディスクを並列に運用したいところだが…」
syncdirにはいろいろなプラットフォーム向けのファイルがあるようだが、コンパイルするのも面倒なので私はPerlスクリプトで書かれたものを使わせてもらった。もちろんシステムにPerlがインストールしてなくてはならない。
Perl版syncdirを入手したら、改行コードをLFに変換し、(これは例によってMac上で行った…)
# mv syncdir /etc/syncdir
と、etcディレクトリに入れておいた。
これを定期的に動作させる方法はいろいろあるのだろうが、私は「シロウト」なのでシェルスクリプトのひとつも書けない… いったいどうすればいいのだろう。まず、スクリプトは、
syncdir -d [複製元ディレクトリ] [複製先ディレクトリ]
というコマンドで動作する。-dオプションは複製元には無いディレクトリが複製先にあった場合に自動的に削除するものだ。ディレクトリはフルパスで書く。もしも、複製先に指定したディレクトリが無い場合はmkdirで作るか、一度丸ごとコピーしておく。
いちいちディレクトリを入力するのも面倒なので、とりあえずコマンドひとつで動くように、ウェブページの保存してあるディレクトリを書いて、ファイルとして保存した。(echoの部分はご愛嬌…)
echo -n 'start backup...' /etc/syncdir/ -d /home/username/htdocs/ /mnt/username/htdocs/ echo 'done.'
このファイルをdbackup.shと言う名前で/etc/以下に保存しておく。(もちろん名前は何でもいい。)
これを
# chmod 755 dbackup.sh
実行可能なアクセス権に変更すれば、
# /etc/dbackup.sh
と、やるだけで実行できる。
NetBSDを使い始めた頃、システムからメールが定期的に送られてきて驚いたのだが、どうやらこれを動かしているのがmonthly weekly dailyなどどいうスクリプトらしいことに気づいた。おそらくcronというデーモンで動作させているのだろうが、linuxなどの説明とは違い/etc/crontabというファイルがNetBSDには見当たらない。
このファイルがあれば、ここに以下のような書式で実行したい時間と実行ファイルのパスを記入するだけで定期的に実行させることが出来るらしいのだが…
分 時 日 月 曜日 [実行コマンド]
しかし、よくよく探してみたら、/var/cron/tabs/以下にrootという名前でそれらしきファイルを見つけた。これに一行、
5 0-23/3 * * * /etc/dbackup.sh
と、書き加えて保存しておいた。一日一度のバックアップなら「時」のところを好きな時間にすればいいのだが、わたしは一応3時間に一度動作させるために上記の設定にした。これで自動的にバックアップがされるはずだ。