BSD界隈四方山話

第37回FreeBSDオートマウントデーモンで自動マウント

オートマウントメカニズム

FreeBSD 10.1-RELEASEからFreeBSDにはオートマウントメカニズムが搭載されました。この機能を利用するとアクセスがあったタイミングや、リムーバブルメディアが挿入された時点で自動的にマウントを実施させるといったことができます。この機能はMac OS Xの自動マウント機能によく似ています。

この自動マウント機能は次のカーネルモジュールやコマンドで実現されています。

  • autofs(5) - 自動マウントファイルシステム。カーネルの内部の実装で、マウントが必要なタイミングになるとautomountd(8)にマウント処理を依頼し、automountd(8)が自動的にマウント処理を完了させるまで処理待ちをする
  • automountd(8) - カーネルから依頼を受けてマウント処理などを実施するデーモン
  • autounmountd(8) - automountd(8)がマウントした場所を、所定の時間が経過したらアンマウントするデーモン
  • automount(8) - キャッシュをクリアしたりフルアンマウントするなど自動マウント操作性を提供するユーティリティコマンド
  • /etc/auto_master - 設定ファイル。automountd(8)はこのファイルの内容に従って動作する

/etc/auto_masterと、このファイルで指定するマップファイルの2つに設定を書くことになるのですが、-noautoというスペシャルマップを指定すると/etc/fstabの書き換えでいろいろと設定できるようになります。今回はこちらの設定方法を紹介します。/etc/auto_masterの詳しい設定方法は次回取り上げます。

オートマウントを有効にする設定

オートマウント機能を有効にするには、/etc/rc.confファイルに次の設定を追加してシステムを再起動します。

リスト オートマウント機能を有効にする設定 /etc/rc.conf
autofs_enable="YES"

システムを再起動することができない場合には、次のように個々のサービスを起動してください。

 手動でオートマウント機能を起動
service automount start
service automountd start
service autounmountd start

この段階でautomountd(8)とautounmountd(8)デーモンが動作するようになります。kldstat(8)コマンドを実行するとautofs.koカーネルモジュールが読み込まれていることも確認できます。

設定ファイルを書き換えたといった場合には、システムを再起動するか、次のようにそれぞれサービスを再起動してください。

 設定変更を反映する方法
service automount restart
service automountd restart
service autounmountd restart

このあたりの操作は再起動すると考えていたのと違う動作になっていることがありますので、運用前に何度か再起動して設定を確認するようにしてください。

リムーバブルメディアをオートマウント

/etc/auto_masterに次の設定を追加してサービスを起動すると、リムーバブルメディアが自動的に/media/以下にマウントされるようになります。

リスト リムーバブルメディアのオートマウント /etc/auto_master
/media -media -nosuid

なにもない状態では次のように/media/には何もありません。

 なにも刺さっていない状態
% ls -l /media/
total 0
%

USBメモリなどを挿入すると、次のように自動的にマウント処理が行われます。Mac OS Xでいうところの/Volumes/以下にリムーバブルメディアがマウントされ、デスクトップにディスクのアイコンが生えてくるようなものです。

 自動的にマウントが実施される
% df | grep media
map -media        0B      0B      0B   100%    /media
/dev/da0s1      3.7G    408K    3.7G     0%    /media/SP UFD U2
% mount | grep media
map -media on /media (autofs)
/dev/da0s1 on /media/SP UFD U2 (msdosfs, local, nosuid, automounted)
%
/media/を見に行くとマウントされたディスクにアクセスできることを確認できます。
 自動マウントされたUSBメモリ
% ls -l /media
total 4
drwxr-xr-x  1 root  wheel  4096 Jan  1  1980 SP UFD U2
% ls -l /media/SP\ UFD\ U2/
total 244
-rwxr-xr-x  1 root  wheel  241152 Oct 17  2012 Activate Warranty.exe
drwxr-xr-x  1 root  wheel    4096 Jul 28 02:47 images
-rwxr-xr-x  1 root  wheel     585 Nov 29  2012 index.html
%

LinuxディストリビューションでもUSBメモリは/media/以下にオートマウントされることが多いので、似たような感じです。

noautoをオートマウント

