2009-04-30

ハードディスクが壊れたので NAS を導入してみた

バッファロー(メルコ?)の NAS (LS-QL/1D) というやつをセットアップしてみた。

IMG_0817もともとは Ubuntu 8.04 Server(LTS) のサーバーに USB 接続のディスクをつないで使っていたところ、そのディスクがあれよあれよというまに読めなくなってしまったのがことの発端。

実は異常に気付いたときには、まだそれとなくファイルシステムは読み出せていて、read-only でマウントされているような状態だった。それを fsck しようとして、どんどん深みにはまり、最終的にはディスクラベルからなにから全く読めなくしてしまった。あのとき、速攻で救えるだけのバックアップだけでも取っておいたらよかったんだけど……。

バックアップは、pdumpfs を使って一日に一度別のディスクにコピーを取り、さらに、大事なファイル(というか自分で必要なもの)のみをネット経由で毎日別のマシンにコピーするという二本建になっていた。ところが、pdumpfs を使う方がこの数ヶ月正しく動作しておらず、結果として他の人が使う・作ったファイルがかなりの量失われることになった。まぁ、仕方ない。業務を続けるのに必要なだけのものは残っていたので皆には我慢してもらうことになった。

で、代替のファイルサーバとして、Web インタフェースで Linux や Samba の知識がなくても使えるものをということで、バッファロの LS-QL/1Dというのを買ってきた。確かにセットアップは簡単でweb経由で誰でもできる。でも、附属のユーティリティは殆ど使いみちがない(LAN 上に NAS を探して、それぞれに http できるようにするだけ。一度 IP アドレスを固定してしまえば用なし)ばかりか、不要なプログラム(/Library/StartupItems/NASPower/……)をバックグランドで走らせたままにするなどという行儀の悪さもありあまり感心できない。いろいろ調べて、このプログラム自体はディレクトリごと /Library/StartupItems(Disabled)/ に移動しておくことにした。

この NAS、まだ全然使いこんでないのだけど、RAID を組み かえたときには、中身は消えちゃうとか特に目立った特徴のない普通のものだと思う。ただ、OMRON や APC の UPS が素で繋がるという点はなかなかいいなと思う点で、自分も OMRON の UPS (BZ35T) を一台使わずに余らせていたので、寄付することにいた。テストもしてみたけど、停電するとちゃんとシャットダウン処理するみたいだし、復電時にもしっかり再起動するのを確認した(UPS の再起動にはけっこう時間がかかるようで、気長に待つ必要はあるみたいだ)。

ハードウェアの障害に対しては、RAID1 で対処するとして、間違ってファイルを削除・上書きしてしまうなどのヒューマンエラーにはやはり世代ごとのバックアップが必要。もちろん、標準ではこんな機能はついてないので自前でなんとかすることになる。UNIX ライクな OS で世代バックアップを手軽に取るにはやはり pdumpfs が便利なので、これを使うことにした。以前は Linux マシンのディスク間でやっていた pdumpfs を samba 経由でやるように小さなシェルクリプトを書いた。取りあえずの版なので、いい加減なままだがおいおいまともにしていくつもりだけど、だいたい下に引用したような感じになる。NAS(IP アドレスが NAS_IP_ADDR) の SHARE という共有上の DAIJI_FOLDER というディレクトリを、このスクリプトを動かすマシンの /pdumpt/DAIJI_FOLDER というディレクトリに pdumpfs を使って世代バックアップする。

#!/bin/sh

mounted=YES
mountpoint=/mnt_for_backup
mountoptions=ro,credentials=/usr/local/etc/cifs.cred,iocharset=utf8
destroot=/pdumped
exec 1>${destroot}/log 2>&1

SRCDIR=`mount | awk '/^\/\/NAS_IP_ADDR\/SHARE/ {print $3;}'`
if [ x"$SRCDIR" = "x" ]; then
# must umount after backup
mounted=NO
mount -t cifs //NAS_IP_ADDR/SHARE $mountpoint -o $mountoptions \
|| exit 255
else
mountpoint=$SRCDIR
fi

DEST=$destroot'/DAIJI_FOLDER'
SRC=$mountpoint'/DAIJI_FOLDER'
/usr/bin/pdumpfs $SRC $DEST

if [ $mounted = 'NO' ]; then
umount $mountpoint
fi
この NAS の Samba のバージョンはそこそこ新しいらしく、Ubuntu 8.04 の mount -t cifs できちんとマウントできるので助かっている(自分の普段の職場の NAS だと、これができないので……)。

なにはともあれ、これで一段落。RAID0 と UPS による対障害性と、pdumpfs による世代バックアップで、少しは安心できるようになっているはずだ。

1 comment:

smithe said...

helo friend: you want to come race Blogg Design? please read the news more. How to be your friend. thanks.