FreeBSDでSSHFSを試す

投稿: 2008年6月16日

先日、 Emacsで Trampを使うという話を書いた。この目的は、リモートにあるファイルを Emacsで編集したりする、ということなのけれど、 sshfsというのがこの目的、というよりリモートのファイルにアクセスを必要とする作業全般には適しているらしい、という話を小耳に挟んだので、早速調べてみた。これ、簡単に言えば sshでアクセスできるホストの任意のディレクトリを、 sshfsを実行するホストの任意のマウント・ポイントにマウントしてくれて、その後はさもローカルのディレクトリかのようにリモートのディレクトリを扱うことができる、というもの。

FreeBSD Ports Collectionのインデックスを検索すると、 fusefs-sshfsというのが出てきたので、とりあえず入れてみた。 (FreeBSD 6.x以降で使えるらしい。) が、入れただけだとどうしていいものやらよく分からなかったので、ちょっとあれこれ調べてみた。以下、分かったことなど。

インストール


sudo portinstall fusefs-sshfs

fusefs-*を使うための設定

/etc/rc.confに以下を記述して、 fuseで必要な kernel moduleがロードされるようにする:


enable_fuse="YES"

これで次にリブートすれば自動的にロードされるが、それまではロードされないので手動でロード:


sudo /usr/local/etc/rc.d/fuse start

一般ユーザが実行できるようにする

/dev/fuseへのアクセス許可

何も設定しないと、 /dev/fuse* というディバイスには root:operatorしかアクセスできない。 sshfsを使うユーザを operatorグループに入れれば済む話ではあるが、あまりスマートではないので、 devfsの設定で /dev/fuse* を 666にする。

  1. /dev/devfs.rulesに以下を記述:
    
    [devfsrules_world_writablle=10]
    add path 'fuse*' mode 666
    
  2. /etc.rc.confに以下を記述:
    
    devfs_system_ruleset="devfsrules_world_writable"
    
  3. 本来ならばここで
    sudo /etc/rc.d/devfs restart
    を実行すればよいはずなのだが、なぜか 手元の FreeBSD 6.2-STABLE (ちょっと前のやつ) だとここでフリーズしてしまったので、やむなく再起動。再起動後は特に問題ない模様。

一般ユーザでも マウントできるようにする

sudo sysctl vfs.usermount=1
とすればとりあえず使えるようになるが、 OSを再起動するとこの設定が失われるので、 /etc/sysctl.confに以下を記述:

vfs.usermount=1

マウントの実行

ここまですれば準備完了。たとえば、 remote.example.comに userという名前のユーザでログインした時のホームディレクトリを、クライアントの /home/user/ssh/remoteにマウントする場合は、
sshfs user@remote.example.com: /home/user/ssh/remote
などとすればよい。

このようにしてマウントすると、後は普通にこのディレクトリの下のファイルにアクセスすることができる。エディタでの編集とか、その他のプログラムによるアクセスについても、概ね問題なさそう。ただし、 tail -f は期待したような動作にはならなかったが、これはもしかするとマウントする時のオプション指定でどうにかなるのかもしれない。

アンマウント

とりあえず使い終わったらアンマウントしておくのが賢明だと思う:

umount /home/user/ssh/remote

問題点

マウントしたままでほったらかしにしておくと、どうもよろしくないようだ。おそらく接続制がなくなったりしたタイミングでおかしなことになっているのではないかと思うが、しばらくほったらかしにしていたマウント・ポイントの下のファイルなどにアクセスしようとすると、アクセスしに行ったまま無反応になってしまうという状態が何度か観測されている。丁度 NFSがおかしなことになった時のような感じといえば、分かる人には分かるのではないだろうか。ということで、 NFSを AMD (Auto-Mount Daemon) で使うような感じで sshfsを使う方法を模索したいと思うのだが、ちょっと時間がないのでとりあえず先延ばし。

後、コマンド・ラインの引数のチェックが甘いのか、いろいろと試している時にとんちんかんなオプションを指定した時も、マウントできたふりをしつつ、実際にはうまく行っていなかったようで、マウント・ポイント以下へのアクセスで固まってしまった。こういうミスを防ぐためにも AMDが使えると便利だと思う。

結論

ちゃんと動いている時は激しく便利。