Как я могу использовать inotify или именованные каналы по SSHFS?

12

Спасибо sshfsволшебство, я могу смонтировать мой домашний каталог с удаленного сервера с

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

Оптимистично, я думал , что я установил местный inotify-hook на ~/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 Но тогда клиент (локальный компьютер) не будет знать об изменениях. Я отредактировал, чтобы добавить немного об этом.
Анко
В целом, сетевые файловые системы не способны обеспечить полную прозрачность, они часто нарушают абстракцию. Требуется усовершенствование SSHFS - когда вы запускаете inotify локально, он должен отправить запрос на сервер, который запускает inotify там и передает уведомления обратно клиенту.
Бармар
ты проверил Gamin?
Янус Троелсен
@JanusTroelsen Я не слышал о Гамине. Согласно странице обзора , он также использует inotify. Это полезно для распространения таких обновлений по сети?
Анко

Ответы:

10

Файловая система SSHFS построена поверх протокола SFTP . SFTP предоставляет только средства для манипулирования файлами «классическими» способами; клиент отправляет запрос на сервер (перечисляет каталог, загружает файл и т. д.), а сервер отвечает. В этом протоколе нет возможности для сервера самопроизвольно уведомить клиента о том, что что-то произошло.

Это делает невозможным предоставление таких средств, как inotify внутри SSHFS. Можно было бы расширить SSHFS собственными расширениями или дополнить его полноценным SSH-соединением; но я не знаю ни одного такого расширения SSHFS.

Именованные каналы не могут быть реализованы поверх SSHFS по той же причине. NFS, классическая сетевая файловая система, также не имеет возможности поддерживать кросс-машины с именованными каналами. В сетевой файловой системе именованный канал создает независимую точку связи на каждой машине, на которой он монтируется (в дополнение к серверу).

FAM (аналог inotify в SGI IRIX, который был портирован на Linux) предоставляет демон, который позволяет отправлять уведомления по сети. Linux довольно устарел с FAM с тех пор, как на сцену вышла inotify, поэтому я не знаю, будет ли проще запустить FAM, чем использовать собственную систему уведомлений для конкретных приложений. Вам нужно будет настроить переадресацию портов через SSH или установить VPN для защиты сетевого соединения для FAM и NFS.

Если вы решите свернуть свой собственный, предполагая, что вы в порядке предоставления доступа к оболочке клиента, довольно легко запустить монитор inotify от имени клиента: клиент должен открыть соединение SSH и выполнить inotifywaitкоманду на сервере. , анализируя его вывод на клиенте. Вы можете настроить главное соединение, чтобы ускорить открытие множества соединений от одного и того же клиента к одному и тому же серверу.

Жиль "ТАК - перестань быть злым"
источник
1
по крайней мере, qemu поддерживает своего рода межмашинный канал: канал для виртуального гостя
Янус Троелсен