เหตุใดจึงแยกแยะเหตุการณ์ต่าง ๆ ในการเมาท์ NFS ได้?


10

บางเวลาที่ผ่านมาฉันสังเกตเห็นว่าเหตุการณ์ที่รายงานโดย inotify นั้นแตกต่างกันเมื่อไฟล์ถูกบันทึกในการเมานต์ NFS กับระบบไฟล์โลคัล

VFS พื้นฐานไม่ควรให้มุมมองที่เหมือนกันของการทำงานของไฟล์หรือไม่?

ต่อไปนี้เป็นร่องรอยของ VIM ที่บันทึกไฟล์ใน Debian 7.1 (Linux 3.2)

บนเมานต์ 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 )

บนระบบไฟล์โลคัล

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)

การบันทึกไฟล์ด้วย EMACS ยังเผยให้เห็น beahvior ที่แตกต่างกัน

บนเมานต์ NFS:

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

บนระบบไฟล์โลคัล:

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)

การทดสอบเหล่านี้ไม่ทำงานกับinotify-touch.c

คำตอบ:


4

inotify NFS รองรับ?

เมื่อมองไปรอบ ๆ เน็ตมันจะปรากฏว่า inotify อาจรองรับ NFS แต่ในแบบ จำกัด มาก

จัดแสดง # 1

เหตุผลที่จะมีการอธิบายในเรื่องนี้ StackOverflow Q & A หัวข้อ: inotify กับ NFS

ตัดตอนมาจากคำตอบที่ยอมรับ

inotify ต้องการการสนับสนุนจากเคอร์เนลในการทำงาน เมื่อแอปพลิเคชันติดตามไดเรกทอรีมันจะขอให้เคอร์เนลแจ้งให้ทราบเมื่อมีการเปลี่ยนแปลงเหล่านั้นเกิดขึ้น เมื่อการเปลี่ยนแปลงเกิดขึ้นนอกเหนือจากการเขียนการเปลี่ยนแปลงเหล่านั้นไปยังดิสก์เคอร์เนลจะแจ้งให้ทราบถึงกระบวนการเฝ้าดู

บนเครื่อง NFS ระยะไกลการเปลี่ยนแปลงจะไม่สามารถมองเห็นเคอร์เนล มันเกิดขึ้นจากระยะไกลทั้งหมด NFS คาดการณ์ไม่ได้ก่อนหน้านี้และไม่มีการสนับสนุนระดับเครือข่ายใน NFS หรือสิ่งอื่นใดที่เทียบเท่า

จัดแสดง # 2

ค้นคว้าเพิ่มเติมอีกเล็กน้อยหากคุณดูในคำถามที่พบบ่อยที่ไม่ได้ระบุ

ถาม: ฉันสามารถดู sysfs (procfs, nfs ... ) ได้หรือไม่

พูดง่าย: ใช่ แต่มีข้อ จำกัด ข้อ จำกัด เหล่านี้แตกต่างกันไประหว่างรุ่นเคอร์เนลและมักจะเล็กลง โปรดอ่านข้อมูลเกี่ยวกับระบบไฟล์เฉพาะ

ดังนั้นมันจึงรองรับ?

ฉันคิดว่าในที่สุดสิ่งที่คุณกำลังประสบอยู่ก็คือ NFS ไม่ได้ให้แอปเปิ้ลแก่แอปเปิ้ลที่มีคุณสมบัติเทียบเท่ากับระบบไฟล์ที่ติดตั้งในเครื่อง

ตัวอย่างจากnfs linux thread :

  • CIFS มีความสามารถในการแจ้งเตือนในตัว (oplocks)
  • NFS จัดเตรียม "สัญญาเช่า" สำหรับการแจ้งเตือน

จุดที่นี่คือระบบไฟล์ทางเลือกเช่น CIFS และ NFS เสนอขั้นพื้นฐานมากหากมีการสนับสนุนโดยตรงเพื่อ inotify

สถานะ NFS v4

ตัดตอนมาจากบทความ IBM เกี่ยวกับสถานะ NFS v4

NFS เวอร์ชัน 4 จัดเตรียมโปรโตคอลสำหรับไคลเอ็นต์เพื่อสร้างหรือสร้างสถานะอีกครั้งและเชื่อมโยงความเป็นเจ้าของของการดำเนินการ stateful เซิร์ฟเวอร์ที่ตามมาเข้ากับสถานะที่กำหนดไว้ก่อนหน้านี้ เพื่อแก้ไขปัญหาไคลเอ็นต์ขาดไคลเอ็นต์ NFS เวอร์ชัน 4 ต้องรีเฟรชสถานะเป็นประจำภายในเวลาการเช่าที่ระบุโดยเซิร์ฟเวอร์ เมื่อหมดเวลาการเช่าเซิร์ฟเวอร์อาจปล่อยทรัพยากรสำหรับลูกค้าและทำให้พร้อมใช้งานสำหรับแอปพลิเคชันอื่น

  • ไคลเอนต์ได้รับแอตทริบิวต์การหมดเวลาการเช่าที่ระบุโดยเซิร์ฟเวอร์โดยการดำเนินการ getattr getattr ไม่ใช่การดำเนินการ stateful ดังนั้นจึงไม่จำเป็นต้องสร้างสถานะก่อนหน้า การดำเนินการ getattr อาจนำหน้าการดำเนินการ setclientid หรือ setclientid_confirm
  • อ้างถึงแอ็ตทริบิวต์ไซต์ leasetime ของเซิร์ฟเวอร์ NFS สำหรับการตั้งค่าและการปรับช่วงเวลาการเช่า * * * *

3
OP ดูเหมือนว่าจะเห็นเหตุการณ์ใน NFS พวกเขาต่างจากที่เห็นในระบบไฟล์โลคัล คำถามและคำตอบที่เชื่อมโยงดูเหมือนจะบ่งบอกว่าไม่มีinotifyเหตุการณ์ใน NFS
iruvar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.