Autofs
このドキュメントは AutoFS を設定する手順を解説しています。AutoFS はリムーバブルメディアやネットワーク共有などが接続されたりアクセスされたときに自動でマウントするパッケージです。
目次
インストール
設定
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
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 デーモンを起動してください。
これでデバイスにアクセスしたときに自動的にマウントされるようになります。アクセスしているかぎりはマウントされ続けます。
リムーバブルメディア
/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
-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
セキュリティを高めたい場合 ~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 経由でリモートサーバーのファイルシステムにアクセスする手順です。
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
/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.conf
に nis
を追加してください:
automount: files nis
任意のパラメータ
timeout
などのパラメータは /etc/default/autofs
でシステム全体に適用するように設定できます:
/etc/default/autofs
ファイルを開いてOPTIONS
行を編集:
OPTIONS='--timeout=5'
- ログ出力を有効にするには (デフォルトでは何もログが記録されません)、
/etc/default/autofs
のOPTIONS
行をアンコメントして--verbose
を追加してください:
OPTIONS='--verbose --timeout=5'
autofs
デーモンの再起動後、systemctl status
や journalctl
でログが確認できるようになります。
複数のデバイスを認識
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 の代替
- Systemd は必要に応じてファイルシステムを自動マウントすることができます。説明は Fstab#systemd による自動マウント を、例は Sshfs#必要に応じてマウント を見て下さい。
- Thunar Volume Manager は Thunar ファイルマネージャの自動マウントシステムです。
- PCManFM はリモート共有にアクセスすることができる軽量なファイルマネージャです。
- Udisks は最小主義の自動ディスクマウントサービスです。
参照
- AutoFS で FTP と SFTP を使用する方法は Gentoo Wiki の記事を元にしています: https://web.archive.org/web/20130414074212/http://en.gentoo-wiki.com/wiki/Mounting_SFTP_and_FTP_shares
- SSH に関する詳細は SSH や SSH 鍵のページを見て下さい。
- Ubuntu の Autofs ヘルプ wiki: https://help.ubuntu.com/community/Autofs
- ファイルシステムごとのマウントオプションについては http://manpages.ubuntu.com/manpages/natty/en/man8/mount.8.html#contenttoc5 を参照。
- fuse のマウントオプションについては http://manpages.ubuntu.com/manpages/precise/man8/mount.fuse.8.html を参照。