Sshfs

如何通過 SSHFS 使用 inotify 或命名管道?

  • July 15, 2014

謝謝sshfs魔術,我可以從遠端伺服器掛載我的主目錄

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

樂觀地說​​,我想我會設置一個本地inotify掛鉤~/remote/logFile(在掛載中sshfs),這樣本地程序就可以對遠端日誌更改做出反應。

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。它完全扼殺了抽象。

SSHFS 文件系統建立在SFTP協議之上。SFTP 僅提供以“經典”方式操作文件的工具;客戶端向伺服器發出請求(列出目錄、上傳文件等),伺服器做出響應。這個協議中沒有讓伺服器自發通知客戶端發生了什麼事的工具。

這使得無法在 SSHFS 中提供諸如 inotify 之類的工具。可以使用專有擴展來擴展 SSHFS,或者使用成熟的 SSH 連接對其進行補充;但我不知道 SSHFS 的任何此類擴展。

出於同樣的原因,命名管道不能在 SSHFS 之上實現。NFS,經典的網路文件系統,也沒有任何支持跨機器命名管道的工具。在網路文件系統上,命名管道在安裝它的每台機器(除了伺服器)上創建一個獨立的通信點。

FAM(SGI IRIX 中的 inotify 模擬,已移植到 Linux)提供了一個允許通過網路發送通知的守護程序。自從 inotify 出現以來,Linux 已經相當棄用 FAM,所以我不知道讓 FAM 執行是否比滾動您自己的特定於應用程序的通知系統更容易。您需要通過 SSH 設置一些埠轉發或建立 VPN 以保護 FAM 和 NFS 的網路連結。

如果您選擇自己滾動,假設您可以授予客戶端 shell 訪問權限,那麼代表客戶端執行 inotify 監視器相當容易:讓客戶端打開 SSH 連接,然後inotifywait在伺服器上執行命令,在客戶端解析其輸出。您可以設置主連接,以便更快地打開從同一客戶端到同一伺服器的多個連接。

引用自:https://unix.stackexchange.com/questions/144486