การดำเนินการข้อมูลเมตาของระบบไฟล์ใดบ้างที่ถูกเจอร์นัลใน ext4 & xfs


9

ฉันไม่สามารถหาคำตอบที่เรียบง่ายและตรงไปตรงมาเกี่ยวกับการดำเนินการข้อมูลเมตาของระบบไฟล์ที่ยังคงมีอยู่ในวารสารระบบไฟล์ของ ext4 & xfs โปรดทราบว่าฉันไม่ได้สอบถามเกี่ยวกับสิ่งที่ POSIX ประกาศว่าเป็น "atomic" ฉันกังวลมากขึ้นเกี่ยวกับชุดย่อยของการดำเนินการของระบบไฟล์อะตอมมิกที่มีความทนทานอย่างมีประสิทธิภาพโดยอาศัยการรันด้วยเจอร์นัลที่เปิดใช้งานโดยไม่ต้องงอไปข้างหลังและfsync(2)ตลอดเวลา

การดำเนินการฉันค่อนข้างแน่นอน:

  • creat(2)
  • link(2)
  • unlink(2)
  • rename(2)
  • mkdir(2)
  • rmdir(2)

การดำเนินการฉันไม่แน่ใจทั้งหมดเกี่ยวกับ:

  • symlink(2)

symlink(2)กรณีเป็นส่วนใหญ่หนักใจเนื่องจากมีไม่ดูเหมือนจะเป็นวิธีการใด ๆ ที่จะตรงไปตรงมา fsync(2)หรือfdatasync(2)datablocks พื้นฐานที่จัดเก็บเนื้อหาของ symlink ที่ รู้ว่าวารสารดูแลเรื่องนี้สำหรับฉันจะบรรเทา

คำตอบ:


1

สำหรับเหตุผลด้านประสิทธิภาพ ext4 โดยค่าเริ่มต้นจะเขียนข้อมูลเมตาของระบบไฟล์ผ่านเจอร์นัลเท่านั้น

ฉันเชื่อว่า XFS ยังทำรายการบันทึกข้อมูลเมตาทั้งหมดเว้นแต่ว่าคุณได้ปรับแต่งระบบไฟล์


ใช่ แต่ "ข้อมูลเมตา" โดยเฉพาะคืออะไร บล็อกของไดเรกทอรี: แน่นอน inodes ตัวเอง: อ๋อ Symlink ที่มีเป้าหมายเล็กพอที่จะใส่ inode ได้: Symlinks ที่เป้าหมายพุ่งเข้าสู่บล็อกเสริม: ??????

ลิงก์จะช่วย
asdmin

1

ฉันกังวลมากขึ้นเกี่ยวกับการดำเนินการของระบบไฟล์อะตอมมิกที่ทนทานได้อย่างมีประสิทธิภาพโดยอาศัยการรันด้วยเจอร์นัลที่เปิดใช้งานโดยไม่ต้องงอไปข้างหลังและ fsync (2) ตลอดเวลา

ไม่มี. หากคุณต้องการให้แน่ใจว่าการเปลี่ยนแปลงยังคงมีอยู่หลังจากเกิดความผิดพลาดคุณจะต้อง fsync ระยะเวลา การจดบันทึกจะรับประกันได้ว่าในกรณีที่เกิดความผิดพลาดการดำเนินการที่คุณระบุไว้จะไม่ถูกดำเนินการครึ่งหนึ่ง


ฉันรู้ว่าถ้าฉันสนใจฉันจะต้อง fsync ไฟล์และไดเรกทอรีที่จะรู้ว่าถ้าบล็อกมีการปั่นสนิม แต่ไม่มีวิธีที่ฉันได้พบที่ช่วยให้ฉัน fsync บล็อกที่กลับ symlink ถ้ามันออกมาจาก ไอโหนด ณ จุดนี้การขอความช่วยเหลือเพียงอย่างเดียวของฉันคือการพึ่งพาวารสารหรือไม่เคยใช้ symlink อีกครั้งสำหรับสิ่งที่สำคัญ
rboyer

@naelyn, fsync () จะล้างบล็อกทั้งหมดที่เกี่ยวข้องกับไฟล์รวมถึง symlink ที่ไม่เร็ว
psusi

1
ฉันจะเปิดไฟล์ descriptor ที่เหมาะสมสำหรับใช้ใน fsync ที่จะล้างบล็อคของ symlink ที่ไม่เร็วได้อย่างไร
rboyer

@ naelyn, โอ้ใช่แล้ว ... จุดที่ดี ... อาจต้องถามเรื่องนั้นในรายการส่งเมล linux-fsdevel ... ด้วยการเชื่อมโยงอย่างหนักฉันเชื่อว่าคุณเปิดและซิงค์ไดเรกทอรีที่มีมันอาจ symlinks ทำงานเหมือนกันหรือไม่
psusi

0

คุณทราบหรือไม่ว่าสมุดบันทึก ext4 นั้นดำเนินการตามหมายเลขบล็อกและไม่ใช่การดำเนินการใช่ไหม "ข้อมูลเมตา" จะเป็นอย่างอื่นนอกจากบล็อกข้อมูลจริงสำหรับ inode ที่กำหนดโดยไม่คำนึงถึงการดำเนินการที่คุณใช้เพื่อแก้ไขบล็อกที่เป็นปัญหา


0

xfstests ดูเหมือนจะอ้างว่า fsync () ในไดเรกทอรีควรคง symlink ใด ๆ ที่มีอยู่

ฉันยังไม่ได้ตรวจสอบสิ่งนี้ เป็นไปได้ที่ฉันจะพลาดบางสิ่งบางอย่าง

xfstests ถูกใช้โดยผู้พัฒนาระบบไฟล์ Linux จำนวนมาก การทดสอบนี้อยู่ในไดเรกทอรี "ทั่วไป" มันบอกเป็นนัยว่าควรใช้กับระบบไฟล์ Linux ทั้งหมด (หรืออย่างน้อยระบบไฟล์อุปกรณ์บล็อกทั้งหมดการทดสอบทำงานโดยใช้อุปกรณ์บล็อกเสมือนพิเศษ)

https://github.com/kdave/xfstests/blob/master/tests/generic/348

# Test creating a symlink, fsync its parent directory, power fail and mount
# again the filesystem. After these steps the symlink should exist and its
# content must match what we specified when we created it (must not be empty
# or point to something else).
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.