Làm cách nào để sử dụng các ống dẫn inotify hoặc được đặt tên qua SSHFS?


12

Cảm ơn sshfsma thuật, tôi có thể gắn thư mục nhà của mình từ một máy chủ từ xa với

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

Một cách lạc quan, tôi nghĩ rằng tôi muốn thiết lập một địa phương inotify-hook trên ~/remote/logFile(trong sshfsgắn kết) do đó, một chương trình địa phương có thể phản ứng với những thay đổi đăng nhập từ xa.

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

Không có gì xảy ra . inotifywaitlà im lặng trừ khi tôi touchtập tin cục bộ. Viết vào một ống có tên thất bại tương tự.

Tại sao lại thế này?
Làm thế nào tôi có thể thu hẹp khoảng cách này?

Tôi có thể chạy inotifywaittrên điều khiển từ xa, hack chiến lược tuần tự hóa thay đổi hệ thống tệp và duy trì kết nối với cục bộ, nhưng về cơ bản, tôi đang thực hiện lại SSHFS . Và nó hoàn toàn giết chết sự trừu tượng.


2
Tôi không nghĩ có bất kỳ cách nào mà inotifytrên hệ thống cục bộ có thể phát hiện các thay đổi trên hệ thống tệp từ xa. Hạt nhân cục bộ nằm ngoài vòng lặp trong những thay đổi đó. Bạn cần chạy inotifywaittrên máy chủ, không phải máy khách.
Barmar

@Barmar Nhưng sau đó, khách hàng (máy cục bộ) sẽ không biết về các thay đổi. Tôi chỉnh sửa để thêm một chút về điều đó.
Anko

Nói chung, các hệ thống tệp mạng không thể cung cấp sự minh bạch hoàn toàn, chúng thường phá vỡ sự trừu tượng. Điều cần thiết là một sự cải tiến cho SSHFS - khi bạn chạy inotify cục bộ, nó cần gửi yêu cầu đến máy chủ, nó chạy inotify ở đó và gửi thông báo lại cho máy khách.
Barmar

bạn đã kiểm tra gamin chưa?
Janus Troelsen

@JanusTroelsen Tôi chưa nghe nói về gamin. Theo trang tổng quan của nó , nó cũng sử dụng inotify. Có hữu ích để phân phối các bản cập nhật như vậy qua mạng không?
Anko

Câu trả lời:


10

Hệ thống tập tin SSHFS được xây dựng dựa trên giao thức SFTP . SFTP chỉ cung cấp các phương tiện để thao tác với các tệp theo cách cổ điển của Croatia; khách hàng đưa ra yêu cầu đến máy chủ (liệt kê một thư mục, tải lên tệp, v.v.) và máy chủ trả lời. Không có cơ sở nào trong giao thức này để máy chủ tự động thông báo cho khách hàng rằng có chuyện gì đó đã xảy ra.

Điều này khiến cho không thể cung cấp một phương tiện như inotify bên trong SSHFS. Có thể mở rộng SSHFS bằng các tiện ích mở rộng độc quyền hoặc bổ sung nó bằng kết nối SSH chính thức; nhưng tôi không biết bất kỳ tiện ích mở rộng nào như vậy đối với SSHFS.

Các đường dẫn được đặt tên không thể được triển khai trên SSHFS vì lý do tương tự. NFS, hệ thống tập tin nối mạng cổ điển, cũng không có bất kỳ cơ sở nào hỗ trợ các máy có tên là ống. Trên hệ thống tập tin được nối mạng, một đường ống có tên tạo ra một điểm giao tiếp độc lập trên mỗi máy được gắn (ngoài máy chủ).

FAM (tương tự inotify trong SGI IRIX, đã được chuyển sang Linux) cung cấp một trình nền cho phép các thông báo được gửi qua mạng. Linux đã không chấp nhận FAM kể từ khi inotify xuất hiện, vì vậy tôi không biết nếu chạy FAM sẽ dễ dàng hơn việc sử dụng hệ thống thông báo dành riêng cho ứng dụng của bạn. Bạn cần thiết lập một số cổng chuyển tiếp qua SSH hoặc thiết lập VPN để bảo mật liên kết mạng cho FAM và NFS.

Nếu bạn chọn tự cuộn, giả sử rằng bạn ổn với việc cấp quyền truy cập shell cho máy khách, thì việc chạy một màn hình inotify thay cho máy khách là khá dễ dàng: hãy để máy khách mở kết nối SSH và chạy inotifywaitlệnh trên máy chủ , phân tích đầu ra của nó trên máy khách. Bạn có thể thiết lập kết nối chính để mở nhanh hơn nhiều kết nối từ cùng một máy khách đến cùng một máy chủ.


1
ít nhất qemu hỗ trợ một loại ống máy chéo: một đường ống cho khách ảo
Janus Troelsen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.