autofs
は指定したディレクトリに対して、必要となった時に自動的なマウントを実施するプログラムです。効率性を高めるためにカーネルモジュールをベースとした作りになっていて、ローカルのディレクトリだけでなく、ネットワーク共有を設定することもできます。これらの自動的なマウントポイントは、そこに対してアクセスが行われた際にマウントが行われ、一定時間アクセスがないと自動的にマウントが解除されるようになっています。このような 「オンデマンド」 型の仕組みにより、 /etc/fstab
でマウントを固定で指定するよりもずっと柔軟で、ネットワーク帯域にも優しく性能を高めることもできるようになっています。ちなみに、 autofs
は制御スクリプトを、 automount
は実際の自動マウント処理を行うコマンド (デーモン) を意味しています。
autofs
は openSUSE Leap の既定ではインストールされません。自動マウント機能を使用する場合は、まず下記のように実行して、必要なパッケージをインストールしてください:
>
sudo
zypper install autofs
autofs
の設定を行うには、 vim
などのテキストエディタを利用し、手作業で設定ファイルを編集する必要があります。 autofs
の設定は、大きく分けて 2 種類のファイルがあります。一方は マスター マップファイル、もう一方は固有のマップファイルです。
autofs
における既定のマスターマップファイルは /etc/auto.master
です。 /etc/sysconfig/autofs
内の DEFAULT_MASTER_MAP_NAME
オプションの値を変更することで、任意の場所にファイルを作成することができます。ここでは openSUSE Leap における既定のマップファイルを使用して作業を行います:
# # Sample auto.master file # This is an automounter map and it has the following format # key [ -mount-options-separated-by-comma ] location # For details of the format look at autofs(5).1 # #/misc /etc/auto.misc2 #/net -hosts # # Include /etc/auto.master.d/*.autofs3 # #+dir:/etc/auto.master.d # # Include central master map if it can be found using # nsswitch sources. # # Note that if there are entries for /net or /misc (as # above) in the included master map any keys that are the # same will not be seen as the first read key seen takes # precedence. # +auto.master4
| |
既定では (#) 印が付けられてコメントアウトされていますが、シンプルな automounter マッピングの書式に関するシンプルな例が示されています。 | |
マスターマップを複数のファイルに分割するには、この行のコメントマーク (#) を外してください。これにより、 | |
|
auto.master
内の各項目は、下記の書式で記述します:
マウントポイント マップ名 オプション
autofs
ファイルシステムのマウント先となるベースの場所を指定します。たとえば /home
のようになります。
マウントの際に使用するマップソースの名前を指定します。マップファイルの書式について、詳しくは 23.2.2項 「マップファイル」 をお読みください。
これらのオプションが指定されていれば、指定されたマップ内の全ての項目に対して、既定値の形で適用されるようになります。
マップの種類
, 書式
, オプション
などの設定値に関する詳しい情報については、 のマニュアルページ ( man 5 auto.master
) をお読みください。
たとえば auto.master
内で下記のような設定を行うと、 autofs
が /etc/auto.smb
内を参照し、 /smb
というマウントポイントを作成します:
/smb /etc/auto.smb
直接マウントとは、対応するマップファイル内で指定されているパスに対して、マウントポイントを直接作成することを意味します。 auto.master
内でマウントポイントを指定する代わりに、マウントポイントの箇所に /-
を指定してください。たとえば下記のような設定を行うと、 autofs
は auto.smb
内で指定されているパスにマウントポイントを作成します:
/- /etc/auto.smb
マップファイル側でローカルもしくはネットワークパスをフルパスで指定しない場合、 Name Service Switch (NSS) の設定を利用して場所を判断するようになります:
/- auto.smb
autofs
で自動マウントを行う場合、 ファイル タイプが最もよく使用されますが、その他のタイプも用意されています。マップ仕様ではコマンドの出力や LDAP やデータベースの問い合わせ結果などを指定することができます。マップタイプの詳細について、詳しくはマニュアルページ man 5 auto.master
をお読みください。
マップファイルではマウント元の場所 (ローカルまたはネットワーク) を指定するほか、ローカル側でのマウント先となるマウントポイントを指定します。マップファイルの一般的な書式はマスターマップに似ています。違いは オプション 指定の位置で、項目の末尾ではなくマウントポイントと場所の間に記述します:
マウントポイント オプション 場所
なお、マップファイルは実行可能であるとしてマークされていないことをご確認ください。実行可能マークを外すには、 chmod -x マップファイル
を実行します。
マウントする先のディレクトリを指定します。単一のディレクトリ名 (間接 マウントと呼びます) を指定することができるほか、 auto.master
内で指定したベースパスからの相対パスを指定したり、マウントポイントのフルパス (直接マウントと呼びます、詳しくは 23.2.1.1項 「直接マウント」 をお読みください) を指定したりすることもできます。
対応する項目に対して設定する、マウントオプションのリストをカンマ区切りで指定します。このマップファイルに対する auto.master
の行内にオプションの指定が存在する場合は、それらも追加されます。
ファイルシステムのマウント元の場所を指定します。通常は NFS もしくは SMB のボリュームで、一般的な表記方法 (ホスト名:パス
) で記述します。 /dev
の項目や smbfs の共有など、 '/' で始まるパスをマウント元として指定したい場合は、冒頭に ':' を付けて記述します (例: :/dev/sda1
) 。
本章では、 autofs
サービスの制御方法について、および automounter の操作を調整する際のデバッグ情報の表示方法について説明しています。
autofs
サービスの制御 #Edit sourceautofs
サービスは systemd
で制御を行います。 autofs
に対する systemctl
コマンドの一般的な書式は下記の通りです:
>
sudo
systemctl サブコマンド autofs
サブコマンド には下記のいずれかを指定します:
システムの起動時に automounter デーモンを開始するように設定します。
automounter デーモンを開始します。
automounter デーモンを停止します。自動的なマウントポイントにはアクセスできなくなります。
autofs
の現状のほか、関連するログファイルの一部を表示します。
automounter をいったん停止させ、開始し直します。動作中の全てのデーモンを終了させたあと、新しいデーモンを開始します。
現在の auto.master
マップを確認し、項目に変更点があれば対応するデーモンを再起動し、項目に追加があれば新しい項目のデーモンを起動します。
autofs
でのディレクトリへのマウントについて、何らかの問題が発生した場合は、 automount
デーモンを手動で起動して、出力されるメッセージを確認することをお勧めします:
まずは autofs
を停止します。
>
sudo
systemctl stop autofs
一方の端末から、冗長な出力を行うよう automount
を実行し、そのまま前面で動き続けるようにします。
>
sudo
automount -f -v
もう 1 つの端末を起動して、自動マウントされるはずのディレクトリにアクセスを行います (たとえば cd
や ls
など) 。
automount
を起動したほうの端末に戻って出力を確認し、なぜマウントが失敗しているのか、もしくはなぜマウントが行われなかったのかを調べます。
下記の手順では、 autofs
を利用してネットワーク内に存在する NFS 共有を自動マウントする流れを説明しています。下記の手順では、ここまでの説明と NFS に関する知識があることを前提にしています。 NFS に関して、詳しくは 第22章 「NFS によるファイル共有」 をお読みください。
まずはマスターマップファイルを編集します:
>
sudo
vim /etc/auto.master
/etc/auto.master
の末尾に、新しい NFS マウントの項目を追加します:
/nfs /etc/auto.nfs --timeout=10
これにより、 autofs
はベースマウントポイントが /nfs
であり、実際の NFS 共有が /etc/auto.nfs
内に記述されている設定になります。なお、 10 秒間何も処理を行わない場合、自動的にマウントが解除されます。
NFS 共有に対する新しいマップファイルを作成します:
>
sudo
vim /etc/auto.nfs
/etc/auto.nfs
には通常、それぞれの NFS 共有に対して 1 行ずつ項目を記述します。書式は 23.2.2項 「マップファイル」 に示されているとおりです。マウントポイントと、 NFS 共有のネットワークアドレスを下記のように指定します:
export jupiter.com:/home/geeko/doc/export
上記の行は、 jupiter.com
というホストにある /home/geeko/doc/export
というディレクトリを、 /nfs/export
というローカル側のディレクトリに自動マウントするための設定です (/nfs
は auto.master
マスターマップに記述されているものからの値を取ります) 。 /nfs/export
ディレクトリは、 autofs
で自動的に作成されます。
上記と同じ NFS 共有を /etc/fstab
に記述していた場合は、下記のようにしてコメントアウトしてください:
#jupiter.com:/home/geeko/doc/export /nfs/export nfs defaults 0 0
最後に autofs
を再読み込みさせて、動作するかどうかを確認します:
>
sudo
systemctl restart autofs
# ls -l /nfs/export total 20 drwxr-xr-x 5 1001 users 4096 Jan 14 2017 .images/ drwxr-xr-x 10 1001 users 4096 Aug 16 2017 .profiled/ drwxr-xr-x 3 1001 users 4096 Aug 30 2017 .tmp/ drwxr-xr-x 4 1001 users 4096 Apr 25 08:56 manual/
上記のように実行することでリモートの共有内のファイルを表示することができれば、 autofs
は問題なく動作していることになります。
本章では、 autofs
に関するより高度なトピックを説明しています。ネットワーク内で提供されている NFS 共有の自動マウントやマップファイル内でのワイルドカードの使用、そして CIFS ファイルシステム固有の情報などを説明しています。
/net
マウントポイント #Edit sourceこのヘルパーマウントポイントは、多数の NFS 共有を使用するような場合に便利です。 /net
はローカルのネットワーク内にある全ての NFS 共有を、必要に応じて自動マウントすることができます。この項目は auto.master
ファイル内で既に設定されていますので、コメントアウトを解除して autofs
を再起動するだけで利用することができます:
/net -hosts
>
sudo
systemctl restart autofs
たとえば jupiter
というサーバにある /export
という共有にアクセスしたい場合は、下記をコマンドラインで実行することで、マウントを行うことができます:
>
sudo
cd /net/jupiter/export
"\n \n"
たとえば /home
などがそれにあたりますが、個別に自動マウントしたいサブディレクトリを含むディレクトリがある場合、 autofs
では、これをより賢く解決することができます。
たとえばホームディレクトリの場合、 auto.master
ファイル内に下記の行を追加します:
/home /etc/auto.home
あとは /etc/auto.home
ファイル内に適切なマッピングを追加していくことで、ユーザのホームディレクトリを自動的にマウントすることができるようになります。今までの設定方法からすると、下記のようにそれぞれ個別のディレクトリを指定していくことになります:
wilber jupiter.com:/home/wilber penguin jupiter.com:/home/penguin tux jupiter.com:/home/tux [...]
でも、このような設定にしてしまうと、ユーザの一覧を auto.home
内でも管理しなければならなくなりますので、非常に面倒です。その代わり、マウントポイントの指定で '*' (アスタリスク) を指定し、ディレクトリ名の代わりに '&' を指定することで、上記の設定と同じ効果をもたらすことができます:
* jupiter:/home/&
SMB/CIFS の共有 (SMB/CIFS プロトコルに関する詳細は、 第21章 「Samba」 をお読みください) を自動マウントしたい場合、マップファイル内の書式を変更する必要があります。オプション欄に -fstype=cifs
と指定して、コロン ':' に続けてホスト名と共有名を指定します:
マウントポイント -fstype=cifs ://jupiter.com/export