8.4. autofs

/etc/fstab を使用する場合、ユーザーが NFS でマウントしたファイルシステムにそれほど頻繁にはアクセスしなくても、システムにはその使用頻度に関係なくマウントしているファイルシステム専用のリソースを維持しなければならないという弱点があります。マウント数が 1 ~ 2 に限られている場合は問題になりませんが、1 度に数多くのシステムに対して複数のマウントを維持する場合にはシステム全体のパフォーマンスに影響を与える可能性があります。この /etc/fstab の代わりとなるものがカーネルベースの automount ユーティリティーです。自動マウント機能は次の 2 つのコンポーネントで構成されます。
  • ファイルシステムを実装するカーネルモジュール
  • 他のすべての機能を実行するユーザー領域デーモン
automount ユーティリティーでは NFS ファイルシステムの自動マウントおよび自動アンマウントが可能なため (オンデマンドによるマウント機能)、システムのリソースを節約することができます。このユーティリティーは、AFS、SMBFS、CIFS、およびローカルのファイルシステムなど他のファイルシステムをマウントする場合にも使用することができます。

重要

nfs-utils パッケージは「NFS ファイルサーバー」および「ネットワークファイルシステムクライアント」の両グループの一部になっているため、デフォルトではベースグループと一緒にインストールされなくなりました。このため、NFS 共有を自動マウントする前に、nfs-utils がシステムにインストールされていることを確認してください。
また、autofs も「ネットワークファイルシステムクライアント」グループの一部です。
autofs は、デフォルトの主要設定ファイルとして /etc/auto.master (マスターマップ) を使用します。これは、ネームサービススイッチ (NSS) のメカニズムと autofs 設定 (/etc/sysconfig/autofs) を使用して別のネットワークソースと名前を使用するように変更できます。autofs バージョン 4 デーモンのインスタンスはマスターマップ内に設定された各マウントポイントに対して実行されるため、任意のマウントポイントに対してコマンドラインから手動で実行することが可能でした。しかし、autofs バージョン 5 では、設定されたすべてのマウントポイントは 1 つのデーモンを使って管理されるため、これを実行することができなくなりました。すべての自動マウントはマスターマップ内で設定しなければなりません。これは業界標準となる他の自動マウント機能の一般的な要件と一致します。マウントポイント、ホスト名、エクスポートしたディレクトリー、および各種オプションは各ホストに対して手作業で設定するのではなく、すべて 1 つのファイルセット (またはサポートされている別のネットワークソース) 内に指定することができます。

8.4.1. autofs バージョン 5 の改善点 (バージョン 4 との比較)

autofs バージョン 5 をバージョン 4 と比較した場合の特長を以下に示します。
ダイレクトマップサポート
ファイルシステム階層内の任意のポイントでファイルシステムを自動マウントするメカニズムは autofs 内の複数のダイレクトマップで提供されます。1 つのダイレクトマップはそのマスターマップ内の /- マウントポイントで表されます。1 つのダイレクトマップ内にある複数のエントリーにはキーとして絶対パス名が含まれます (インダイレクトマップでは相対パス名が使用される)。
レイジーマウントとアンマウントのサポート
一つのキーの配下の複数マウントポイントから構成される階層はマルチマウントマップの複数エントリーで表されます。 -hosts マップなどがその例で、 一般的には /net/host 配下の任意のホストにあるエクスポートをすべてマルチマウントマップのエントリとして自動マウントするために使用します。 -hosts マップを使用する場合、 /net/host に対して ls を行うと host にある各エクスポート用の autofs で起動するマウントをマウントします。 つまり、 アクセスが発生するとエクスポートがマウントされ、 一定時間アクセスがないとマウントの有効期限が切れます。 サーバーにアクセスする際に大量のエクスポートがある場合、 必要とされるアクティブなマウント数を大幅に減少させることができます。
LDAP サポートの強化
autofs の設定ファイル (/etc/sysconfig/autofs) により、 サイトが実装する autofs のスキーマを指定できる仕組みが提供されます。 このため、 アプリケーション自体で試行錯誤してスキーマを確定する必要がなくなります。 また、 認証済みの LDAP サーバーへのバインドにも対応するようになり、 一般的な LDAP サーバー実装でサポートしているほとんどのメカニズムを使用するようにます。 このため /etc/autofs_ldap_auth.conf という新しい設定ファイルが追加されています。 使用法はこの XML 形式を使用するデフォルト設定ファイル自体に記載されています。
Name Service Switch (nsswitch) 設定を適切に処理
特定の設定データをどこから取り込むのかを指定する場合に使用するのが Name Service Switch 設定ファイルです。 データのアクセスには同一のソフトウェアインターフェースを維持しながら、 管理者が使用するバックエンドのデータベースの選択には柔軟性を持たせることができるようになります。 バージョン 4 の自動マウント機能では NSS 設定の処理が徐々に向上されていましたが十分とは言えませんでした。 一方、 Autofs バージョン 5 ではニーズに対応できる完全実装となります。
このファイルでサポートされている構文については man nsswitch.conf を参照してください。すべての NSS データベースが有効なマップソースであるとは限らないため、無効なマップソースはパーサーによって拒否されることに注意してください。ファイル、ypnisnisplusldaphesiod などが有効なソースになります。
1 つの autofs マウントポイントに対して複数のマスターマップのエントリー
頻繁に使用されるのにまだ説明していないのがダイレクトマウントポイント /- に対する複数のマスターマップのエントリーの処理についてです。 各エントリのマップキーがマージされて 1つのマップとして動作します。

