Automount mini-Howto

don@sabotage.org

v0.4, 17 April 1999

早川 仁 cz8cb01@linux.or.jp

v0.4j, 1999年10月 2日
このファイルは autofs オートマウンタとその設定方法、 そしていくつかの避けるべき問題点について説明します。

1. イントロダクション

2. インストール

3. 設定

4. アンマウントまでの長い待ち時間

5. Questions


1. イントロダクション

1.1 オートマウント - どうしてこれが必要になるの?

オートマウンティングとはデーモンによって自動的に実行される、ファイルシステムのマウンティング(及びアンマウンティング)のプロセスの事です。もしアンマウントされているファイルシステムにユーザーがアクセスをしようとした場合、自動的に再マウントされます。この動作は大規模なネットワーク化された環境や複数のマシン間(特に常時オンラインではないマシン間)での相互マウントしたファイルシステムの場合に非常に便利です。これはまたリムーバブルな機器の場合や、マウントしたDOS ファイルシステムとの文字コードや改行コードなどの変換といった使用方法の場合に非常に便利かもしれません。

1.2 オートマウントの種類

linux のオートマウンタには AMDautofs の2種類があります。AMD はオートマウントデーモンで、おそらく SunOS の AMD と同じ様に動作します。このデーモンはユーザー空間に実装されます。この事は、カーネルの一部では無いという事を意味します。AMD デーモン(このデーモンは NFS システム経由で、全てのオートマウントされるファイルシステムのトラフィックをルーティングします)を使用して NFS でローカルホストのマウントを行えば、カーネルのオートマウンティングに対する設定は必要ありません。Autofs はカーネルにアシストされる新しいシステムです。この意味は、カーネルのファイルシステムのコードはオートマウントポイントが他の通常のファイルシステムのどこにあるかを知っているという事で、オートマウントプログラムはそのマウントポイントを使用します。この mini-howto では、autofs のみを説明します。


2. インストール

autofs はカーネル空間に実装されていますので、カーネルはそれをサポートするようにコンパイルされている必要があります。カーネル2.0.xxでは、実験的オプションでしたが、非常に安定しているようでしたので、2.1.xx(おそらく 2.2.xxでも)では普通のオプションとなりました。

また、オートマウントプログラムとその設定ファイルも必要となります。rpms(RedHat のパッケージ形式です)を使用するのは非常に良い方法です。オートマウントプログラムは /etc/rc.d/init.d ディレクトリの rc スクリプトによって起動されるはずです。rpm はそのスクリプトをインストールしますが、起動されたかどうかは Redhat のコントロールパネルを使用してあなたのrc?.d ディレクトリからリンクするか、又は(他のディストリビューションの場合)他の好きな方法でそれを起動させて、確認する必要があります。rpm を使用していないディストリビューションの場合はそのシステムに適切な方法で行ってください。ただし、rcスクリプトが行う事をあまり真剣に読まないで下さい。この howto を読んでいる方達は知りたくもないでしょうが。


3. 設定

RPM をインストールする事によって簡単に設定を行う事が可能ですが、以前に設定を行ったことがない場合は、あまり自信が無い所かもしれません。

/etc の下には auto.masterauto.misc という2つのファイルがあります。私の auto.master はこのようになっています。

/auto   /etc/auto.misc  --timeout 60

最初のエントリーはマウントポイントではなく(二番目のエントリーのファイル内にある)、いくつかのマウントポイントが設定される場所です。三番目のオプションはマウントされたファイルシステムが、使用された後 60 秒経つと自分自身をアンマウントしようとすることを示しています。もちろんその時に使用中であればアンマウントされません。

Auto.misc とは"マップファイル"の事です。マップファイルはどのような名前でもかまいません。この例ではもともと /misc を操作するものだったので auto.misc にします。複数のマップファイルを auto.master の中に定義することもできます。私の auto.misc はこのようになっています:

kernel          -ro,soft,intr           ftp.kernel.org:/pub/linux
cd              -fstype=iso9660,ro      :/dev/cdrom
zip             -fstype=auto            :/dev/hdd4
floppy          -fstype=vfat            :/dev/fd0

最初のカラム(これはキーです)はマウントポイントです。上記の場合 /auto/floppy などです。二番目はオプションの指定です。詳細は mount の manpage を参照して下さい。最後のカラムはファイルシステムの場所を示しています。上記の "kernel" エントリーは NFS マウントとなっています。その他の行の':'はローカル上のデバイスを意味します。


4. アンマウントまでの長い待ち時間

