Як я можу використовувати інотифіковані або названі труби над 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 - коли ви запускаєте ініціювати локально, він повинен надіслати запит на сервер, який працює там, ініціює і передає сповіщення клієнту.
Бармар

ви перевірили gamin?
Янус Троельсен

@JanusTroelsen Я не чув про гамін. Згідно з його оглядовою сторінкою , він також використовує ініціативу. Чи корисно для поширення таких оновлень по мережі?
Анко

Відповіді:


10

Файлова система SSHFS побудована поверх протоколу SFTP . SFTP надає лише засоби для управління файлами "класичними" способами; клієнт робить запит на сервер (перераховує каталог, завантажує файл тощо), і сервер відповідає. У цьому протоколі немає можливості сервера спонтанно повідомити клієнта про те, що щось сталося.

Це унеможливлює забезпечення таких засобів, як ініціація всередині SSHFS. Можна було б розширити SSHFS власними розширеннями або доповнити його повноцінним SSH-з'єднанням; але я не знаю жодного такого розширення до SSHFS.

Названі труби не можуть бути реалізовані поверх SSHFS з тієї ж причини. NFS, класична мережева файлова система, також не має можливості підтримувати перехресні машини з назвою pipe. У мережевій файловій системі названа труба створює незалежну точку зв'язку на кожній з машин, на якій вона встановлена ​​(крім сервера).

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

Якщо ви вирішите зробити свій власний, припускаючи, що ви все в порядку з наданням доступу до оболонки клієнтів, запустити монітор ініціації від імені клієнта досить просто: запропонуйте клієнту відкрити з'єднання SSH та запустити inotifywaitкоманду на сервері , аналізуючи свій вихід на клієнті. Ви можете встановити головне з'єднання, щоб швидше відкривати безліч з'єднань від одного клієнта до одного сервера.


1
принаймні qemu підтримує свого роду перехресну машину: труба для віртуального гостя
Янус Троельсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.