don@sabotage.org
uv9h-hykw@asahi-net.or.jp
オートマウンティングとはデーモンによって自動的に実行される、 ファイルシステムのマウンティング(及びアンマウンティング)のプロセスの事です。 もしアンマウントされているファイルシステムにユーザーがアクセスをしようと した場合、自動的に(再)マウントされます。この動作は大規模な ネットワーク化された環境及び複数のマシン間(特に常時オンラインではない マシン間)でのクロスマウンティングしたファイルシステムの場合に 非常に便利です。これはまたリムーバブルな機器の場合や、マウントした DOS ファイルシステムとの文字コードや改行コードなどの変換といった使用方法の 場合に非常に便利かもしれません。
linux のオートマウンターには AMD と autofs の2種類があります。AMD は オートマウントデーモンで、おそらく SunOS の AMD と同じ様に動作します。 このデーモンはユーザー空間に実装されます。この事は、カーネルの一部では 無いという事を意味します。AMD デーモン(このデーモンは NFS システム 経由で、全てのオートマウントされるファイルシステムのトラフィックを ルーティングします)を使用して NFS でローカルホストのマウントを行えば、 カーネルのオートマウンティングに対する設定は必要有りません。Autofs は カーネルにアシストされる新しいシステムです。この意味は、カーネルの ファイルシステムのコードは、オートマウントポイントが他の通常の ファイルシステムのどこにあるかを知っているという事で、 オートマウントプログラムはそのマウントポイントを使用します。 この mini-howto では、autofs のみを説明します。
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 を読んでいる方達は知りたくもないでしょうが。
RPM をインストールする事によって簡単に設定を行う事が可能ですが、 以前に設定を行ったことがない場合は、あまり自信が無い所かもしれません。
/etc の下には auto.master
と auto.misc
という2つのファイルがあります。私の auto.master はこのようになっています。
/auto /etc/auto.misc --timeout 60
最初のエントリーはマウントポイントではなく、(二番目のエントリーのファ イル内にある)いくつかのマウントポイントが設定される場所です。三番目の オプションはマウントされたファイルシステムが、使用された後60秒経つと、 自分自身をアンマウントしようとすることを示しています。もちろんその時に 使用中であれば、アンマウントされません。
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 マウントとなっています。 その他の行の':'はローカル上のデバイスを意味します。
何人かの方はタイムアウトまでの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 コマンドがセキュリティホールになる危険性が生じてくるので、 そういうことが無いように祈ると書かれているのでしょう)
オートマウントが正常にセットアップされれば、あなたが必要としている マウントポイントがどのような物であっても、使用しようとすれば見つける事が できます。使用していないときはみえませんけれども。もしもグラフィカル ツールでディレクトリを見ている(browsing)場合、手動でディレクトリ名を 入力する必要があるかもしれません。使用可能だけれど見えない マウントポイントを選択できないというのは autofs の大きな欠点かも しれません。もしそれが 本当にあなたを悩ます場合、設定ファイルを 編集してください。(ヒント: 設定ファイルは、.c で終わります)
df
コマンドを使用してください。オプション無しの mount
コマンドも
同じ事をしてくれます。mount はさらにマウントされているオプションも表示します。
これはオートマウントの問題ではありません。この Howto を書いている時点 では、ファイルシステムの自動認識は vfat でのマウントを、msdos のファイ ルシステムを正常にマウントできるまでは行いません。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 自身にファイルシステムのリストを 取得させることを現在考慮中です。mount プログラムの著者(達)を探しだして コメントを送ると歓迎されるでしょう。結論として、現在のところは、 他のファイルシステムの自動認識をあきらめない限り、vfat をマウントする ことはできないということです。この問題が早く解決すればよいのですが・・・。 それまでの間は、ファイルシステムのタイプごとに別々のマウントポイントを 作って指定するようにしましょう。
それは現在使用されているからです。root であったとしても、おそらく手動 でアンマウントすることはできないでしょう。マウントしたのがあなた(つま り、他のユーザーに使われているはずが無い)であるなら、そのディレクトリ にあるシェルを探してみてください。もしも見あたらなければ、他の何か(す でに終了されたファイラーのような)が、いわゆる痕跡を残していないかどう かを調べてみてください。うまく探せなかったら、fuser プログラムを使って みてください。
私にではありません。私は autofs に関しては何もしていません。私はただ、 みんなに autofs の素晴らしい仕事と、なんて簡単に使えるか、ということに 注目してもらいたかっただけです。強欲なAMD (例えば、unice や有史以前の フリーなツールを非常に高値で販売しています)に比べ、autofs はドキュメントも 豊富です。実装者には心から感謝しています。 すべての著作権は Transmeta 社が 保持しておりますので、すいませんがクレジットリストを書き出すことはできません。
(訳注: unice とは、UNIX の複数形です。ただし、同じ種類の UNIX が複数 あったとしても unice ではありません。AIX, Linux, BSD など複数の種類の UNIX を指して unice と言います)
autofs のチュートリアルが、 http://www.linuxhq.com/lg/issue24/nielsen.html にあります。 http://www.cs.columbia.edu/~ezk/am-utils にある am-utils も参考になるでしょう。
(この URL を教えてくれてありがとう)
日本語訳についての問い合わせは
uv9h-hykw@asahi-net.or.jp までお願い致します。
最新版の文書は
http://www.asahi-net.or.jp/~uv9h-hykw/ から入手できます。
日本語訳は Linux-JF プロジェクトの方々から多くのご助言を頂きました。 ありがとうございます。
日本語訳:早川 仁
校正 :長谷川 靖
yaz-hase@qb3.so-net.ne.jp
1999年 2月7日