amd (Auto Mount Daemon)

フロッピーディスクや 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


カーネルの NFS サポート

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 で、マップファイルといいます。 ここでは次の表の、左側のメディアを右側の操作でマウントできる 環境に対する /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}"

注意点としては、

です。

マウントものの情報を野ざらしにしておくのも気持悪いので、 パーミッションを切っておきます。
# 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 の起ち上げ

amd は portmap が動いてなければならないようですので、 まず portmap が動いているか確認して、動いてなければ起動します。
# rpcinfo -p
(出力の一番右側に portmapper があればOK。なければ次の行へ)
# /usr/sbin/portmap

amd を起ち上げます。amd にはいっぱいオプションがついているのですが、 man amd をよくお読み下さい。

# amd -a /a -l syslog -c 300 /mnt /etc/amd.map
-a は実際にファイルシステムをマウントするポイントを指定します。 /a はデフォルトです。
-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

amd の自動起ち上げ

/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 の自動マウント

NFS でのマウントにも amd することができます。 例として、server:/home を client:/a/home に自動 NFS マウント する場合の amd.map の書き方を示します。
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}\
  
host!=server は、今いるローカルホストが server でなければ、 という意味です。

書き直したら、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 に変えます。 変えるのは、

/mnt/fd から /fd へ

/mnt/fd をいちいち参照するのが面倒な場合は、 /mnt/fd から /fd にリンクを張っておくと、 /fd にアクセスしたら自動マウントしてくれます。
# ln -s /mnt/fd /fd

FreeBSD の部屋


Apr. 1, 2000