Autofs

提供: ArchWiki
2020年7月15日 (水) 22:50時点におけるBlackteahamburger (トーク | 投稿記録)による版 (分類を修正)
ナビゲーションに移動 検索に移動

このドキュメントは AutoFS を設定する手順を解説しています。AutoFS はリムーバブルメディアやネットワーク共有などが接続されたりアクセスされたときに自動でマウントするパッケージです。

インストール

autofs パッケージをインストールしてください。

ノート: autofs4 モジュールをロードする必要はなくなりました。

設定

AutoFS ではテンプレートファイルを使って設定します。ファイルは /etc/autofs にあります。メインのテンプレートは auto.master で、メディアタイプに合わせて他のテンプレートを読み込むことができます。

  • お好きなエディタで /etc/autofs/auto.master ファイルを開いて下さい。以下のようになっているはずです:
/etc/autofs/auto.master
#/media /etc/autofs/auto.media

各行の最初の値はテンプレートのメディアをマウントするベースディレクトリです。2番目の値は使用するテンプレートです。デフォルトのベースパスは /media となっていますが、自由に変更できます。例:

/etc/autofs/auto.master
/media/misc     /etc/autofs/auto.misc     --timeout=5
/media/net      /etc/autofs/auto.net      --timeout=60
ノート: テンプレートファイルの末尾には改行が必要です (最後の単語の後に ENTER を押してください)。EOF (end of file) 行が存在しない場合、AutoFS デーモンは正しくロードされません。

timeout パラメータではディレクトリをアンマウントする秒数を設定します。

システム上にベースディレクトリが存在しなかった場合、作成されます。動的にメディアをロードするためにベースディレクトリはマウントされるため、autofs が動作している間、ベースディレクトリにもともとあった中身を閲覧することはできなくなります。使用中のディレクトリを間違って自動マウントしてしまったとしても、auto.master でディレクトリを変更して AutoFS を再起動することで元に戻せます。

動的にロードされたディレクトリがマウントされた後でも元あったファイルが使えるようにしたい場合、他のディレクトリ (例: /var/autofs/net) にマウントするようにするかソフトリンクを使ってください:

# ln -s /var/autofs/net/share_name /media/share_name

もしくは autofs でメディアを別のフォルダにマウントする場合:

/etc/autofs/auto.master
/-     /etc/autofs/auto.template
/etc/autofs/auto.template
/path/to/folder     -options :/device/path
/home/user/usbstick  -fstype=auto,async,nodev,nosuid,umask=000  :/dev/sdb1
ノート: 共有への接続が失われたときにリソースがロックされたままになるという問題が発生します。フォルダにアクセスしようとしたとき、プログラムは反応が返ってくるまでロックされ、接続が戻るか、プロセスを強制的に終了するまでアンマウントができません。この問題を緩和するには、共有に接続が常に可能な場合のみ使用するようにして、ホームフォルダなど頻繁に使用するフォルダでは使用しないようにしてください。
  • /etc/nsswitch.conf ファイルを開いて automount エントリを追加してください:
automount: files
  • テンプレートの設定が完了したら (下を参照)、root で autofs.service有効化・起動して AutoFS デーモンを起動してください。

これでデバイスにアクセスしたときに自動的にマウントされるようになります。アクセスしているかぎりはマウントされ続けます。

リムーバブルメディア

リムーバブルデバイスは空いているブロックデバイスのパスが割り当てられます。例えば、/dev/sd{a,b,c} が既に使われている場合、次にマウントされたリムーバブルメディアには /dev/sdd ブロックが与えられます。順番が定かでないブロックデバイスのパスに合わせてマウントポイントを割り当てる代わりに、リムーバブルメディアの UUID や PARTUUID をマップファイルで使用するという方法があります。

例えば、特定の USB ドライブを /mnt/black というパスにマウントするには、テンプレートファイルとマップファイルを以下のように設定:

/etc/autofs/auto.master
# master template file
/mnt     /etc/autofs/auto.mnt   # [options here]

マウントしたいパーティションの UUID を blkid を使って確認してから、マップファイルを生成:

 # _ID=$( blkid --output value --match-tag PARTUUID /dev/sdXY )
 # printf "%s %s\n" "black -fstype=auto :PARTUUID=" "${_ID}" >/etc/autofs/auto.mnt

NFS ネットワークマウント

AutoFS はリモートサーバー上の NFS 共有を自動で認識・マウントする新しい方法を提供しています (autofs5 で AutoFS のネットワークテンプレートは /etc/autofs/auto.net から削除されました)。自動認識によるネットワーク共有のマウントを有効にするには、以下を /etc/autofs/auto.master ファイルに追加してください:

