リモートで計算をする人へのsshfsのすすめ

2022/07/27

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:の下のホームディレクトリの中身が再現されます。ここにファイルを書き込むとリモートに書き込まれ、ここからファイルを読むとリモートから読まれます。

こうしてマウントしたファイルを、ローカルのファイルとほとんど同じように使えます。桜庭と同業者の方でしたら、ローカルのvmdpymolなどのビューワで見てやることができるため、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 ←これ

#を除いてやる必要があります。