Linux kernel 6.2 จะรวมการปรับปรุง RAID5/6 ใน Btrfs

มีการเสนอการปรับปรุง Btrfs เพื่อรวมไว้ในเคอร์เนล Linux 6.2 เพื่อแก้ไขปัญหาช่องโหว่การเขียนในการใช้งาน RAID 5/6 สาระสำคัญของปัญหามาจากข้อเท็จจริงที่ว่าหากเกิดข้อขัดข้องระหว่างการบันทึก ในตอนแรกเป็นไปไม่ได้ที่จะเข้าใจว่าบล็อกใดที่อุปกรณ์ RAID เขียนอย่างถูกต้องและการบันทึกไม่เสร็จสมบูรณ์ หากคุณพยายามคืนค่า RAID ในสถานการณ์นี้ บล็อกที่สอดคล้องกับบล็อกที่เขียนไว้อาจถูกทำลายเนื่องจากสถานะของบล็อก RAID ไม่ซิงค์กัน ปัญหานี้เกิดขึ้นในอาร์เรย์ RAID1/5/6 ใดๆ ที่ไม่มีมาตรการพิเศษเพื่อต่อสู้กับผลกระทบนี้

ในการใช้งาน RAID เช่น RAID1 ใน btrfs ปัญหานี้แก้ไขได้โดยใช้เช็คซัมในสำเนาทั้งสองชุด หากข้อมูลไม่ตรงกัน ข้อมูลก็จะถูกกู้คืนจากสำเนาชุดที่สอง วิธีการนี้ยังใช้งานได้หากอุปกรณ์บางตัวเริ่มส่งข้อมูลที่ไม่ถูกต้องแทนที่จะเป็นความล้มเหลวโดยสิ้นเชิง

อย่างไรก็ตาม ในกรณีของ RAID5/6 ระบบไฟล์จะไม่จัดเก็บเช็คซัมสำหรับบล็อกพาริตี: ในสถานการณ์ปกติ ความถูกต้องของบล็อกจะได้รับการตรวจสอบโดยความจริงที่ว่าบล็อกทั้งหมดถูกตรวจสอบแล้ว และสามารถสร้างบล็อกพาริตีขึ้นใหม่ได้ จากข้อมูล อย่างไรก็ตาม ในกรณีของการบันทึกบางส่วน วิธีการนี้อาจใช้ไม่ได้ในบางสถานการณ์ ในกรณีนี้ เมื่อกู้คืนอาร์เรย์ อาจเป็นไปได้ว่าบล็อกที่อยู่ภายใต้บันทึกที่ไม่สมบูรณ์จะถูกกู้คืนอย่างไม่ถูกต้อง

ในกรณีของ btrfs ปัญหานี้มีความเกี่ยวข้องมากที่สุดหากบันทึกที่สร้างขึ้นมีขนาดเล็กกว่าแถบ ในกรณีนี้ ระบบไฟล์ต้องดำเนินการอ่าน-แก้ไข-เขียน (อ่าน-แก้ไข-เขียน, RMW) หากพบบล็อกที่มีการเขียนที่ไม่สมบูรณ์ การดำเนินการ RMW อาจทำให้เกิดความเสียหายที่จะตรวจไม่พบ โดยไม่คำนึงถึงผลรวมตรวจสอบ นักพัฒนาได้ทำการเปลี่ยนแปลงโดยการดำเนินการ RMW จะตรวจสอบผลรวมของบล็อกก่อนดำเนินการนี้ และหากจำเป็นต้องกู้คืนข้อมูล ก็จะตรวจสอบผลรวมตรวจสอบหลังการบันทึกด้วย น่าเสียดายที่ในสถานการณ์ที่มีการเขียนแถบที่ไม่สมบูรณ์ (RMW) สิ่งนี้ทำให้เกิดค่าใช้จ่ายเพิ่มเติมในการคำนวณเช็คซัม แต่เพิ่มความน่าเชื่อถืออย่างมาก สำหรับ RAID6 ตรรกะดังกล่าวยังไม่พร้อม อย่างไรก็ตาม สำหรับความล้มเหลวดังกล่าวใน RAID6 จำเป็นต้องเขียนล้มเหลวบนอุปกรณ์ 2 เครื่องพร้อมกัน ซึ่งมีโอกาสน้อยกว่า

นอกจากนี้ เราสามารถสังเกตคำแนะนำในการใช้ RAID5/6 จากนักพัฒนาได้ สิ่งสำคัญคือใน Btrfs ข้อมูลเมตาและโปรไฟล์การจัดเก็บข้อมูลอาจแตกต่างกัน ในกรณีนี้ คุณสามารถใช้โปรไฟล์ RAID1 (มิเรอร์) หรือแม้แต่ RAID1C3 (3 ชุด) สำหรับข้อมูลเมตา และใช้ RAID5 หรือ RAID6 สำหรับข้อมูลได้ สิ่งนี้ทำให้มั่นใจได้ถึงการปกป้องข้อมูลเมตาที่เชื่อถือได้ และไม่มี “ช่องโหว่ในการเขียน” ในด้านหนึ่ง และการใช้พื้นที่อย่างมีประสิทธิภาพมากขึ้น ซึ่งเป็นคุณลักษณะของ RAID5/6 ในอีกด้านหนึ่ง ซึ่งช่วยให้สามารถหลีกเลี่ยงความเสียหายของข้อมูลเมตาและสามารถแก้ไขความเสียหายของข้อมูลได้

นอกจากนี้ ยังสามารถสังเกตได้ว่าสำหรับ SSD ใน Btrfs ในเคอร์เนล 6.2 การดำเนินการแบบอะซิงโครนัสของการดำเนินการ "ทิ้ง" จะถูกเปิดใช้งานตามค่าเริ่มต้น (ทำเครื่องหมายบล็อกที่ว่างซึ่งไม่จำเป็นต้องจัดเก็บทางกายภาพอีกต่อไป) ข้อดีของโหมดนี้คือประสิทธิภาพสูงเนื่องจากการจัดกลุ่มการดำเนินการ "ทิ้ง" ที่มีประสิทธิภาพในคิวและการประมวลผลคิวเพิ่มเติมโดยโปรเซสเซอร์พื้นหลังซึ่งเป็นสาเหตุที่การดำเนินการ FS ปกติไม่ช้าลงเช่นเดียวกับในกรณีของซิงโครนัส " ทิ้ง” เนื่องจากบล็อกถูกปลดปล่อย และ SSD สามารถตัดสินใจได้ดีขึ้น ในทางกลับกัน คุณจะไม่จำเป็นต้องใช้ยูทิลิตี้เช่น fstrim อีกต่อไป เนื่องจากบล็อกที่มีอยู่ทั้งหมดจะถูกล้างใน FS โดยไม่จำเป็นต้องสแกนเพิ่มเติม และไม่ทำให้การทำงานช้าลง

ที่มา: opennet.ru

เพิ่มความคิดเห็น