SSHFSでinotifyまたは名前付きパイプを使用するにはどうすればよいですか?


12

sshfs魔法のおかげで、リモートサーバーからホームディレクトリをマウントできます。

sshfs user@server:/home/user ~/remote

楽観的には、ローカルプログラムがリモートログの変更に対応できるように、ローカルinotifyフック~/remote/logFilesshfsマウント内に)設定すると思いました。

cd ~/remote
touch logFile                                # create remote file
inotifywait logFile &                        # set up local inotify-hook
ssh user@server -x touch /home/user/logFile  # touch file from remote

何も起こりません。ローカルにファイルがinotifywaitない限りtouch、サイレントです。名前付きパイプへの書き込みも同様に失敗します。

どうしてこれなの?
どうすればこのギャップを埋めることができますか?

私は可能性が実行しinotifywait、リモートのファイルシステム変更のシリアル化戦略をハックし、地元への接続を維持したが、その後、私はよ基本的にSSHFSを再実装します。そして、それは抽象化を完全に殺します。


2
inotifyローカルシステムでリモートファイルシステムの変更を検出できる方法はないと思います。これらの変更では、ローカルカーネルがループから抜けています。inotifywaitクライアントではなくサーバーで実行する必要があります。
Barmar

@Barmarしかし、クライアント(ローカルマシン)は変更を認識しません。私はそれについて少し追加するために編集しました。
Anko 14

一般に、ネットワークファイルシステムは完全な透過性を提供することができず、しばしば抽象化を壊します。SSHFSの拡張機能が必要です。inotifyをローカルで実行すると、サーバーにリクエストが送信され、サーバーがinotifyを実行し、通知をクライアントに返します。
Barmar 14

あなたはガーミンをチェックしましたか?
Janus Troelsen、2015

@JanusTroelsenガーミンは聞いたことがありません。概要ページによれば、inotifyも使用しています。このような更新をネットワーク経由で配布するのに役立ちますか?
あんこ

回答:


10

SSHFSファイルシステムは、SFTPプロトコルの上に構築されてます。SFTPは、「クラシック」な方法でファイルを操作する機能のみを提供します。クライアントがサーバーに要求を出し(ディレクトリの一覧表示、ファイルのアップロードなど)、サーバーが応答します。このプロトコルには、サーバーが何かが発生したことをクライアントに自発的に通知する機能はありません。

これにより、SSHFS内でinotifyなどの機能を提供できなくなります。独自の拡張機能でSSHFSを拡張したり、本格的なSSH接続でそれを補完したりすることが可能です。しかし、私はSSHFSへのそのような拡張機能を知りません。

名前付きパイプは、同じ理由でSSHFSの上に実装することはできません。古典的なネットワークファイルシステムであるNFSには、マシン間の名前付きパイプをサポートする機能もありません。ネットワーク化されたファイルシステムでは、名前付きパイプは、サーバーに加えて、それがマウントされている各マシン上に独立した通信ポイントを作成します。

FAM(Linuxに移植されたSGI IRIXのinotifyアナログ)は、通知をネットワーク経由で送信できるようにするデーモンを提供します。Linuxは、inotifyが登場して以来、FAMをかなり非推奨にしています。そのため、FAMを実行する方が、独自のアプリケーション固有の通知システムをロールするよりも簡単かどうかはわかりません。FAMとNFSのネットワークリンクを保護するには、SSH経由でポート転送を設定するか、VPNを確立する必要があります。

クライアントにシェルアクセスを与えることに問題がないと想定して、独自にロールすることを選択した場合、クライアントの代わりにinotifyモニターを実行するのはかなり簡単です。クライアントにSSH接続を開いinotifywaitて、サーバーでコマンドを実行します。 、クライアントでその出力を解析します。マスター接続セットアップして、同じクライアントから同じサーバーへの多くの接続をより速く開くことができます。


1
少なくともqemuは一種のクロスマシンパイプをサポートしています:仮想ゲストへのパイプ
Janus Troelsen 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.