Autofs

提供: ArchWiki
2017年7月14日 (金) 23:07時点におけるKusakata (トーク | 投稿記録)による版 (翻訳)
ナビゲーションに移動 検索に移動

このドキュメントは 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
ノート: This can cause problems with resources getting locked if the connection to the share is lost. When trying to access the folder, programs will get locked into waiting for a response, and either the connection has to be restored or the process has to be forcibly killed before unmounting is possible. To mitigate this, only use if you will always be connected to the share, and do not use your home folder or other commonly used folders lest your file browser reads ahead into the disconnected folder
  • /etc/nsswitch.conf ファイルを開いて automount エントリを追加してください:
automount: files
  • テンプレートの設定が完了したら (下を参照)、root で autofs.service有効化・起動して AutoFS デーモンを起動してください。

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

リムーバルメディア

  • /etc/autofs/auto.misc を開いて様々なデバイスを追加・削除・編集してください。例えば:
/etc/autofs/auto.misc
#kernel   -ro                                        ftp.kernel.org:/pub/linux
#boot     -fstype=ext2                               :/dev/hda1
usbstick  -fstype=auto,async,nodev,nosuid,umask=000  :/dev/sdb1
cdrom     -fstype=iso9660,ro                         :/dev/cdrom
#floppy   -fstype=auto                               :/dev/fd0

CD/DVD のコンボドライブがある場合は cdrom の行を -fstype=auto のように置き換えることでメディアのタイプが自動で検出されるようになります。

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> はあなたのサーバーの名前に置き換えてください。

systemd の自動マウントサービスを使う方法もあります。NFS と systemd-automount を参照してください。

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

Arch のパッケージには Samba や CIFS のテンプレート/スクリプト (23.07.2009) は含まれていませんが、以下の手順で共有を使うことができます:

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

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

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

そして /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]
ノート: $ などの文字はバックスラッシュでエスケープしてください。

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 の代替

参照