amd の利用
Last Modified: Tue Dec 27 00:06:02 JST 2011

amd の概要

Unix では、MS-DOS や Windows のようにドライブという概念はなく、ディスクへのアクセスには必ずマウントを行う必要がある。 マウントは root だけが実行できるが、ネットワークドライブへのアクセスや、フロッピーや CD-ROM のような取り外し自在のデバイスへのアクセスの場合、中身をちょっと読みたいだけでも root で実行しなければならないという不便がある。

amd は Auto Mount Daemon の略で、特定のファイルシステムをアクセスのたびに自動的にマウントする機能を提供する。 amd へのリクエストは root 以外の一般ユーザでも可能なうえ、登録した名前のディレクトリへのアクセスを自動的に検出してマウントを実行してくれるため、リムーバブル・デバイスであろうがなかろうが、意識しなくても使うことができる。

amd は、指定するマウント・ポイント上に関連づけられた NFS サーバとして動作する。 マウント・ポイントへのアクセスを検知すると、amd はマップファイルに定義されたデバイスをテンポラリ・ディレクトリへマウントし、それをマウント・ポイントへリンクすることでアクセスを実現する。 amd はディスクアクセスを監視し続け、制限時間内にアクセスがないことを検出すると、自動的にマウントを解消する。 もちろん、再度アクセスを行えば最初から自動的にマウントが行われる。 このような切り放しと再接続は十分高速に行われるので、一般ユーザが気づくようなことはない。

起動方法

amd の起動の指定は、例によって rc.conf(.local) で行う。 amd_enable を YES に、amd_flags を適切なオプションに設定する。 オプションはデフォルトのままでもよいが、ここでは以下の設定をお勧めする。


amd_enable="YES" amd_flags="-a /tmp_mnt -c 1800 -k i386 -d my.domain -l syslog /mnt /amd.map"

各パラメータの意味は次の通り。

他にもいくつか有益なオプションがあるが、詳しくは manpage を見てほしい。

マップファイルの設定

マップファイルでは、デフォルトのマウント動作の指定に加えて、特定の名前でのアクセスを個別に処理するよう指定できる。 一般的には、amd はリモートディスクを NFS マウントするのに使われるため、デフォルト指定はそのように設定し、CD-ROM ドライブのようなリムーバブル・デバイスのための設定はラベルを決めて設定する。

まず最初に、NFS マウントをデフォルトとしたマップファイルの内容を示そう。


/defaults type:=host;fs:=${autodir}/host/${rhost};rhost:=${key}; * opts:=rw,grpid,nosuid,nodev

設定中、autodir は -a オプションで指定したテンポラリ・ディレクトリ、つまり /tmp_mnt に展開される。 key はマウント・ポイント下でユーザが指定する名前に、rhost は key と同じ値になる。 amd は /mnt/${key} へのアクセスを検出すると、key と同じ名前を持つホストを検索し、公開されているディレクトリを /tmp_mnt/host/${key} という名前でマウントする。 さらに amd は /tmp_mnt/host/${key} と /mnt/${key} を結び付け、最終的にアクセス可能にしてくれる。

[amd.gif]
図: amd の動作

続いて CD-ROM を自動マウントするための設定を示す。 上記の /defaults に続けて、以下の設定を追加する。


cdrom type:=program;fs:=${autodir}/${key};\ mount:="/sbin/mount mount -t cd9660 /dev/cd0c ${fs}";\ unmount:="/sbin/umount umount /dev/cd0c";

amd は /mnt/cdrom へのアクセスを検出すると、このマップ設定に従いマウントならびにアンマウントを実行する。 CD-ROM ドライブは、いったん /tmp_mnt/cdrom へマウントされ、それが /mnt/cdrom へ関連づけられる。 キーワードとなる cdrom には、/defaults のときのように `/' を付けてはならない。

マウント状態のコントロール

amd は自動的にマウント・アンマウント処理を行ってくれるが、amq というコマンドで明示的にコントロールすることもできる。 amq は root 権限なしで実行できるから、明示的なアンマウントも簡単にできる。

amq をオプションなしで実行すると、現在の自動マウント状況を表示する。


% amq / root "root" myhost:(pidXXX) /mnt toplvl /etc/amd.map /mnt /mnt/remote host remote:/mnt/remote /tmp_mnt/host/remote /mnt/cdrom program mount -t cd9660 /dev/cd0c /tmp_mnt/cdrom /tmp_mnt/cdrom

各欄は、最初からマウント・ポイント、タイプ、設定内容、実マウント位置を示している。

amq の -u オプションを使えば、オートマウントされたデバイスをアンマウントできる。 たとえば CD-ROM をイジェクトしたいなら、コマンドラインで次のように指定する。


% amq -u /mnt/cdrom

ちなみに、amq の -u オプションは、マウント・ポイントを強制的にタイムアウトに設定するだけで、実際のアンマウントは amd が実行してくれるまで待つ必要がある。 とはいえ、タイムアウトすればすぐにアンマウントされるので、困ることはほとんどない。

シンボリック・リンクの活用

amd はマウント・ポイント /mnt へのアクセスを監視しているので、amd を利用するにはとにかく /mnt へアクセスする必要がある。 だがここでシンボリック・リンクを用いれば、/mnt 以外のディレクトリであっても amd を使ってオート・マウントすることができる。

たとえばネットワークドライブへのアクセスを、ホスト名ごとに /host/hostname というスタイルで指定したいときは、マップファイルで指定するのではなく、シンボリック・リンクを張る方法もある。


# ln -s /mnt/host/hostname /host/hostname # ln -s /mnt/cdrom /cdrom

上記のように /cdrom をシンボリック・リンクにすると、CD-ROM を要求する ports で mount 時にエラーになることもあるので注意すること。

その他のデバイス

CD-ROM 用のマップファイルを応用すれば、フロッピーディスクや MO などでも自動マウントを実現できる。 さらに NFS 以外のネットワークドライブ、たとえば rumba (sharity-light) でも自動マウントができるはずだ。


[back to index]