sshfsを使おう
Linuxには標準でFilesystem in Userspace (FUSE)と呼ばれる機構があり、比較的気軽に「ファイルシステムのように見える」何かをマウントすることができます。特に、sshfsを使うとスパコン等で計算した結果のファイルを操作するのに便利なのですが、意外と知られていないようなので紹介します。
はじめに: 非Linuxユーザーの人へ
FUSEは非常に便利な仕組みであるため、他のOSでも同様の仕組みを作る試みがあります。Windows用にDokan, Mac用にmacFUSEがある他、Windowsでwslを動かしている人は標準でFUSEを利用したり、wsl上でマウントしたディレクトリにホストWindowsからアクセスすることができます(後述)。ここに書かれているsshfsの用途は他のOSでも同様に利用が可能です。
使い方
インストールは、Ubuntuであれば
sudo apt install sshfs
でOKです。
リモートの計算環境に、sshでログインできる状態にあるとします。以下、説明のためこのリモートの計算環境をfoo.example.comとしておきます。このとき、
mkdir -p ~/mnt/foo # 空ディレクトリを作成しておく
sshfs foo.example.com: ~/mnt/foo
とsshfsを実行すると、~/mnt/fooの下にfoo.example.com:の下のホームディレクトリの中身が再現されます。ここにファイルを書き込むとリモートに書き込まれ、ここからファイルを読むとリモートから読まれます。
こうしてマウントしたファイルを、ローカルのファイルとほとんど同じように使えます。桜庭と同業者の方でしたら、ローカルのvmdやpymolなどのビューワで見てやることができるため、X windowを飛ばす場合に比べて格段にレスポンスが良くなります。一方で、ローカルのメモリ容量などに縛られる、ファイルアクセスのたびに帯域を圧迫する、といったデメリットがあります。
アンマウントする場合は
fusermount -u ~/mnt/foo
を使います。特定のプロセスがファイルをロックしていたりするとfusermount -uが失敗しますが、その場合は
fusermount -uz ~/mnt/foo
とlazy unmountにするとアンマウントできると思います。
注意点
sshfsではデフォルトでは絶対アドレスを使っているsymbolic linkの先が追えません。これを追跡させるにはfollow_symlinksを使います。
sshfs -o follow_symlinks foo.example.com: ~/mnt/foo
スパコン利用時には巨大ファイル置き場として/largeとか/diskとかいった別ディレクトリが指定されることが多いので、こういう手法が必要になることも多いのではと思います。follow_symlinksを使っている状況でln -sを使おうとするとエラーメッセージがでるけどsymlink作成に成功する、というかなり変な状況になります。
ファイル操作はある程度キャッシュされるため、変更がリモートに反映されるまで時間が掛かることがあります。いやならsync(1)しましょう。
wslでマウントしたファイルをホストから触る
mkdir ~/mnt/somewhere
sshfs -o follow_symlinks,allow_other foo.example.com: ~/mnt/foo
とすると、\\wsl$\経由で~/mnt/fooにホストからアクセスすることができます。ただし、-o allow_otherを利用するには、/etc/fuse.confの
# user_allow_other ←これ
の#を除いてやる必要があります。