Tại sao các sự kiện inotify khác nhau trên một mount NFS?


10

Cách đây một thời gian, tôi nhận thấy rằng các sự kiện được báo cáo bởi inotify là khác nhau khi tệp được lưu vào một mount NFS so với một hệ thống tệp cục bộ.

VFS cơ bản không nên cung cấp một cái nhìn thống nhất về các hoạt động tập tin?

Sau đây là dấu vết của việc lưu VIM một tệp trong Debian 7.1 (Linux 3.2)

Trên giá treo NFS:

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 )

Trên hệ thống tệp cục bộ

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)

Lưu tệp bằng EMACS cũng cho thấy sự khác biệt

Trên giá treo NFS:

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

Trên hệ thống tệp cục bộ:

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)

Những bài kiểm tra này chạy với inotify-touch.c

Câu trả lời:


4

hỗ trợ NFS?

Nhìn quanh mạng có vẻ như inotify có thể hỗ trợ NFS nhưng trong một thời gian rất hạn chế.

triển lãm 1

Lý do được giải thích trong Hỏi & Đáp về StackOverflow này có tiêu đề: inotify với NFS .

trích từ câu trả lời được chấp nhận

inotify yêu cầu hỗ trợ từ kernel để làm việc. Khi một ứng dụng theo dõi một thư mục, nó sẽ yêu cầu kernel thông báo cho nó khi những thay đổi đó xảy ra. Khi thay đổi xảy ra, ngoài việc ghi những thay đổi đó vào đĩa, kernel cũng thông báo cho quá trình xem.

Trên máy NFS từ xa, sự thay đổi không hiển thị đối với kernel; nó xảy ra hoàn toàn từ xa. NFS có trước inotify và không có hỗ trợ cấp độ mạng cho nó trong NFS, hoặc bất cứ điều gì tương đương.

triển lãm số 2

Nghiên cứu thêm một chút nếu bạn xem trong Câu hỏi thường gặp về inotify

H: Tôi có thể xem sysfs (Procfs, nfs ...) không?

Nói một cách đơn giản: có, nhưng với một số hạn chế. Những hạn chế này khác nhau giữa các phiên bản kernel và có xu hướng nhỏ hơn. Vui lòng đọc thông tin về các hệ thống tập tin cụ thể.

Vậy nó có được hỗ trợ không?

Tôi nghĩ rằng cuối cùng những gì bạn trải nghiệm là NFS không cung cấp một quả táo tương đương với tất cả các tính năng giống như các hệ thống tệp được gắn cục bộ.

Ví dụ từ một chủ đề linux nfs :

  • CIFS có các khả năng thông báo được tích hợp sẵn (oplocks)
  • NFS cung cấp "hợp đồng thuê" để thông báo

Vấn đề ở đây là hệ thống tập tin thay thế như CIFS và NFS cung cấp rất cơ bản, nếu có hỗ trợ trực tiếp để inotify.

Trạng thái NFS v4

trích từ bài viết của IBM về trạng thái NFS v4

NFS phiên bản 4 cung cấp một giao thức cho máy khách để thiết lập hoặc thiết lập lại trạng thái và liên kết quyền sở hữu các hoạt động trạng thái máy chủ tiếp theo với các trạng thái được thiết lập trước đó. Để giải quyết vấn đề máy khách vắng mặt, máy khách NFS phiên bản 4 phải thường xuyên làm mới trạng thái trong thời gian thuê do máy chủ chỉ định. Khi hết thời gian thuê, máy chủ có thể giải phóng tài nguyên cho máy khách và cung cấp chúng cho các ứng dụng khác.

  • Một khách hàng có được thuộc tính hết thời gian thuê do máy chủ chỉ định bằng cách phát hành một hoạt động getattr. getattr không phải là một hoạt động trạng thái, do đó nó không yêu cầu trạng thái trước được thiết lập. Một hoạt động getattr có thể đi trước một hoạt động setclientid hoặc setclientid_conf Confirm.
  • Tham khảo thuộc tính trang web thời gian cho máy chủ của NFS để cài đặt và điều chỉnh khoảng thời gian thuê. *

3
OP dường như đang nhìn thấy các sự kiện trên NFS, chúng chỉ khác với các sự kiện được thấy trên hệ thống tệp cục bộ. Câu hỏi và câu trả lời được liên kết dường như cho thấy sự vắng mặt của inotifycác sự kiện trên NFS.
iruvar
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.