例8.2 1 つの autofs マウントポイントに対して複数のマスターマップのエントリー

以下のダイレクトマウント用の connectathon テストマップがその一例です。
/- /tmp/auto_dcthon
/- /tmp/auto_test3_direct
/- /tmp/auto_test4_direct
 

8.4.2. autofs の設定

自動マウント機能の主要設定ファイルは /etc/auto.master になります。 これがマスターマップとも呼ばれるもので、 「autofs バージョン 5 の改善点 (バージョン 4 との比較)」 で説明しているように変更することも可能です。 マスターマップにはシステム上で autofs によって制御されているマウントポイントおよびその該当設定ファイルまたは自動マウントマップと呼ばれるネットワークソースが記載されています。 マスターマップの形式は以下のようになります。
mount-point map-name options
この形式で使用されている変数について以下に示します。
mount-point
autofs のマウントポイント、/home などになります。
map-name
マウントポイント一覧とマウントポイントがマウントされるファイルシステムの場所が記載されているマップソース名です。マップエントリーの構文を以下に示します。
options
オプションが与えられている場合、 該当マップ内のすべてのエントリにそのオプションが適用されます。 エントリー自体にはオプション指定を行いません。 オプションが累積されていた autofs バージョン 4 とは異なる動作になります。 混合環境の互換性を実装させるため変更が加えられています。

例8.3 /etc/auto.master ファイル

以下に /etc/auto.master ファイル内にある行の一例を示します (cat /etc/auto.master で表示)。
/home /etc/auto.misc
マップの一般的な形式はそのマスターマップと同じですが、 マスターマップではエントリーの末尾に表示される「オプション (options)」がマウントポイント (mount-point) と場所 (location) の間に表示されます。
mount-point   [options]   location
この形式で使用されている変数について以下に示します。
mount-point
autofs のマウントポイントを参照しています。 これは 1 インダイレクトマウントの単一ディレクトリー名であっても、 複数のダイレクトマウント用のマウントポイントの完全パスであっても構いません。 ダイレクトマップとインダイレクトマップの各エントリーキー (上記の mount-point) の後に空白で区切られたオフセットディレクトリー (「/」で始まるサブディレクトリー名) が記載されます。 これがマルチマウントエントリーと呼ばれるものです。
options
オプションが与えられている場合、そのマップエントリー用のマウントオプションになります。エントリー自体にはオプション指定を行いません。
location
ローカルファイルシステムのパス (Sun マップ形式のエスケープ文字「:」が先頭に付き、 マップ名が「/」で始める)、 NFS ファイルシステム、 他の有効なファイルシステムなどファイルシステムの場所になります。
以下は、マップファイルのサンプルコンテンツです (例: /etc/auto.misc)。
payroll -fstype=nfs personnel:/dev/hda3
sales -fstype=ext3 :/dev/hda4
マップファイルの先頭コラムは autofs マウントポイントを示しています (salespayroll、 サーバー名が personnel)。 2 番目のコラムは autofs マウントのオプションを示し、 3 番目のコラムはマウントのソースを示しています。 上記の場合、 /home/payroll/home/sales がautofs マウントポイントになります。 -fstype= は省略されることが多く、 一般的には正常な動作に特に必要とされません。
ディレクトリーが存在していない場合は自動マウント機能によりそのディレクトリーが作成されます。 自動マウント機能が起動する前からディレクトリーが存在している場合にはそのディレクトリーの削除は行われません。 次の 2 種類のコマンドいずれかを発行すると自動マウント機能のデーモンを起動または再起動させることができます。
  • service autofs start (自動マウントのデーモンが停止している場合)
  • service autofs restart
プロセスにより上記の設定を使用して /home/payroll/2006/July.sxc などのアンマウントされている autofs ディレクトリーへのアクセスが要求されると、 自動マウントのデーモンがそのディレクトリーを自動的にマウントすることになります。 タイムアウトが指定されている場合は、 タイムアウト期間中にそのディレクトリーへのアクセスがないと自動的にアンマウントされます。
次のコマンドを発行すると自動マウントのデーモンの状態を表示させることができます。
#  service autofs status