/net -hosts --timeout=60
ノート: (/etc/hosts で IP アドレスに名前を付けるか DNS を使用して) ホストネームが解決できるようになっていること、そして nfs-utils がインストール・動作していることを確認してください。また、共有フォルダを閲覧するには RPC を有効にする必要があります (rpcbind.service起動有効化してください)。

例えば、リモートサーバーの名前が fileserver で NFS 共有の名前が /home/share の場合、以下のコマンドを実行するだけで共有にアクセスできます (サーバーのホストネームがディレクトリの名前になります):

# cd /net/fileserver/home/share
ノート: Please note that ghosting, i.e. automatically creating directory placeholders before mounting shares is enabled by default, although AutoFS installation notes claim to remove that option from /etc/conf.d/autofs in order to start the AutoFS daemon.

-hosts オプションは showmount コマンドと同じような仕組みでリモートの共有を認識します。以下のコマンドを実行することで共有ディレクトリを確認できます:

# showmount <servername> -e 

<servername> はあなたのサーバーの名前に置き換えてください。

NFS の手動設定

server_name の /srv/shared_dir という名前の NFS 共有を client_pc というコンピュータの /mnt/foo にマウントする場合、auto.master を編集して共有の設定ファイルを作成します (auto.server_name):

/etc/autofs/auto.master
/mnt   /etc/autofs/auto.server_name --timeout 60
/etc/autofs/auto.server_name
foo  -rw,soft,intr,rsize=8192,wsize=8192 server_name:/srv/shared_dir

Samba

単一の共有フォルダ

以下を /etc/autofs/auto.master に追加:

/media/[my_server] /etc/autofs/auto.[my_server] --timeout 60 --browse

--timeout はファイルシステムがアンマウントされるまでの待機時間を定義します。--browse オプションはネットワーク共有が使えなくなったときにタイムアウトを防ぐために各マウントポイントに空のフォルダを作成します。

そして /etc/autofs/auto.[my_server] ファイルを作成:

[any_name] -fstype=cifs,[other_options] ://[remote_server]/[remote_share_name]

other_options セクションに、共有で使用するユーザー名とパスワードを指定してください:

[any_name] -fstype=cifs,username=[username],password=[password],[other_options] ://[remote_server]/[remote_share_name]
ノート: $ などの文字はバックスラッシュでエスケープしてください。

複数の共有フォルダ

/etc/autofs/auto.[my_server] では複数の共有フォルダを指定することができます。例:

[any_name] -fstype=cifs,[other_options] /photos ://[remote_server]/photos /music ://[remote_server]/music /video ://[remote_server]/video

自動探索

/etc/autofs/auto.smb のコメントを見てください。

FTP と SSH (FUSE を使用)

リモートの FTP や SSH サーバーには FUSE (仮想ファイルシステムレイヤー) と AutoFS でシームレスにアクセスすることができます。

リモート FTP

まず、curlftpfs パッケージをインストールしてください。

fuse モジュールをロード:

# modprobe fuse

システムが起動するたびにモジュールがロードされるように /etc/modules-load.d/fuse.conf ファイルを作成して fuse と記述してください。

そして、/etc/autofs/auto.master に FTP サーバーのエントリを追加します:

/media/ftp        /etc/autofs/auto.ftp    --timeout=60

/etc/autofs/auto.ftp ファイルを作成して ftp://myuser:mypassword@host:port/path の形式でサーバーを追加してください:

servername -fstype=curl,rw,allow_other,nodev,nonempty,noatime    :ftp\://myuser\:mypassword\@remoteserver
ノート: Your passwords are plainly visible for anyone that can run df (only for mounted servers) or view the file /etc/autofs/auto.ftp.

セキュリティを高めたい場合 ~root/.netrc ファイルを作成することでパスワードを追加できます。パスワードは平文のテキストですが、600 にパーティションを設定すれば df コマンドで表示されなくなります。フォーマットは:

machine remoteserver  
login myuser
password mypassword

ユーザー名とパスワードを指定しない場合 /etc/autofs/auto.ftp に追加する行は以下のようになります:

servername -fstype=curl,allow_other    :ftp\://remoteserver

以下の内容で /sbin/mount.curl ファイルを作成:

/sbin/mount.curl
#!/bin/sh
curlftpfs $1 $2 -o $4,disable_eprt

以下の内容で /sbin/umount.curl ファイルを作成

/sbin/umount.curl
#!/bin/sh
fusermount -u $1

両方のファイルのパーティションを設定:

# chmod 755 /sbin/mount.curl
# chmod 755 /sbin/umount.curl

再起動後 /media/ftp/servername から FTP サーバーにアクセスできるようになっているはずです。

リモート SSH

以下は AutoFS を使って SSH 経由でリモートサーバーのファイルシステムにアクセスする手順です。

