amdの設定


amd

amd(auto mount daemon)とは、ファイルシステムがアクセスされたときに、 自動的に mount/umount の操作を行ってくれるデーモンです。 UNIX系のOSでは、ファイルシステムを利用するためには、マウントの操作が必要です。 FreeBSD 等のように /etc/fstab ファイルに記述されたファイルシステムであれば 起動時にマウントされるため、ハードディスクなどでは意識する必要はありませんが、 リムーバブルドライブの場合は、メディアの抜き差しのたびに操作が必要になるので、 わずらわしく感じます。
amd はマップファイルの設定に従って、ユーザのアクセスに応じて自動的に マウント作業を行います。root権限は必要無いため、ユーザはマウントをあまり 意識しなくてもよくなります。

マップファイルの作成

ここでは、FreeBSD で amd の設定をする手順について説明します。
amd の設定をする前に、カーネルに NFS が組み込まれていることを確認します。 カーネルコンフィグレーションファイルで
options         NFS                     #Network Filesystem
の行があることを確認します。
ここで、例えば以下のようにマウント出来ているとします。
FD(UFS形式)   mount -t ufs /dev/fd0c /fd
CD-ROM(IDE)   mount -t cd9660 /dev/wcd0c /cdrom
MO(UFS形式)   mount -t ufs /dev/od0a /mo
HD(FAT形式)   mount -t msdos /dev/wd1s1 /dos
HD(NFS)       mount -t nfs server:/home /home
ここで、例えば 3.5インチのフロッピーディスクに UFS(Unix File System)を 作成する方法ですが、以下のようにします。
% su
Password:
# fdformat /dev/rfd0                     フォーマット
# disklabel -r -w /dev/fd0 fd1440        ディスクラベルを作成
# newfs /dev/rfd0c                       ファイルシステムを作成
MOなども同様にして UFS を作成できます。

この場合、amd のマップファイル(/etc/amd.map)は以下のように記述します。
/defaults    fs:=/a/${key}
fd           type:=program;\
             mount:="/sbin/mount mount /dev/fd0 /fd";\
             umount:="/sbin/umount umount /dev/fd0";

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

mo           type:=program;\
             mount:="/sbin/mount mount /dev/od0a ${fs}";\
             umount:="/sbin/umount umount /dev/od0a";

dos          type:=program;\
             mount:="/sbin/mount mount -t msdos /dev/wd1s1 ${fs}";\
             umount:="/sbin/umount umount /dev/wd1s1";

home	     type:=program;\
             mount:="/sbin/mount mount -t nfs server:/home ${fs}";\
             umount:="/sbin/umount umount ${fs}";
マップファイルの記述の仕方は柔軟性に富んでおり、いろいろな記述方法があります。 マップファイルの詳しい記述方法は、例えば http://www.on.rim.or.jp/~ryo2/amd.html
を御覧ください。

amdの設定

amd のマップファイルを作成したら、次に、マウントするディレクトリを作成します。
# mkdir -p /a/{fd,cdrom,mo,dos}
amd を以下のように手動で起動します。
# amd -l syslog -c 1800 /mnt /etc/amd.map
amd のオプションについては、詳しくはオンラインマニュアルを御覧ください。 (jman amd)
ここで例えば /mnt/cdrom が参照(cd /mnt/cdrom)されたら、amd は
# mount -t cd9660 /dev/wcd0c /a//cdrom
を自動的に実行し、/a/cdrom へのシンボリックリンクを /mnt/cdrom に 作成します。
amd は、一定時間が経過すると自動的にアンマウントをします。 この場合は -c 3600 により 3600秒に設定されます。
また、いちいち /mnt/cdrom にアクセスするのが面倒な場合には、
# ln -s /mnt/cdrom /cdrom
としておけば、/cdrom にアクセスすると、/mnt/cdrom にアクセスしてくれます。
また、amd は一定時間が経過すると自動的にアンマウントしてくれますが、強制的に アンマウントしたい場合には、
% amq -u /mnt/cdrom
を実行します。root権限は必要無く、一般ユーザで実行できます。
この後、メディアを排出したい場合、CDROMでは、
% cdcontrol eject
で eject できます。MO の場合は、 FreeBSD2.x などでは、
http://www-ishii.ics.nitech.ac.jp/~bobson/FreeBSD/MO-REPORT.html
にある Eject-1.2 for FreeBSD-2.x を使うと便利です。