/etc/fstabにはシステム起動時にはマウントしてもらうと困るマウントポイントにnoautoを指定することがあります。たとえば、リムーバブルメディアを接続してあるとは限らないのでマウントできるかわからないとか、システムの再起動時にNFSのサーバが動作しているかわからない、といった場合にこうした設定をよく使います。たまにしか使わないので最初からはマウントしておきたくない、といったときにもそうした設定を行います。

オートマウント機能を使うと、こうした対象を自動マウントできるようになります。次のように/etc/auto_masterファイルに設定を追加します。

リスト /etc/fstabのnoauto指定を自動マウントする
/- -noauto

たとえば/etc/fstabに次のような設定が追加されているとします。/Users/daichiに、NFSサーバの/Users/daichiをマウントするといった設定です。noautoが指定されているので、手動でマウントしないとマウントされません。

リスト /etc/fstabにある手動マウント用の設定
192.168.185.1:/Users/daichi /Users/daichi nfs rw,noauto 0 0

システム起動時には次のような状況になっていて、マウントは実施されていません。

 システム起動時にはマウントは実施されていない
% df
Filesystem  1K-blocks    Used    Avail Capacity  Mounted on
/dev/da0p2   28433628 4981848 21177092    19%    /
devfs               1       1        0   100%    /dev
map -noauto         0       0        0   100%    /Users/daichi
% mount
/dev/da0p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
map -noauto on /Users/daichi (autofs)
%

ssh(1)経由でこのマシンにログインするとか、何らかの操作で/Users/daichiが利用される状況になると、次のように自動的にマウント処理が実施されます。

 自動的にマウント処理が走る
$ df
Filesystem                     Size    Used   Avail Capacity  Mounted on
/dev/da0p2                      27G    4.8G     20G    19%    /
devfs                          1.0K    1.0K      0B   100%    /dev
map -noauto                      0B      0B      0B   100%    /Users/daichi
192.168.185.1:/Users/daichi    931G    269G    661G    29%    /Users/daichi
$ mount
/dev/da0p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
map -noauto on /Users/daichi (autofs)
192.168.185.1:/Users/daichi on /Users/daichi (nfs, automounted)
$

マウントされるときに多少のラグを感じることがありますが、まるで気がつかずにマウントが済むこともあります。

 最初からマウントされていたかのように利用できる
% ls /Users/daichi/ | head
Applications
Desktop
Documents
Downloads
Dropbox
Library
Movies
Music
Pictures
Public
%

automountd(8)がマウントした領域はautounmountd(8)によってモニタリングされ、なにもアクセスされない期間が一定期間存在すると自動的にアンマウントされるようになっています。使っていないと自動的にアンマウントされるので、誤って中身を書き換えるとかファイルを削除してしまうといった問題を回避しやすくなります。

automount -fuのようにコマンドを実行すると、automountd(8)でマウントされたポイントをすべて強制的にアンマウントさせることができます。automount -cのように実行するとキャッシュをクリアできるので、いろいろな操作の中で見えているのに実態がないとか、その逆とか、そういった状況をクリアできます。

使えるオートマウント

ライトなユースケースでは今回紹介した設定でほとんど事足りると思います。しばらくオートマウント機能を使っていますが、その時マウントしていることに気がつくことはほとんどなく、最初からマウントして使っていたような気がしてきます。

/etc/fstabをゴリゴリ書き換えると、書き換えの失敗でシステムが起動してこなくなることがあるので、その点では/etc/auto_masterとそこから指定するマップファイルに設定を書く方法の方が安全といえば安全です。設定をミスってもデーモンが文句を言うくらいで、まずシステムは起動してくるからです。ただし、設定ファイルが複数になってくるので管理が面倒というのはあります。/etc/fstabにすべて設定がまとまっている方がいろいろ簡単です。このあたりはケースバイケースと好みで使い分けるところでしょう。

MacBook Proの仮想環境上でFreeBSDを使っているといったような場合、LANにいるときはLAN内部のサーバを自動マウントして利用し、LAN以外の場所にいるときにはそういうサーバはマウントしないし利用もしない、といった使い方をすることになるわけですが、オートマウントを使うとそのあたりの操作に悩むことが減ります。意識せずマウントされるのでかなり使える印象です。

次回は/etc/auto_master設定ファイルの詳しい設定方法などを取り上げようと思います。

おすすめ記事

記事・ニュース一覧