2006年1月21日土曜日

FreeBSD+amd+NFS+玄箱

amdというのは、automount、つまり、必要になったときだけファイルシステムをマウントして、使っていないときはアンマウントしてしまうデーモンさんの一種です。SunのSolarisやLinuxでは、automountautofs)というのがよく使われていますが、BSD系OSでは、昔からamdが使われています。



amdは、NFSのときによく使われます。NFSマウントしている最中に、NFSサーバ・マシンが落ちてしまうと、NFSクライアントは、NFSアクセス待ちになって、処理がとまってしまいます。amdを使っていれば、使っていないとき自動でアンマウントされるので、サーバのトラブルに引きづられることがありません。



また、マシンの起動順序にある程度融通をきかせることもできます。NFSを利用している場合、NFSサーバ・マシンを起動してから、NFSクライアント・マシンを起動させなければなりません。しかし、amdは、NFSサーバ上のファイルへのアクセスが発生した時点ではじめてNFSマウントされるので、通常状態でNFS上のファイルへのアクセスがないのなら、NFSサーバ・マシンを先に起動する必要がなくなります。2台のマシンが互いにNFSマウントしあうような場合も、amdを使えばデッドロックを防ぐことができます。



NFS以外にも、CD/DVD-ROMをマウントしたりするのにも、amdを使うことができます。



■ 準備



○NFSの設定



FreeBSDと玄箱との間でNFS



で書いてあるようにして、NFSを使えるようにしておきます。







○ /etc/hostsファイルの作成



ところで、いつまでもIPアドレスで指定するのはナニなので、/etc/hostsファイルに登録しておきます。



FreeBSD、玄箱ともに、こんなかんじで、2台分を登録しておきます。

192.168.0.21 freebsd.my.domain freebsd
192.168.0.41 kuro-box.my.domain kuro-box

左から、IPアドレス、ホスト名の順です。ホスト名のところには、複数書いておけば、別名として使えるようになります。





○ FreeBSD側でamdを動かす設定をする



amdを動かすためには、/etc/rc.confに、以下の1行を追加します。

amd_enable="YES"

/etc/defaults/rc.confを見るとわかりますが、amd_flagsという変数で、いろいろとパラメータを渡すこともできます。しかし、今回の場合とくに必要ありません。



本格的にamdを使う場合は、パラメータを渡すよりも、設定ファイルを作ったほうがいいかもしれません。man amd.confでマニュアルが表示されますが、・・・けっこう上級者向けかもしれませんね。そもそもamd.confのサンプルファイルさえ用意されていませんし。



■ FreeBSD上でamdを動かす



FreeBSDを再起動すればamdが起動しますが、とりあえず今すぐ動かすには「/etc/rc.d/amd start」を実行します。

freebsd# /etc/rc.d/amd start
Starting amd.

amqコマンドを実行すると、amdの動作状況を見たり、amdを制御す
ることができます

freebsd# amq
/      root    "root"        freebsd:(pid3232)
/net   toplvl  /etc/amd.map  /net
/host  toplvl  /etc/amd.map  /host

■ 玄箱にNFSアクセスする



amqコマンドで表示されるように、/net/hostというディレクトリが、amdの管理下にあります。



/net/玄箱のホスト名/うんたらかんたら」というパスにアクセスすると、amdによって、玄箱のファイルシステムが自動的にNFSマウントされます。



(そうなるように/etc/amd.mapに秘密の呪文が書いてあるのです)



ls /net/kuro-box」を実行すると・・・



freebsd# ls /net/kuro-box
bin             home            lost+found      root            usr
dev             home2           mnt             sbin            var
etc             lib             proc            tmp             www



前回NFSの設定をしたとき、玄箱の/etc/exportsで、大胆にもすべてのファイルシステムを公開するようにしたので、上のように、全部、みえちゃっています。



/mntだけexportするように設定した場合は、たぶん、ls /net/kuro-boxを実行すると、mntだけが見えると思います。



さて、さらに、「ls /net/kuro-box/mnt」を実行すると・・・



freebsd# ls /net/kuro-box/mnt
kuro-box.iso    lost+found      share           share-mac



どんどん、中を見ていけますよ。



freebsd# ls /net/kuro-box/mnt/share
NFS-setup.sh            hello.c                 tcsh-6.14.00
a.out                   hello.o                 tcsh-6.14.00.tar.gz
binary                  tcsh



amdで、どのようにマウントされているか、amqで見えます。



freebsd# amq
/              root    "root"                  freebsd:(pid3232)
/net           toplvl  /etc/amd.map            /net
/host          toplvl  /etc/amd.map            /host
/net/kuro-box  host    kuro-box:/net/kuro-box  /.amd_mnt/kuro-box/host



なれないとわかりにくいですが、最後の1行は、NFSサーバkuro-boxのファイルシステムをマウントしてるよん、ということです。



実際にどのようにNFSマウントされているかは、mountコマンドのほうが、見やすいでしょう。



freebsd# mount | grep kuro-box
kuro-box:/ on /.amd_mnt/kuro-box/host (nfs, nosuid)
kuro-box:/mnt on /.amd_mnt/kuro-box/host/mnt (nfs, nosuid)





■ アンマウントする



玄箱上のファイルにアクセスしないまま、数分たつと、自動的にアンマウントされます。amqコマンドやmountコマンドで、マウントされているかどうか確認できます。



amq -uコマンドで、即座にアンマウントさせることもできます。



freebsd# amq
/              root    "root"                  freebsd:(pid3232)
/net           toplvl  /etc/amd.map            /net
/host          toplvl  /etc/amd.map            /host
/net/kuro-box  host    kuro-box:/net/kuro-box  /.amd_mnt/kuro-box/host



となっているとき



freebsd# amq -u /net/kuro-box



とすると



freebsd# amq
/      root    "root"        freebsd:(pid3232)
/net   toplvl  /etc/amd.map  /net
/host  toplvl  /etc/amd.map  /host



アンマウントされました。ただし、/net/kuro-box/以下のファイルにアクセスしているプロセスがいる場合、アンマウントできません。





0 件のコメント:

コメントを投稿