また、メディアが挿入されていない状態で /mnt/cdrom などにアクセスすると、 amd は automount に失敗したことを認識してくれませんので、その場合は、再度、
% amq -u /mnt/cdrom
を実行し、メディアが挿入されていることを確認して、/mnt/cdrom にアクセス してください。

amd が正常に動作しているようなら、システムの起動時に自動的に amd を起動する ように /etc/rc.conf ファイルを編集します。以下のような記述を有効にします。
amd_enable="YES"
amd_flags="-l syslog -c 1800 /mnt /etc/amd.map"
以上でシステムを再起動すれば、自動的に amd が起動されます。

この場合は -l syslog オプションで amd を起動しているので、 amd のログは syslog(system log daemon)を使用してログが記録されます。 /etc/newsyslog.conf ファイルには
/var/log/amd.log                        664  7     100  *     Z
と記述されているので、syslog のための設定は不要ですが、
# touch /var/log/amd.log
のようにログファイルを作成しておきます。

また、amd のマップファイルを変更したため、 amd を再起動させたいときは、
# kill -HUP `cat /var/run/amd.pid`
を実行します。amd を停止させたいときは、同様に、
# kill `cat /var/run/amd.pid`
とします。

autofs

オートマウンタには、amd と autofs の2種類があります。 amd はユーザ空間に実装され、カーネルの一部ではありません。amd は NFSシステム経由で、全てのオートマウントされるファイルシステムのトラフィックを ルーティングします。
autofs は、カーネルにアシストされる新しいシステムです。これは、 オートマウントポイントが、他の通常のファイルシステムのどこにあるかを 知っており、オートマウントプログラムは、そのマウントポイントを使用します。

Linux では、autofs がパッケージとして用意されているので、以下のようにして パッケージより autofs をインストールします。ちなみに、インストールする システムは Vine Linux 1.1 です。
# rpm -Uvvh autofs-3.1.1-8.1.i386.rpm
autofs の設定は、/etc/auto.master と /etc/auto.misc の 2つのファイルで 行います。
/etc/auto.master の中身は、デフォルトでは、以下のようになっています。
/misc   /etc/auto.misc  --timeout 60
最初のエントリ(/misc)は、二番目のエントリ(/etc/auto.misc)のファイルに 記述してある、いくつかのマウントポイントが設定されるディレクトリです。 三番目のオプション(--timeout 60)は、マウントされたファイルシステムが、 使用されないまま60秒経過すると、自動的にアンマウントすることを 示しています。
/etc/auto.misc はマップファイルです。このファイルの中身は、デフォルトでは 以下のようになっています。
kernel          -ro,soft,intr           ftp.kernel.org:/pub/linux
cd              -fstype=iso9660,ro      :/dev/cdrom
#floppy         -fstype=auto            :/dev/fd0
#floppy         -fstype=ext2            :/dev/fd0
#e2floppy       -fstype=ext2            :/dev/fd0
#jaz            -fstype=ext2            :/dev/sdc1
最初のエントリは、マウントポイントです。例えば、cd の場合は、マウントポイントは /misc/cd になります。二番目のエントリは、マウントのオプションを指定します。 最後のエントリは、ファイルシステムの場所を示しています。上記の kernel エントリは NFSマウントとなっています。その他の行は、ローカルデバイスを 示しています。
以上で autofs の設定は終了です。autofs の起動スクリプトは、 /etc/rc.d/init.d/autofs にありますので、手動で起動するには、 以下のようにします。
# /etc/rc.d/init.d/autofs start
Starting automounter:
例えば、/mics/cd にアクセスしたら、CDROMドライブをオートマウントできることを 確認します。いちいち、/misc/cd に移動するのが面倒な場合には、以下のように シンボリックリンクを張っておけば、/cdrom に移動すればマウントされます。
# ln -s /misc/cd /cdrom
以上で autofs の設定は完了です。システムの起動時に、自動的に autofs が 起動するように設定します。Vine Linux 1.1 では、ntsysv という管理ツールを 使うと便利です。
# ntsysv
使わない場合は、例えばランレベルが5(xdmを使用)の場合には、以下のように シンボリックリンクを張ります。
# ln -s /etc/rc.d/init.d/autofs /etc/rc.d/rc5.d/S72autofs

戻る

sakai@oak.eg.t.kanazawa-u.ac.jp
Last modified: Sun Dec 19 02:12:01 JST 1999