Bagaimana cara saya menggunakan pipa inotify atau bernama di atas SSHFS?

12

Terima kasih sshfssulap, saya bisa memasang dir rumah saya dari server jarak jauh dengan

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

Optimis, saya pikir saya akan menetapkan lokal inotify-hook di ~/remote/logFile(dalam sshfsme-mount) sehingga program lokal dapat bereaksi terhadap perubahan log terpencil.

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

Tidak ada yang terjadi . inotifywaitdiam kecuali saya touchfile secara lokal. Menulis ke pipa bernama juga gagal.

Kenapa ini?
Bagaimana saya bisa menjembatani kesenjangan ini?

Saya bisa menjalankannya inotifywaitdi remote, meretas sistem perubahan strategi serialisasi file dan menjaga koneksi ke lokal, tapi kemudian saya pada dasarnya mengimplementasikan ulang SSHFS . Dan itu benar-benar membunuh abstraksi.

Anko
sumber
2
Saya tidak berpikir ada cara apa pun inotifypada sistem lokal dapat mendeteksi perubahan pada sistem file jarak jauh. Kernel lokal berada di luar loop dalam perubahan tersebut. Anda harus berjalan inotifywaitdi server, bukan klien.
Barmar
@Barmar Tetapi klien (mesin lokal) tidak akan tahu tentang perubahan. Saya diedit untuk menambahkan sedikit tentang itu.
Anko
Secara umum, sistem file jaringan tidak dapat memberikan transparansi lengkap, mereka sering memutus abstraksi. Apa yang dibutuhkan adalah peningkatan SSHFS - ketika Anda menjalankan inotify secara lokal, ia perlu mengirim permintaan ke server, yang menjalankan inotify di sana, dan mengirimkan pemberitahuan kembali ke klien.
Barmar
apakah kamu memeriksa gamin?
Janus Troelsen
@ JanusTroelsen Saya belum pernah mendengar tentang gamin. Menurut halaman ikhtisar , itu menggunakan inotify juga. Apakah berguna untuk mendistribusikan pembaruan semacam itu melalui jaringan?
Anko

Jawaban:

10

Sistem file SSHFS dibangun di atas protokol SFTP . SFTP hanya menyediakan fasilitas untuk memanipulasi file dengan cara "klasik"; klien membuat permintaan ke server (daftar direktori, unggah file, dll.), dan server merespons. Tidak ada fasilitas dalam protokol ini untuk server secara spontan memberi tahu klien bahwa sesuatu telah terjadi.

Hal ini membuat tidak mungkin untuk menyediakan fasilitas seperti inotify di dalam SSHFS. Dimungkinkan untuk memperluas SSHFS dengan ekstensi milik, atau untuk menambahnya dengan koneksi SSH penuh; tapi saya tidak tahu ekstensi seperti itu ke SSHFS.

Pipa bernama tidak dapat diimplementasikan di atas SSHFS karena alasan yang sama. NFS, sistem file jaringan klasik, juga tidak memiliki fasilitas untuk mendukung mesin lintas bernama pipa. Pada sistem file jaringan, pipa bernama menciptakan titik komunikasi independen pada setiap mesin di mana ia dipasang (di samping server).

FAM (analog inotify dalam SGI IRIX, yang telah porting ke Linux) menyediakan daemon yang memungkinkan pemberitahuan untuk dikirim melalui jaringan. Linux agak ketinggalan FAM sejak inotify datang ke tempat kejadian, jadi saya tidak tahu apakah menjalankan FAM akan lebih mudah daripada menggulirkan sistem notifikasi khusus aplikasi Anda sendiri. Anda perlu mengatur port forwarding melalui SSH atau membuat VPN untuk mengamankan tautan jaringan untuk FAM dan NFS.

Jika Anda memilih untuk memutar sendiri, dengan asumsi bahwa Anda boleh memberikan akses shell klien, cukup mudah untuk menjalankan monitor yang tidak sah atas nama klien: minta klien membuka koneksi SSH, dan jalankan inotifywaitperintah di server , parsing outputnya pada klien. Anda dapat mengatur koneksi master untuk membuatnya lebih cepat untuk membuka banyak koneksi dari klien yang sama ke server yang sama.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
setidaknya qemu mendukung semacam pipa silang mesin: pipa untuk tamu virtual
Janus Troelsen