8.4.3. サイトの設定ファイルの無効化/拡大

クライアントシステム上の特定マウントポイントのサイトデフォルト値を無効にする場合に便利です。 たとえば、 次のような状況を想定してみます。
  • 自動マウント機能のマップが NIS に格納され、 /etc/nsswitch.conf ファイルには次のようなディレクティブがあるとします。
    automount:    files nis
  • auto.master ファイルには次が含まれます。
    +auto.master
  • NIS の auto.master マップファイルには次が含まれます。
    /home auto.home
  • NIS の auto.home マップには次が含まれます。
    beth        fileserver.example.com:/export/home/beth
    joe        fileserver.example.com:/export/home/joe
    *       fileserver.example.com:/export/home/&
  • /etc/auto.home ファイルマップは存在しません。
このような状況でクライアントシステムが NIS マップの auto.home を無効にして、 ホームのディレクトリーを別のサーバーからマウントする必要があると仮定します。 クライアントは次のような /etc/auto.master マップを使用する必要があります。
/home ­/etc/auto.home
+auto.master
/etc/auto.home マップには次のエントリーが含まれます。
*    labserver.example.com:/export/home/&
自動マウント機能で処理されるのは 1 番目に出現するマウントポイントのみになるため、/home には NIS auto.home マップではなく、/etc/auto.home のコンテンツが含まれます。
一方、サイト全体の auto.home マップにいくつかのエントリーを加えて拡大させたい場合は、 /etc/auto.home ファイルマップを作成して新しいエントリーを組み込み、最後に NIS auto.home マップを組み込みます。/etc/auto.home ファイルマップは次のようになります。
mydir someserver:/export/mydir
+auto.home
ls /home を行うと、 上述の NIS auto.home マップに従い、以下のような出力になります。
beth joe mydir
autofs は読み込み中のファイルマップと同じ名前のファイルマップの内容を組み込まないため、上記の例は期待通りに動作します。このように autofsnsswitch 設定内の次のマップソースに移動します。

8.4.4. LDAP を使用した自動マウント機能のマップの格納

LDAP から自動マウント機能のマップを取得するよう設定しているシステムにはすべて LDAP クライアントのライブラリーをインストールしておかなければなりません。 Red Hat Enterprise Linux なら、 openldap パッケージは automounter の依存パッケージとして自動的にインストールされるはずです。 LDAP アクセスを設定する際は /etc/openldap/ldap.conf ファイルを編集します。 BASE、 URI、 スキーマなどが使用するサイトに適した設定になっていることを確認してください。
自動マウント機能のマップを LDAP に格納するために既定された最新のスキーマが rfc2307bis に記載されています。 このスキーマを使用する場合は、 スキーマの定義のコメント文字を取り除き autofs 設定 (/etc/sysconfig/autofs) 内にセットする必要があります。

例8.4 autofs 設定のセッティング

DEFAULT_MAP_OBJECT_CLASS="automountMap"
DEFAULT_ENTRY_OBJECT_CLASS="automount"
DEFAULT_MAP_ATTRIBUTE="automountMapName"
DEFAULT_ENTRY_ATTRIBUTE="automountKey"
DEFAULT_VALUE_ATTRIBUTE="automountInformation"
設定内でコメントされていないスキーマエントリーが上記だけであることを確認します。automountKeyrfc2307bis スキーマの cn 属性を置換します。LDIF のサンプル設定を以下に示します。

例8.5 LDF の設定

# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (&(objectclass=automountMap)(automountMapName=auto.master))
# requesting: ALL
#

# auto.master, example.com
dn: automountMapName=auto.master,dc=example,dc=com
objectClass: top
objectClass: automountMap
automountMapName: auto.master

# extended LDIF
#
# LDAPv3
# base <automountMapName=auto.master,dc=example,dc=com> with scope subtree
# filter: (objectclass=automount)
# requesting: ALL
#

# /home, auto.master, example.com
dn: automountMapName=auto.master,dc=example,dc=com
objectClass: automount
cn: /home

automountKey: /home
automountInformation: auto.home

# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (&(objectclass=automountMap)(automountMapName=auto.home))
# requesting: ALL
#

# auto.home, example.com
dn: automountMapName=auto.home,dc=example,dc=com
objectClass: automountMap
automountMapName: auto.home

# extended LDIF
#
# LDAPv3
# base <automountMapName=auto.home,dc=example,dc=com> with scope subtree
# filter: (objectclass=automount)
# requesting: ALL
#

# foo, auto.home, example.com
dn: automountKey=foo,automountMapName=auto.home,dc=example,dc=com
objectClass: automount
automountKey: foo
automountInformation: filer.example.com:/export/foo

# /, auto.home, example.com
dn: automountKey=/,automountMapName=auto.home,dc=example,dc=com
objectClass: automount
automountKey: /
automountInformation: filer.example.com:/export/&