Bcachefs เป็นระบบไฟล์แบบคัดลอกเมื่อเขียนสำหรับระบบปฏิบัติการที่ใช้ Linux
เมื่อไม่กี่วันที่ผ่านมาKent Overstreet ได้ประกาศเปิดตัว Bcachefs เวอร์ชัน 1.33.0ซึ่งเป็นเวอร์ชันใหม่ของระบบไฟล์ที่นำเสนอการเปลี่ยนแปลงโครงสร้างอย่างลึกซึ้งในด้านการจัดการข้อมูลและสถาปัตยกรรมของซอร์สโค้ด
การอัปเดตครั้งนี้กำลังจะเป็นหนึ่งในการอัปเดตที่สำคัญที่สุดในรอบสองปีที่ผ่านมา โดยเน้นที่ความสมบูรณ์ของเมตาเดตาและการปรับปรุงโค้ดเบสภาษาซีให้ทันสมัยยิ่งขึ้น
"Reconcile": ยุคใหม่สำหรับความสมบูรณ์ของข้อมูล
คุณสมบัติใหม่ที่โดดเด่นที่สุด ซึ่งได้รับการอธิบายว่าเป็นความเปลี่ยนแปลงที่สำคัญที่สุดในรอบสองปีที่ผ่านมา คือ การนำฟังก์ชันการปรับสมดุล (rebalance_v2)มาใช้ กลไกใหม่นี้เข้ามาแทนที่ระบบ "การปรับสมดุล" แบบเก่า และแก้ไขข้อจำกัดที่สำคัญข้อหนึ่งของระบบเดิม นั่นคือ ตอนนี้ระบบสามารถจัดการและย้ายข้อมูลได้ไม่เพียงแต่ข้อมูลผู้ใช้เท่านั้น แต่ยังรวมถึงเมตาเดต้าของระบบไฟล์ด้วย
Rebalance_v2 ทำงานเชิงรุกและอัตโนมัติ หากมีการเพิ่มดิสก์ใหม่ลงในอาร์เรย์หรือมีการเปลี่ยนแปลงตัวเลือกการสำรองข้อมูล Bcachefs จะเริ่มทำการจำลองและแก้ไขข้อมูลหรือเมตาเดต้าที่เสียหายทันที โดยใช้ดัชนีแยกต่างหากเพื่อจัดลำดับความสำคัญของการดำเนินการที่สำคัญ ซึ่งจะช่วยให้มั่นใจได้ว่าความสมบูรณ์ของระบบจะยังคงอยู่แม้ในระหว่างการบำรุงรักษาอย่างเข้มข้น
การทำความสะอาดโค้ดและการเตรียม Rust
ภายใต้ระบบภายใน เวอร์ชัน 1.33.0 ได้มีการปรับโครงสร้างโค้ดภาษา C ครั้งใหญ่ เพื่อให้มีความปลอดภัยมากขึ้นและเข้ากันได้กับการใช้งานในอนาคต สนิมนักพัฒนาได้ทำการล้างข้อมูลอย่างละเอียด ทำให้จำนวนคำสั่งลดลง goto จาก 2.500 เหลือเพียง 600 ซึ่งช่วยลดความซับซ้อนของลำดับการทำงานของโปรแกรมได้อย่างมาก
นอกจากนี้ ยังมีการเพิ่มมาโครใหม่ๆ เข้ามา เช่น DARRAY() y try()ส่วนประกอบเหล่านี้ได้รับการออกแบบมาเพื่อเลียนแบบพฤติกรรมเวกเตอร์แบบไดนามิกและการจัดการข้อผิดพลาดของ Rust และ C++ ซึ่งไม่เพียงแต่จะปรับปรุงโค้ดปัจจุบันให้ทันสมัยขึ้นเท่านั้น แต่ยังช่วยให้สามารถพอร์ตไปยังแพลตฟอร์มอื่นได้ง่ายขึ้นและลดพื้นที่เสี่ยงต่อข้อผิดพลาดด้านหน่วยความจำในอนาคตอีกด้วย
การวินิจฉัยที่ดีขึ้นและความยืดหยุ่นในการจัดเก็บข้อมูล
ด้วยการคำนึงถึงการบริหารจัดการระบบ เวอร์ชันนี้ได้ปรับปรุงความชัดเจนของข้อความแสดงข้อผิดพลาด อย่างมาก Bcachefs สามารถแยกแยะและสื่อสารได้ว่าความล้มเหลวเกิดจากข้อบกพร่องของซอฟต์แวร์หรือปัญหาของฮาร์ดแวร์ทางกายภาพ และยังแนะนำขั้นตอนการกู้คืนที่จำเป็นอีกด้วย สิ่งนี้มีความสำคัญอย่างยิ่งในการหลีกเลี่ยงการวินิจฉัยผิดพลาดที่ทำให้ระบบไฟล์ถูกกล่าวโทษว่าเป็นสาเหตุของความล้มเหลวของดิสก์
ความโปร่งใสนี้ครอบคลุมหลายระดับ:
- ข้อผิดพลาด I/O โดยละเอียด: เมื่อเลเยอร์บล็อกรายงานความล้มเหลว Bcachefs จะส่งรหัสเฉพาะ (เช่น
BLK_STS_IOERRซึ่งจะช่วยระบุว่าฮาร์ดดิสก์เป็นสาเหตุของปัญหาหรือไม่ - ข้อผิดพลาดในการประกอบ: หากอุปกรณ์ใดขาดหายไปในการประกอบแผ่นเสียง ระบบจะระบุอย่างแม่นยำว่าอุปกรณ์ใดขาดหายไป โดยแสดงชื่อและรุ่นตามครั้งล่าสุดที่พบเห็น
- ข้อจำกัดอัตราข้อผิดพลาด: ขอบเขตของข้อผิดพลาด "อ่อน" (ซอฟต์แวร์) และ "แข็ง" (ฮาร์ดแวร์) ได้ถูกแยกออกจากกัน เพื่อให้แน่ใจว่าข้อผิดพลาดเล็กน้อยจำนวนมากจะไม่บดบังความล้มเหลวที่สำคัญของดิสก์
นอกจากนี้ คำสั่งดังกล่าว bcachefs fs top มีการปรับปรุงแล้ว ตัวนับภายในแสดงความเร็วในการถ่ายโอนข้อมูลแทนที่จะเป็นเพียงตัวเลขคงที่ ทำให้การเชื่อมโยงเหตุการณ์ต่างๆ (เช่น data_update_fail) ส่งผลให้ประสิทธิภาพการทำงานลดลงแบบเรียลไทม์
การปรับปรุงประสิทธิภาพใน Btrees และตัวเลือกการติดตั้งใหม่
ภายใต้ระบบการทำงาน ประสิทธิภาพการทำงานภายใต้ภาระงานหนักได้รับการปรับปรุงให้ดีขึ้นด้วยการเปลี่ยนแปลงในการจัดการ B-tree การรวมโหนดว่างจะเกิดขึ้นแบบอะซิงโครนัส ซึ่งช่วยขจัดปัญหาคอขวดของบัฟเฟอร์การเขียน นอกจากนี้ ยังมีการเพิ่มขั้นตอนการกู้คืนเพิ่มเติมเข้ามาด้วย merge_btree_nodesเพื่อปรับโครงสร้างต้นไม้ด้วยตนเองหากจำเป็น
อีกหนึ่งคุณสมบัติเพิ่มเติมที่ใช้งานได้จริงมากคือ ความสามารถในการบูตระบบไฟล์ด้วยการกำหนดค่า replicas=2 บนแผ่นดิสก์แผ่นเดียววิธีนี้ช่วยให้ผู้ใช้เริ่มต้นใช้งานด้วยไดรฟ์เพียงตัวเดียว โดยรู้ว่าระบบ "ต้อง" มีระบบสำรองข้อมูล เมื่อเชื่อมต่อไดรฟ์ตัวที่สองแล้ว Bcachefs จะทำการจำลองข้อมูลโดยอัตโนมัติโดยไม่ต้องมีการแทรกแซงด้วยตนเองที่ซับซ้อน
สุดท้ายนี้ ควรกล่าวถึงว่าเวอร์ชันใหม่ ซึ่งมีให้ใช้งานแล้วสำหรับระบบปฏิบัติการต่างๆ เช่น Debian, Fedora, Arch Linux และ NixOS นั้น ต้องการเคอร์เนล Linux เวอร์ชัน 6.16 หรือสูงกว่า และถูกแจกจ่ายในสองแพ็กเกจหลัก ได้แก่ โมดูลเคอร์เนล (bcachefs-kernel-dkms) และเครื่องมือสำหรับผู้ใช้ (bcachefs-tools)