Automount mini-Howto don@sabotage.org v0.4, 17 April 1999 早川 仁 cz8cb01@linux.or.jp v0.4j, 1999年10月 2日 このファイルは autofs オートマウンタとその設定方法、そしていくつかの避 けるべき問題点について説明します。 ______________________________________________________________________ 目次 1. イントロダクション 1.1 オートマウント - どうしてこれが必要になるの? 1.2 オートマウントの種類 2. インストール 3. 設定 4. アンマウントまでの長い待ち時間 5. Questions 5.1 /auto/floppy のようなマウントポイントが見つかりません 5.2 マウントの状態を見るには? 5.3 win95(vfat)フロッピーを入れましたが、単なる FAT のフロッピーとして自動認識されました 5.4 私の /grumblesmurf というファイルシステムがマウントされましたが kill -SIGUSR1 を送ってもアンマウントされません 5.5 / ディレクトリをオートマウントするようにしたらどうなります? 5.6 同じディレクトリに2つのマップファイルを置いておけますか? 5.7 私は SuSE 6.0 を使っています。--timeout の代わりに ---timeout を使う必要があるんですが 5.8 ファイルシステム(つまり FAT ですが)にパーミッションと所有権をセットする方法は 5.9 autofs に感謝するには? 5.10 オートマウンティングについてもっと知りたいのですが? ______________________________________________________________________ 1. イントロダクション 1.1. オートマウント - どうしてこれが必要になるの? オートマウンティングとはデーモンによって自動的に実行される、ファイルシ ステムのマウンティング(及びアンマウンティング)のプロセスの事です。も しアンマウントされているファイルシステムにユーザーがアクセスをしようと した場合、自動的に再マウントされます。この動作は大規模なネットワーク化 された環境や複数のマシン間(特に常時オンラインではないマシン間)での相 互マウントしたファイルシステムの場合に非常に便利です。これはまたリムー バブルな機器の場合や、マウントしたDOS ファイルシステムとの文字コードや 改行コードなどの変換といった使用方法の場合に非常に便利かもしれません。 1.2. オートマウントの種類 linux のオートマウンタには AMD と autofs の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.master と auto.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 のチュートリアルが にあります。 にある am-utils も参考にな るでしょう。 (この URL を教えてくれてありがとう)