HDDと言えば、壊れるのが宿命。正直消耗品なので仕方がないことです。フルに動かし続けて、3年間ぐらいが標準的なところなのです。で、おいちゃんの所ではどうか。現サーバが稼動し始めたのが2004年5月。2年経とうとしているところ。2年と言うと、正直不安が増してくるところです。ましてや、地震や、不意の停電とかもしあったりすると、HDがいかれることもあると言うことです。
すると、そー言うときの保険と言うことで、他のサーバにバックアップを取っておこうというものです。
rsyncってのは、差分バックアップを取ってくれるありがたいツール。差分バックアップとはなにか?変更があったファイルだけをバックアップし、何も変更がないファイルの場合はコピー操作を行わないと言うものです。なので、大量ファイルのバックアップであっても、時間の節約ができると言うことです。もちろん一番最初はフルバックアップをとるので時間がかかりますが、その後は1~2分でバックアップが終了できると言うありがたいツールです。
# rsync -a --delete コピー元 コピー先
です。コピー元、コピー先の指定は、ファイルでもディレクトリでもOK。ディレクトリの場合は、fooと指定するか、foo/と指定するかで意味が変わります
となりますので気をつけてねー
さらに、ネットワーク越しのコピーでもOK。sshなどと同じように、コピー元、コピー先をホスト名@場所と指定することで、ネットワーク越しにコピーができます。但し、コピー先にrsyncをサーバとして起動しておくことが必要です。ちなみにgentooのrsyncは、デフォルトでsshを使用したコピーとなる模様。チープなCPUの玄箱君とコピーすると、sshが目一杯動き出して、CPUを占有しちゃいました…
玄箱君をバックアップサーバとして動作させております。この子をNFSでエクスポートしておいてやって、バックアップ領域をサーバにマウントします。仮に/mnt/backupとしましょう。で
# rsync -a --delete バックアップ元 /mnt/backup
とやってやる。これでバックアップ取れますー。このやり方で、おいちゃんは動画や画像、DLしてきたツールなどデータのバックアップを1週間毎に取っております…
ついでに、おいちゃんはサーバの/以下を全てバックアップ取ってます。何故かと言うと、サーバ機のシステムは、大切に育てた唯一無二のもの。データは基本的に積み上げなので、単純同期でよいと思っています。んが、システム領域は、Gentooの場合、こまめにパッケージアップデートが繰り返されます。さらに、パッケージのバージョンアップによっては、サーバが動かなくなる場合もある…ということで、動く状態は保存しておく必要があると思い、フルバックアップ&インクリメンタルバックアップを取っております。
インクリメンタルバックアップとは、数回分のバックアップイメージを履歴として取っておくこと。おいちゃんの場合は、週1回バックアップを収集しています。それを3回分保存しているので、都合3週間分のバックアップを保存しているわけです。
でも容量3倍くっちゃうよねぇ??
というのが悩みの種。なのですが、UNIXの場合は、それを回避できる賢い方法があるのですわ。よくUNIXの場合リンクを用いますが、シンボリックリンクとハードリンクと言うものがあります。
これを使って、全く変更がないファイルはハードリンクし、変更があったファイルだけ実体をコピーするようにすれば、容量を極力使用しないで、複数世代のバックアップが管理できる、というわけ。
さて、稼動中の/以下のバックアップっていっても、単純にバックアップしてると、純粋なディスクイメージがコピーできないジャン?特にデバイスファイルなんかアクセスすると変なことが起きるよ?となりますよね。そこで、便利なコマンドがこれ!
# mount -o bind / /mnt/root
これを使うと、/ディレクトリを/mnt/rootに論理的に再マウントしてくれます。こーすると、/dev以下のデバイスファイルはただのファイルとしてしか見えないので、悪さしなくなります。さらに、ルートパーティションとデータパーティションを物理的に分けている場合は、ルートパーティション分だけしか見えないので、バックアップには非常に好都合なんですねぇ。
mount -o bind / /mnt/root rm -rf /mnt/backup/backup2 mv /mnt/backup/backup1 /mnt/backup/backup2 mv /mnt/backup/backup0 /mnt/backup/backup1 rsync -a --delete --link-dest=/mnt/backup/backup1 /mnt/root/ /mnt/backup/backup0/
結構単純でしょ?/を/mnt/rootに再マウント。一番古いバックアップを消して、それぞれバックアップの世代を古くして、rsyncで新しいバックアップを取る。--link-dest=っていう新しいオプションが追加されていますが、backup1と比較して、変更がないファイルはハードリンクをする、というオプションですね。コピーよりもハードリンクのほうが処理も軽く、容量も食わないので便利です。
いやーこれで安心。玄箱も活用できるしね♪さらにDVDにバックアップ取れば、もう完璧。壊れたときの保険はかけておいて失敗はないですよ。まぢで。リスクマネージメントせねばね♪