背景:こんな用途に便利
- 見たいデータがいくつかの計算機に散らばっている
- NFSを立ち上げるのは面倒(root権限が要るしUIDまわりとかも面倒)
こんな時に、手元の計算機にsshfsで所望のフォルダ/ディレクトリをマウントすると便利。
まず、ファイルは分散させたくない。計算は通常ローカルネットワークにあるワークステーション、クラスター計算機や使っているスーパーコンピューター(以降リモート計算機)上にあって、手元の計算機(以降ローカル計算機)は専らこうした計算機への端末になっていたり、簡単な解析用になっていたりする。
解析をローカル計算機でやる場合、リモート計算機からファイルを持ってこようとすると、同じ内容のデータが複数の計算機に置かれて、管理の面から不適当。あと、逐一sftpで所望のディレクトリまでアクセスして取ってくるのは面倒だし、rsyncで一括でコピーすると、余分な容量を占有する。
リモート計算機で解析を行おうとすると、いちいちリモート計算機に色々なアプリを入れないといけないし、ルートユーザーにいちいち頼むのも億劫。、場合によってはアプリのインストールが強く環境に依存していて困難(例えば、paraviewとか)だったり大変な手間になる事がある。
というようなケースでは、ローカル計算機にリモート計算機のフォルダ/ディレクトリをマウントすれば、多くの問題が解決する。データはリモートから動かさなくて良いし、アプリはローカル計算機にのみ頑張って入れればよい。ローカル計算機のルート権限があればビルドが面倒なアプリ(例えば、paraviewとか)も、yum
なりapt
なりzypper
なりで容易にインストールできることも多い。
これをNFSで実行しようとすると、先ずリモート計算機上でNFSサーバーを立ち上げなければならないし、あとUIDとローカル計算機のユーザーをどう対応させるのか みたいな面倒が発生する。そこでsshfsを使うと、良い。基本的にsshのプロトコルを使っているので、sshサーバーが立ち上がっていれば良いはず。ユーザーとの紐づけもsshでのアクセスと同じ。
sshfsでのマウント
# マウント
sshfs user@192.168.x.y:/remote/directory/you/want/to/mount /local/directory/to/access
# アンマウント
fusermount -u /local/directory/to/access
# Read onlyのマウント
sshfs user@hoge:/hoge /hoge -o ro
ファイルを書き換えてしまうのが怖い場合はread-onlyでマウントできる。
ポート番号も指定できるし、鍵も使える。
/etc/fstab
に書いておけば、起動時に自動マウントもできるみたいだけれど、鍵認証かつパスワード無しにしておく必要があるので、ローカル計算機を起動した後に手動でマウントしている。
マウントポイントよりも深い方向のディレクトリしかみれないせいか、シンボリックリンク等でより浅いディレクトリ(例えばwork/data用にマウントしてある違う物理ディスクとか)にはアクセスできない。ここは同じくsshベースのsftpを使った時と挙動が異なる。