タイムアウトまでの 60 秒間、じっと待っているの人もいるかもしれませんが、フロッピーが出てくるのを待っているのには長すぎる時間ですね。たぶん私は単に sync してマウントされているフロッピーを取り出しちゃいますが、そのことに誰も気がつかないでしょう。正しい代替方法を提案させて下さい。まず、タイムアウト時間は変更する事ができます。ですが、システムに 15 秒やそこらの時間でアンマウントするように指定したからといって、役に立つとも思われません。実はオートマウントプログラムにアンマウントするように指定する方法があります。kill コマンドで SIGUSR1 シグナルが送られると、オートマウントプロセスはアンマウント可能なもの全てをアンマウントします。でもウィンドウマネージャ上にアンマウントボタンを作りはじめるのはちょっと待ってください。多少の問題があります。

オートマウントのプロセスは root によって実行されますので、root からの signal しか受け取りません。ですが、あなたがオートマウンティングをしている理由の半分は、root にならずにアンマウントされているファイルシステムをマウントできるからだと思われます。強引にアンマウントさせるために suid-root した C プログラムを作るのも簡単なことでしょうけれど、sudo をうまく使えば適切な kill シグナルをユーザーが送ってアンマウントさせることもできるようになります。この方法のただ一つの問題は、sudo はサブコマンドを実行する為に ` を使用することを許可しないことです。ですから ` で現在の PID を見つけることはできません。あなたはたぶん killall というこの動作を実行してくれるプログラムを持っているはずです (「これを使うと良い」と教えてくれた提案に感謝します)。

ALL     ALL=NOPASSWD:/usr/bin/killall -USR1 automount

(訳注:この行を /etc/sudoers に書いておくと、誰でも automount にパスワード無しで SIGUSR1 を送れる、ということです。詳しくは man sudo を参照してください。ちなみに killall コマンドは Plamo Linux 1.3(Slackware) ではコマンドの置き場所が /bin/killall ですが、RedHatとDebian 2.0 (hamm) では /usr/bin/killall のようです)

さもなければユーザー全員に、全てのプロセスに対して -SIGUSR1 を送る許可を与える必要があるでしょう。それはプログラムに色々な影響を与えます。いくつかのウインドウマネージャが再起動や、xemacs が kill されてしまうことなどです。killall にバッファオーバーランが存在しない事を祈ります。

(訳注: sudo では foo `bar` (bar コマンドの出力を foo コマンドの引数にする)ができないので automount の PID を狙い撃ちできません。ですから sudo+kill では "すべてのプロセスに SIGUSR1 を送れる権限" を各ユーザに与えなければなりませんが、そうすると間違えて SIGUSR1 を WM に送ってしまった場合に recycle してしまうし、xemacs だと死んでしまうということでしょう。また killall にバッファオーバーランがあると sudo 経由で root 権限を与えられた killall コマンドがセキュリティホールになる危険性が生じてくるので、そういうことが無いように祈ると書かれているのでしょう)


5. Questions

5.1 /auto/floppy のようなマウントポイントが見つかりません

オートマウントが正常にセットアップされれば、あなたが必要としているマウントポイントがどのような物であっても、使おうとすれば見つける事ができます。使用していないときはみえませんけれども。もしもグラフィカルツールでディレクトリを見ている(browsing)場合、手動でディレクトリ名を入力する必要があるかもしれません。使用可能なのに見えないマウントポイントを選択できないというのは autofs の大きな欠点かもしれません。もしそれが本当に問題なら設定ファイルを編集してください(設定ファイルは .c で終わります)。

この問題に対処するために何人かの方が行っている方法は、オートマウントがマウントする場所に対してシンボリックリンクを作成することです。これによりディレクトリが存在しないというエラーは無くすことができるでしょう(マウントが行われたらマウントされた場所を指すようになります)。無頓着なファイラーの場合リンクを参照すると、オートマウントを引き起こすことになります。

5.2 マウントの状態を見るには?

df コマンドを使用してください。オプション無しの mount コマンドでも構いません。mount 場合はさらにマウントされているオプションも表示します。

5.3 win95(vfat)フロッピーを入れましたが、単なる FAT のフロッピーとして自動認識されました

これはオートマウントの問題ではありません。この Howto を書いている時点でのファイルシステムの自動認識は、msdos のファイルシステムを正常にマウントできるまでは vfat でのマウントをしようとしません。VFAT とは(MSDOS で使用している)FAT に Win95 と WinNT で使用するロングファイル名を強引につめこんだ物の事です。

