フロッピーディスクや CD-ROM のようなリムーバブルメディア、 NFS におけるリモートホストへのマウントをアクセスがあったときに 自動的におこなうのがオートマウントデーモン amd です。
参考 URL:
http://www.on.rim.or.jp/~ryo2/amd.html
http://funah02.eg.t.kanazawa-u.ac.jp/~sakai/computer/amd.html
amd を使うには、カーネルが NFS をサポートしている必要があります。 まずは、確認しておきましょう。 デフォルトではサポートされています。
/usr/src/sys/i386/conf
options NFS #Network Filesystem
しかし、nfsd が稼働している必要はありません。
ところが、NFS にも使われる /usr/sbin/portmap は必要なので、 動いていなければ動かしておきます。
# /usr/sbin/portmap
どこのディレクトリに何をどのようなオプションでマウントさせるか、 という情報を書いたのが /etc/amd.map で、マップファイルといいます。 ここでは次の表の、左側のメディアを右側の操作でマウントできる 環境に対する /etc/amd.map を書きます。fd(ufs) : # mount /dev/fd0c /a/fd fd(msdos): # mount -t msdos /dev/fd0c /a/fdos cdrom : # mount -t cd9660 /dev/acd0c /a/cdrom mo(ufs) : # mount /dev/od0a /a/mo/dev 以下のデバイス名は、環境に合わせて読み変えて下さい。
/etc/amd.map
/defaults type:=host;fs:=/a/${key} * opts:=rw,grpid,resvport,nosuid,nodev # fd type:=program;\ mount:="/sbin/mount mount /dev/fd0c ${fs}";\ unmount:="/sbin/umount umount ${fs}" fdos type:=program;\ mount:="/sbin/mount -t msdos /dev/fd0c ${fs}";\ unmount:="/sbin/umount umount ${fs}" cdrom type:=program;\ mount:="/sbin/mount mount -t cd9660 /dev/acd0c ${fs}";\ unmount:="/sbin/umount umount ${fs}" mo type:=program;\ mount:="/sbin/mount mount /dev/od0a ${fs}"\ unmount:="/sbin/umount umount ${fs}"注意点としては、
です。
- unmount の n を抜かないこと
- 各々最後だけ、;がいらないこと
マウントものの情報を野ざらしにしておくのも気持悪いので、 パーミッションを切っておきます。
# chmod 600 /etc/amd.map
ちょっと説明
まず、1行目はデフォルトの設定で、fs という変数に /a/${key} を 代入しています。${key} というのは、fd や cdrom といった、 一番左端のエントリーのことです。
2行目は、オプションについての設定です。
3〜5行目は ufs フォーマットのフロッピーの設定で、
# mount /sbin/mount /dev/fd0c /a/fd # mount /sbin/umount /a/fdと読み変えることができます。 ここで、${fs}=/a/${key}=/a/fd です。 以下、同様です。
amd は /mnt 以下を見張っていて、アクセスがあると 自動的に /etc/amd.map (じつは名前は変えられるが)を見て マウントをします。 したがって、マウントポイントとなるディレクトリを 前もって用意しておく必要があります。 先の例だと、次のようにします。
最後の操作は、一般ユーザでも書き込みができるようにするためです。
# mkdir -p /a
# mdkir -p /a/fd /a/fdos /a/cdrom /a/mo
# chmod 777 /a/fd /a/fdos /a/mo
/mnt がなければ作っておきます。 /mnt/fd , /mnt/fdos , /mnt/cdrom , /mnt/mo などは 作っておく必要はありません。
amd は portmap が動いてなければならないようですので、 まず portmap が動いているか確認して、動いてなければ起動します。
# rpcinfo -p
(出力の一番右側に portmapper があればOK。なければ次の行へ)
# /usr/sbin/portmap
amd を起ち上げます。amd にはいっぱいオプションがついているのですが、 man amd をよくお読み下さい。
-a は実際にファイルシステムをマウントするポイントを指定します。 /a はデフォルトです。
# amd -a /a -l syslog -c 300 /mnt /etc/amd.map
-l syslog は、ログファイルの指定で、
-c 300 はアクセスがなくなって300秒経ったらオートマウントした ディレクトリをオートアンマウントする、
/mnt は見張りディレクトリの指定、
/etc/amd.map はマップファイルの指定です。
(つまり、実は /mnt も /etc/amd.map も自由に名前を変えられる)さて、amd が起ち上がると ls /mnt/fd などで /mnt/fd にアクセスすると、 ufs フォーマットのフロッピーが /a/fd に 自動的にマウントされます。
% ls /mnt/fd % mount .................. pid11633@host:/mnt on /mnt (nfs) /dev/fd0c on /a/fd (ufs, local, writes: sync 2 async 0)設定した時間よりも早く /mnt/fd をアンマウントしたい場合は、 amq を使います。
# amq -u /mnt/fd
/etc/rc.conf に amd の設定を追加することより、 ブート時に自動的に amd を起ち上げることができます。
/etc/rc.conf
### Auto Mount daemon: ###
portmap_enable="YES" (NFSなど他で portmap を動かしていなければ)
amd_enable="YES"
amd_flags="-l syslog -c 300 /mnt /etc/amd.map"
NFS でのマウントにも amd することができます。 例として、server:/home を client:/a/home に自動 NFS マウント する場合の amd.map の書き方を示します。host!=server は、今いるローカルホストが server でなければ、 という意味です。
client:/etc/amd.map
/defaults type:=host;fs:=/a/${key}; * opts:=rw,grpid,resvport,nosuid,nodev home host!=server;type:=nfs;rhost:=server;rfs:=/${key}\書き直したら、amd に HUP シグナルを送って再起動します。
# killall -HUP amd
また、/a/home ディレクトリを作っておきます。
# mkdir -p /a/home
これで、client:/mnt/home にアクセス (ls /mnt/home など)すると server:/home の内容が参照できます。
/a から /.automount へ
一般ユーザから見ると、/a よりは /.automount (ドット . からはじまればなんでもよい) の方がその存在を気にしなくてもすみます。 そこで、マウントポイントを /a から /.automount に変えます。 変えるのは、
- /etc/rc.conf の amd_flags="-a /.automount -l syslog -c 300 /mnt /etc/amd.map"
- /etc/amd.map の fs:=/a/${key} を fs:=/.automount/${key}へ
- ディレクトリ /a を /.automount へ
/mnt/fd から /fd へ
/mnt/fd をいちいち参照するのが面倒な場合は、 /mnt/fd から /fd にリンクを張っておくと、 /fd にアクセスしたら自動マウントしてくれます。
# ln -s /mnt/fd /fd