ファイルシステムを自動でマウント/アンマウントするautomountには、 amdとautofsの2種類があります。前者はSUNOSのamdのポートでuser spaceに実装されています。一方、autofsは、linux カーネルに組み込まれており、カーネルの知っているファイルシステムをsupportします。つまり、ext2は当然のこととして、nfs, iso9660, msdos等でもOKです。
ここでは、私が実際に使っているautofsを用いてnfsによるnetwork経由で他のmachineのdiskをautomountする方法とCD-ROMのautomountについて書きます。とっても便利です。
まず、NFSに必要なソフトを取って来ます。どうせやるならnfs3にしましょう。(^^) こっちの方が最適化できる範囲が大きいですから
nfs-utils-3.1を
SourceForge Project Page
からdownloadして、compileしinstallしてください。これが面倒だと言う方は、linuxppc-jpでご活躍の福井さんの労作、
HotPPCLinux
から、nfs-utils-0.3.1-x.ppc.rpmを取って来てinstallして下さい。
mount-2.10mより新しいものも必要です。おなじく、
HotPPCLinux
から、mount-2.10r-x.ppc.rpmを取って来て下さい。
Autofsも、どうせなら、autofs4にしちゃいましょう。
autofs-4.0.0-0.8mdk.ppc.rpm
を作ったので、持ってって下さい。
次に、kernelのcompile optionですが、私の場合は、make menuconfigをやって、まず最初に、 Main Menu --> Code maturity level options (一番最初の項目)で、
[*] Prompt for development and/or incomplete code/drivers
と、設定しました。これをやっておかないと、autofsの設定が出て来ません。
次に、Main Menu --> File systems --> Network File Systemsで、下記のように設定しました。
NFSv3を選んでいるのがミソです。
< > Coda file system support (advanced network fs) <*> NFS file system support [*] Provide NFSv3 client support <--- ここ <*> NFS server support [*] Provide NFSv3 server support <--- ここ <*> SMB file system support (to mount Windows shares etc.) [ ] Use a default NLS < > NCP file system support (to mount NetWare volumes)
さらにMain Menu --> File systemsで autofsの設定もしておきます。どうせなら、これも新しいv4を選びましょう。
[ ] Quota support <M> Kernel automounter support <M> Kernel automounter version 4 support (also supports v3)
v3も選びmoduleにしました。こうすれば、v4がうまくいかなくてもv3に戻れますから.......(^^;;;;;
念のために.configを見ておきましょう。
# # File systems # # CONFIG_QUOTA is not set CONFIG_AUTOFS_FS=m <--- CONFIG_AUTOFS4_FS=m <--- ------------------------------- # # Network File Systems # # CONFIG_CODA_FS is not set CONFIG_NFS_FS=y <--- CONFIG_NFS_V3=y <--- # CONFIG_ROOT_NFS is not set CONFIG_NFSD=y <--- CONFIG_NFSD_V3=y <--- CONFIG_SUNRPC=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y CONFIG_SMB_FS=y
あとは、make dep; make vmlinux; make modules; make modules_install でおしまい。なお、 上記のソフトとカーネルはNFS server(PM8500/120)とNFS client(iMac revB)の両方に入れておきました。
これについては、そこらにある本の中にいくらでも書いてあるのでそちらを見て下さい。----- では、あんまりなので(笑)、それと、nfsv3ではv2とちょっと違うので、簡単に書いておきます。
Server (hoge.hoge.com) : 192.168.10.1
Client (fuga.fuga.com) : 192.168.10.2
とすると、まず、
/etc/exportsをserverに下記のように作りましょう。/usr/ 192.168.10.2(rw,root_squash) /home/ 192.168.10.2(rw,root_squash)
次は、/etc/hosts.denyです。
portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL
ALL:ALLの方がより安全なのでしょうが、そうすると新しいサービスを導入した時にいちいち書き込まないといけないので、不精者の私は、 Linux NFS-HOWTOに従って上記のようにしました。
最後に/etc/hosts.allowです。
portmap: 192.168.10.2 lockd: 192.168.10.2 rquotad: 192.168.10.2 mountd: 192.168.10.2 statd: 192.168.10.2
上記のnfs-utils-0.3.1-x.ppc.rpmをinstallしておけば、
/etc/rc.d/init.d/nfs /etc/rc.d/init.d/nfslock
などの起動スクリプトが、入っているはずです。NFSサーバーであるhoge.hoge.comで調べてみましょう。
$ /sbin/chkconfig --list | grep nfs nfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
となってればOKです。もし、万一、こうなってなければ、
$ su # /sbin/chkconfig nfs on # /sbin/chkconfig nfslock on
とやって、NFS サービスが起動するようにしましょう。
一応、念のために再起動してから(上記のスクリプトを使って開始する方がスマートですけど)、rpcinfoを使って確かめてみます。
$ /usr/sbin/rpcinfo -p
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 895 status
100024 1 tcp 897 status
100011 1 udp 618 rquotad
100011 2 udp 618 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs <---
100021 1 udp 1026 nlockmgr
100021 3 udp 1026 nlockmgr
100021 4 udp 1026 nlockmgr
100005 1 udp 1027 mountd
100005 1 tcp 1024 mountd
100005 2 udp 1027 mountd
100005 2 tcp 1024 mountd
100005 3 udp 1027 mountd
100005 3 tcp 1024 mountd
矢印で示したように、NFS version 3があれば、OKです。
あと、おまけとしては、/etc/exportsを書き換えた時
# /usr/sbin/exportfs -ra
とやれば、強制的にnfsdに/etc/exportsを読みなおさせることができ便利です。
こちらは簡単です。上記の設定を使って、NFS clientのfuga.fuga.comにNFS serverのhoge.hoge.comの/homeをマウントしてみましょう。NFS clientのfuga.fuga.comで以下のようにやってみます。
# cd /mnt # mkdir home # mount hoge.hoge.com:/home /mnt/home
これで、/mnt/homeにNFS serverのhoge.hoge.comの/homeがマウントされるはずです。って言うか、私はされました(笑)。アンマウントは勿論、
# umount /mnt/home
で、OKです。でも、これだけでは面白くありません。やっぱり、自動的にマウント、アンマウントされるようにしたいものです。そこで、Autofsの出番です。
最初の方に書きましたが、既に autofs-4.0.0-0.8mdk.ppc.rpm がinstallされていれば、autofsの起動スクリプトである/etc/rc.d/init.d/autofsが入っているはずです。上述の例で言うと、NFS clientのfuga.fuga.comで下記のように確かめてみましょう。
$ /sbin/chkconfig --list | grep autofs autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
こうなっていれば、OKです。もし、万一、こうなってなければ、
$ su # /sbin/chkconfig autofs on
とやって、Autofs サービスが起動するようにしましょう。このあたりのことは、NFSで書いたことと同じようにすれば良いです。
次に、設定ファイルを記述します。基本設定は/etc/auto.masterです。私の場合は下記のようにしてます。
/auto/hoge /etc/auto.hoge --timeout 60 /auto/cd /etc/auto.cdrom --timeout 30
hogeはNFSの項で書いたNFSサーバーです。最初の列はmount pointそのものではなく、mount pointがセットされる場所を示しています。2番目の列は動作を設定するファイルを指定しています。3番目の列はオプションで何秒間使用されなければアンマウントされるかを指定します。
そして、上記で指定した/etc/auto.hogeは下記のようになってます。
home -fstype=nfs hoge.hoge.com:/home usr -fstype=nfs hoge.hoge.com:/usr
最初の列はmount pointを示しています。2番目の列はmountのoptionです。nfsがdefaultなので、あえて、設定する必要はありませんが、念のため書いてます。詳細は、man mountしてみて下さい。3番目の列は、どこのファイルシステムをマウントするかを指定します。
/etc/auto.cdromは下記のようにしました。
0 -fstype=iso9660,ro :/dev/cdroms/cdrom0
以上より、hoge.hoge.comの/homeはfuga.fuga.comの/auto/hoge/homeにマウントされ、CD-ROMは/auto/cd/0にマウントされるようになるはずです。そうそう、私は、devfsに移行しているので、CD-ROMの設定が上記のようになりますが、まだ移行していない場合は、
cd -fstype=iso9660,ro :/dev/cdrom
と言う風にすれば良いかと思います。なお、devfsへの移行については別項で書く予定です。
それから、autofs moduleはversion 4の方を使うようにしておきしましょう。/etc/modules.confに下記を追加して下さい。
alias autofs autofs4
最後に、設定ファイルに記述したautomount用のdirectoryを作っておきます。
$ su # cd / # mkdir auto # cd auto # mkdir hoge # mkdir cd
これでおしまい。マシーンを再起動するか、起動スクリプトでautofsを起動するかしてから、以下のように試してみましょう。
$ cd /auto/hoge/home $ cd /auto/cd/0
さあ、これで、lsしてみた時ちゃんとhogeやCD-ROMの内容が表示されるはずです。私は、メールの読み書きなど、もっぱら、fugaの方でやっていますが、disk容量が少ないので、Mail directoryはhogeのhome directoryに置いています。そして、fugaで、
$ cd /home/watashi $ ln -s /auto/hoge/home/watashi/Mail /home/watashi/Mail
と、hogeのほうにsymbolic linkを張っています。この環境で、fugaから、メールの取り込み、読み書きなどはnetwork越しであることを全く意識すること無く行えます。また、hogeとfugaの両方が同じMail directoryを使っているのでどちらを使っても同じメール環境になります。とても便利です。
ついでにNFSの最適化を試みてみました。まず、fuga.fuga.comマシーン(iMac revB)の/etc/auto.hogeを以下のように書き換えました。
home -fstype=nfs,rsize=xxxx,wsize=xxxx hoge.hoge.com:/home usr -fstype=nfs,rsize=xxxx,wsize=xxxx hoge.hoge.com:/usr
xxxxのところを、1024〜32768と変えていって、下記のコマンドでfuga.fuga.comaからhoge.hoge.com(PM8500/120)への書き込み及びhoge.hoge.comからの読み込みのスピードを測定しました。そうそう、NFS version 3は32768 bytesまでOKですが、version 2は8192 bytesまでしか扱えないので気をつけましょう。
$ time dd if=/dev/zero of=/auto/hoge/home/watashi/testfile bs=16k count=16384 $ time dd if=/auto/hoge/home/watashi/testfile of=/dev/null bs=16k
これで、256Mbのファイルの書き込み、読み込みのperformanceを見る訳です。(ディスクスペースのあき容量に気をつけましょう (^^)) cachingの影響を避けるために、一回毎に/auto/hoge/home/watashiがアンマウントされるまで待ってから各々の測定を行いました。以下が結果です。
| rsize & wsize | write time (sec) | write speed | read time | read speed |
|---|---|---|---|---|
| 1024 bytes | 8m48.099s | 485kB/sec | 8m43.402s | 489kB/sec |
| 4096 bytes | 6m53.753s | 618kB/sec | 5m20.660s | 798kB/sec |
| 8192 bytes | 5m59.601s | 711kB/sec | 5m5.108s | 839kB/sec |
| 32768 bytes | 5m57.683s | 715kB/sec | 4m21.575s | 977kB/sec |
うーむ、1024から8192にすると、書き込みが60%、読み込みが72%速くなると言ったところでしょうか (^^)。意外にも、期待の32768クン(笑)は大したことなかったですな。書き込みは8192と大差ないです。さすがに読み込みは1024の約2倍になってますが。どうせ、小さなファイルのやりとりが多いでしょうから、私は8192を選んでます。それにしても、遅いと言う評判のlinux nfsですが、8192の設定で10Base-T(10Mbps)の58-67%を使用している訳で、なかなかやるじゃあないですか。これは、早いとこ100Base-TXにしたいものだな!!って、今ごろそんなこと言ってるのは私ぐらいかな(^^;;;; 100Mbpsな方の御報告をお待ちしております。(^^)
追加:最近、ようやく、100Base-TXにしました (^o^)。詳細はRTL8139で100Base-TXを御覧下さい。