ノート: パスワードを使わない認証は便利なだけでなくセキュリティ的に安全でもあります。詳しくは SSH 鍵を参照。

sshfs パッケージをインストールしてください。

fuse モジュールをロード:

# modprobe fuse

システムが起動するたびにモジュールがロードされるように /etc/modules-load.d/fuse.conf ファイルを作成して fuse と記述してください。

openssh をインストールしてください。

SSH 鍵を生成:

$ ssh-keygen

パスフレーズが要求されたら、ENTER を押してください。パスフレーズを設定しないで SSH 鍵を使用するのはセキュリティ的には問題がありますが、パスフレーズを設定して AutoFS を使うのは難しいためここでは避けます。

そして、リモートの SSH サーバーに公開鍵をコピー:

$ ssh-copy-id username@remotehost

root で、パスワードを入力しなくてもリモートサーバーにログインできることを確認:

# ssh username@remotehost
ノート: 上記のコマンドで root の known_hosts リストにリモートサーバーが追加されます。ホストは手動で /etc/ssh/ssh_known_hosts に追加することもできます。

/etc/autofs/auto.master に SSH サーバーのエントリを作成:

/media/ssh		/etc/autofs/auto.ssh	--timeout=60

/etc/autofs/auto.ssh ファイルを作成して SSH サーバーを追加:

/etc/autofs/auto.ssh
servername     -fstype=fuse,rw,allow_other,IdentityFile=/home/username/.ssh/id_rsa :sshfs\#username@host\:/

再起動後 /media/ssh/servername から SSH サーバーにアクセスできるようになっているはずです。

MTP

Android デバイスでは Media Transfer Protocol (MTP) が使われます。

mtpfs パッケージをインストールしてください。

/etc/autofs/auto.misc に MTP デバイスのエントリを追加:

android -fstype=fuse,allow_other,umask=000     :mtpfs

トラブルシューティング

このセクションでは AutoFS に関するよくある問題の解決方法を載せています。

NIS を使用

AutoFS のバージョン 5.0.5 には NIS の高度なサポートが含まれています。AutoFS で NIS を使うには、/etc/autofs/auto.master でテンプレートの名前の前に yp: を追加してください:

/home   yp:auto_home    --timeout=60 
/sbtn   yp:auto_sbtn    --timeout=60
+auto.master

バージョン 5.0.5 以前の NIS を使っている場合、/etc/nsswitch.confnis を追加してください:

automount: files nis

任意のパラメータ

timeout などのパラメータは /etc/default/autofs でシステム全体に適用するように設定できます:

  • /etc/default/autofs ファイルを開いて OPTIONS 行を編集:
OPTIONS='--timeout=5'
  • ログ出力を有効にするには (デフォルトでは何もログが記録されません)、/etc/default/autofsOPTIONS 行をアンコメントして --verbose を追加してください:
OPTIONS='--verbose --timeout=5'

autofs デーモンの再起動後、systemctl statusjournalctl でログが確認できるようになります。

複数のデバイスを認識

USB ドライブ/スティックを複数使用する場合、AutoFS を使ってマウントポイントを設定して Udev で USB ドライブごとに名前を付けることができます。Udev ルールの設定方法については udev#固定デバイス名の設定 を見て下さい。

AutoFS のパーミッション

AutoFS が機能しない場合、テンプレートファイルのパーミッションが正しいことを確認してください。パーミッションが間違っていると AutoFS は起動しません。設定ファイルをバックアップしたときにファイルモードを保持してなかった場合に起こりえます。設定ファイルの正しいモードは以下の通りです:

  • 0644 - /etc/autofs/auto.master
  • 0644 - /etc/autofs/auto.media
  • 0644 - /etc/autofs/auto.misc
  • 0644 - /etc/conf.d/autofs

通常、スクリプト (先の auto.net など) には実行可能属性 (chmod a+x filename) が必要で、マウントのリストには必要ありません。

/var/log/daemon.log に以下のようなエラーが出力される場合、パーミッションに問題があります:

May  7 19:44:16 peterix automount[15218]: lookup(program): lookup for petr failed
May  7 19:44:16 peterix automount[15218]: failed to mount /media/cifs/petr

fusermount の問題

util-linux の特定のバージョンでは、"user=" オプションを使用しても autofs でマウントした fuse ファイルシステムドライブをアンマウントすることができません。次の URL を参照: http://fuse.996288.n3.nabble.com/Cannot-umount-as-non-root-user-anymore-tp689p697.html

自動マウントの問題のデバッグ

効率的にデバッグするために、フォアグラウンドで自動マウントを実行してみてください:

# systemctl stop autofs.service
# automount -f -v

もしくは、デバッグ情報をもっと表示させたい場合:

# automount -f --debug

AutoFS の代替

参照