(訳注: VFAT とは、従来の FAT16 の FAT の使用されていない部分にロングファイル名(最長 255 文字まで)を格納し、そのファイル名の頭から 6 文字+~+通番を、8 + 拡張子 3 文字の従来使用していたファイル名として使用することによって、DOS との上位互換性を保持しながら無理矢理にファイル長 8.3 文字の制約を排したものです。これによって、VFAT 対応の OS からはロングファイル名部分(及び従来のファイル名)を、VFAT 未対応の OS (DOS など)からは 8.3 文字のファイル名を見せるようにしています。例えば "1234567890" というファイル名は、"123456~1" などというファイル名になります)

mount の著者の一人によると、mount はファイルシステムのタイプを指定する必要があるシステムコールの単なるラッパーなので、ファイルシステムのタイプの指定をユーザーが行う必要があります。現行の自分自身でファイルシステムを探す(heuristic)仕様の代わりに mount 自身にファイルシステムのリストを取得させることを現在考慮中です。単純に、msdos fs をカーネルに組み込まない人もいます。これにより vfat の前に msdos かどうかをテストされることを避けられます。多くの人の環境でこれはうまく動くでしょうが、本当に msdos fs が必要な場合にモジュールの組み込みが簡単にできないような時には非常にフラストレーションが溜まります。

mount プログラムの著者(達)を探しだしてコメントを送ると歓迎されるでしょう。結論としては msdos をコンパイル時に組み込まない場合を除いて、現在のところは他のファイルシステムの自動認識をあきらめない限り、vfat をマウントすることはできないということです。この問題が早く解決すればよいのですが。。。それまでの間はファイルシステムのタイプごとに別々のマウントポイントを作って指定するようにしましょう。

5.4 私の /grumblesmurf というファイルシステムがマウントされましたが kill -SIGUSR1 を送ってもアンマウントされません

それは現在使用されているからです。root であったとしても、おそらく手動でアンマウントすることはできないでしょう。マウントしたのがあなた(つまり、他のユーザーに使われているはずが無い)であるなら、そのディレクトリにあるシェルを探してみてください。もしも見あたらなければ、他の何か(すでに終了されたファイラーのような)が、いわゆる痕跡を残していないかどうかを調べてみてください。うまく探せなかったら、fuser プログラムを使ってみてください。

5.5 / ディレクトリをオートマウントするようにしたらどうなります?

え〜と。。。私だけの実験だけじゃぁ何が起きるか予想できませんねぇ。注意してくださいよ。たとえば /grumblesmurf なんてのが必要ならシンボリックリンクを作成することを勧めます。まだ安全ですから。

5.6 同じディレクトリに2つのマップファイルを置いておけますか?

私の知る限り無理です。個々のエントリーを記述するオプションを利用して1つのマップファイルを使うようにしてください。

5.7 私は SuSE 6.0 を使っています。--timeout の代わりに ---timeout を使う必要があるんですが

え〜と、はい。メモを取りましたよ。"timeout が動作していない" 問題のもう一つの解決方法は、-t time オプションを autofs スクリプトに追加することです。

5.8 ファイルシステム(つまり FAT ですが)にパーミッションと所有権をセットする方法は

mount の man page を参照してください。uid=値 や umask=値 オプションが見つかるはずです。FAT ファイルシステム上で動作しないだろうと思われるオプションは mode=値 です。すいません、詳しくはご自分でチェックしてください。

5.9 autofs に感謝するには?

私にではありません。私は autofs に関しては何もしていません。私はただ、みんなに autofs の素晴らしい仕事と、なんて簡単に使えるかということに注目してもらいたかっただけです。強欲な AMD (例えば unice や有史以前のフリーなツールを非常に高値で販売しています)に比べ、autofs はドキュメントも豊富です。実装者には心から感謝しています。 すべての著作権は Transmeta 社が保持しておりますので、すいませんがクレジットリストを書き出すことはできませんが、Peter Anvin がかなり多くの部分を持ってると確信しています。また Peter は、1999 年 3 月 3 日の linuxworldexpo で autofs に関するセッションを行いました。

(訳注: unice とは、UNIX の複数形です。ただし、同じ種類の UNIX が複数あったとしても unice ではありません。AIX, Linux, BSD など複数の種類の UNIX を指して unice と言います)

5.10 オートマウンティングについてもっと知りたいのですが?

autofs のチュートリアルが http://www.linuxhq.com/lg/issue24/nielsen.html にあります。 http://www.cs.columbia.edu/~ezk/am-utils にある am-utils も参考になるでしょう。

(この URL を教えてくれてありがとう)


sgml21html conversion date: Mon Jan 17 11:34:53 JST 2011