Mengapa tidak ada acara yang berbeda pada pemasangan NFS?

10

Beberapa waktu lalu saya perhatikan bahwa peristiwa yang dilaporkan oleh inotify berbeda ketika file disimpan ke mount NFS vs. sistem file lokal.

Bukankah seharusnya VFS yang mendasarinya memberikan tampilan operasi file yang seragam?

Berikut ini adalah jejak VIM menyimpan file di Debian 7.1 (Linux 3.2)

Pada NFS mount:

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2048 (IN_MOVE_SELF)
wd=1 mask = 4 (IN_ATTRIB)
wd=1 mask = 1024 (IN_DELETE_SELF)
wd=1 mask = 32768 )

Pada sistem file lokal

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2 (IN_MODIFY)
wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 8 (IN_CLOSE_WRITE)
wd=1 mask = 4 (IN_ATTRIB)

Menyimpan file dengan EMACS juga mengungkapkan perilaku yang berbeda

Pada NFS mount:

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2048 (IN_MOVE_SELF)

Pada sistem file lokal:

wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 16 (IN_CLOSE_NOWRITE)
wd=1 mask = 2 (IN_MODIFY)
wd=1 mask = 32 (IN_OPEN)
wd=1 mask = 2 (IN_MODIFY)
wd=1 mask = 8 (IN_CLOSE_WRITE)

Tes-tes ini tidak berjalan dengan inotify-touch.c

Eradman
sumber

Jawaban:

4

tidak mendukung dukungan NFS?

Melihat-lihat di internet akan terlihat bahwa inotify dapat mendukung NFS tetapi dengan cara yang sangat terbatas.

pameran # 1

Alasannya dijelaskan dalam Tanya Jawab StackOverflow berjudul: inotify with NFS .

kutipan dari jawaban yang diterima

inotify memerlukan dukungan dari kernel untuk bekerja. Ketika suatu aplikasi melacak suatu direktori, ia meminta kernel untuk memberitahukannya ketika perubahan itu terjadi. Ketika perubahan terjadi, selain menulis perubahan itu ke disk, kernel juga memberi tahu proses menonton.

Pada mesin NFS jarak jauh, perubahan tidak terlihat oleh kernel; itu terjadi sepenuhnya dari jarak jauh. NFS mendahului inotify dan tidak ada dukungan tingkat jaringan untuk itu di NFS, atau apa pun yang setara.

pameran # 2

Meneliti lebih banyak jika Anda melihat di FAQ inotify

T: Dapatkah saya menonton sysfs (procfs, nfs ...)?

Cukup diucapkan: ya, tetapi dengan beberapa keterbatasan. Batasan ini bervariasi di antara versi kernel dan cenderung semakin kecil. Silakan baca informasi tentang sistem file tertentu.

Jadi, apakah itu didukung?

Saya pikir pada akhirnya apa yang Anda alami adalah bahwa NFS tidak menyediakan apel untuk apel yang setara dengan semua fitur yang sama dengan sistem file yang dipasang secara lokal.

Misalnya dari utas nfs linux :

  • CIFS memiliki kemampuan pemberitahuan bawaan (pembuka kunci)
  • NFS menyediakan "sewa" untuk pemberitahuan

Intinya di sini adalah bahwa filesystem alternatif seperti CIFS dan NFS menawarkan sangat dasar, jika ada dukungan langsung untuk memberitahukan.

Status NFS v4

kutipan dari artikel IBM tentang status NFS v4

NFS versi 4 menyediakan protokol untuk klien untuk menetapkan atau membangun kembali negara, dan mengaitkan kepemilikan operasi stateful server berikutnya ke negara-negara yang sebelumnya didirikan. Untuk menyelesaikan masalah klien yang tidak ada, klien NFS versi 4 harus secara rutin memperbarui keadaan dalam waktu sewa yang ditentukan server. Setelah waktu habis sewa, server dapat melepaskan sumber daya untuk klien dan membuatnya tersedia untuk aplikasi lain.

  • Seorang klien mendapatkan atribut waktu habis sewa yang ditentukan server dengan mengeluarkan operasi getattr. getattr bukan operasi stateful, sehingga tidak memerlukan negara sebelumnya untuk didirikan. Operasi getattr dapat mendahului operasi setclientid atau setclientid_confirm.
  • Lihat atribut situs leasetime server NFS untuk menetapkan dan menyetel periode waktu sewa. *
slm
sumber
3
OP tampaknya melihat peristiwa di NFS, mereka hanya berbeda dari yang terlihat di sistem file lokal. Pertanyaan dan jawaban yang tertaut tampaknya menunjukkan tidak adanya inotifyperistiwa di NFS.
iruvar