BTRFS รับประกันความสอดคล้องของข้อมูลในภาวะไฟฟ้าดับหรือไม่?


11

ในฐานะที่เป็นZFS ระบุเฉพาะ ,ZFS ถูกอ้างสิทธิ์ว่าคงกระพัน ZFS ยอมรับว่าอาจเสี่ยงต่อความล้มเหลวของระบบไฟฟ้า

ฉันไม่พบคำสั่งดังกล่าวสำหรับ BTRFS มัน (หรือออกแบบ / วางแผนที่จะ) มีความทนทานระหว่างไฟฟ้าดับหรือไม่?


อ่านอีกครั้ง. "หากพูลของคุณได้รับความเสียหายเนื่องจากความล้มเหลวของฮาร์ดแวร์หรือไฟดับโปรดดูการซ่อมแซมความเสียหายที่เกิดจากพูลหน่วยเก็บข้อมูล ZFS" (.. ) พยายามกู้คืนพูลโดยใช้zpool clear -F คำสั่ง
Michael D.

ดังนั้นคุณพูดว่า "ZFS ไม่รับประกันความสอดคล้องของข้อมูลมันเพียงพยายามกู้คืน"?
ceremcem

ใช่. มีแคชหลายตัวที่ต้องจัดการกับแคชในตัวฮาร์ดไดรฟ์ระบบปฏิบัติการแคช / บัฟเฟอร์ ณ จุดหนึ่งมีsyncหรือมีflushที่เขียนแคชไปยังดิสก์หรือไม่ในระหว่างไฟฟ้าดับข้อมูลที่จะหายไป ZFSอาจทำงานได้อย่างสมบูรณ์หากฮาร์ดดิสก์มีสุขภาพดีและไม่มีไฟฟ้าดับ (หรือมีการเชื่อมต่อUPSกับคอมพิวเตอร์ที่ปิดระบบอย่างไม่เหมาะสมเมื่อเกิดไฟดับ) คุณไม่สามารถพูดเกี่ยวกับ FAT32 ได้
Michael D.

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

1
ผมเคยถามคำถามเกี่ยวกับ #btrfs IRC พวกเขากล่าวว่าshould be ok if your hw isn't "buggy"ที่ not- "รถ" your hw has correct flush/barrier semanticsหมายถึง ฉันโพสต์ลิงก์ไปยังคำถามนี้ทาง IRC หวังว่าจะมีใครซักคนใช้เวลาในการอธิบายอย่างละเอียด แต่สำหรับตอนนี้มันเป็น
สวัสดีแองเจิล

คำตอบ:


5

ผมเคยถามคำถามเกี่ยวกับ #btrfs IRC พวกเขากล่าวว่าshould be ok if your hw isn't "buggy"ที่ not- "รถ" your hw has correct flush/barrier semanticsหมายถึง

TL; DR: ซึ่งหมายความว่า btrfs ได้รับการปกป้องจากข้อมูลเสียหายเนื่องจากการสูญเสียพลังงานในลักษณะเดียวกันกับ ZFS

นี่คือเหตุผล: แนวคิดทั่วไปเบื้องหลัง ZFS และ btrfs นั้นคล้ายคลึงกัน การใช้งานทั้งต้นไม้ Merkle เป็นโครงสร้างข้อมูล การเขียนอาจต้องมีการปรับปรุงหลายบล็อกในดิสก์ ระบบไฟล์กำลังจัดการสิ่งนี้โดยการเขียนข้อมูลใหม่ไปยังบล็อกว่างเปล่า (แม้ว่าไฟล์ที่มีอยู่จะถูกแก้ไขดังนั้นจึงไม่จำเป็นต้องแก้ไขบล็อกที่สะท้อนสถานะเก่า)และสร้างทรีที่อัพเดตใหม่ เมื่อการยกของหนักเสร็จสิ้นแล้วและข้อมูล + ทรีที่อัปเดตได้ถูกเขียนลงในดิสก์แล้วตัวชี้หัวจะได้รับการอัพเดตเป็นทรีใหม่ทำให้มองเห็นการเปลี่ยนแปลงได้

นี่คือสิ่งที่ควรประพฤติเมื่อเขียนไปยังไฟล์:

  1. เขียนข้อมูลเพื่อบล็อกฟรีบนดิสก์
  2. ทำสำเนาต้นไม้ Merkle * อัปเดตตามการเปลี่ยนแปลงที่เขียนไว้ใน (1)
  3. ขอให้ฮาร์ดแวร์ล้างข้อมูลไปยังดิสก์ - ฮาร์ดแวร์เขียนข้อมูลที่ค้างอยู่ทั้งหมด
  4. อัปเดตตัวชี้ส่วนหัวเป็นแผนผัง Merkle ใหม่
  5. ฟรีบล็อคเก่า ๆ ที่ไม่จำเป็นอีกต่อไป

หากไฟฟ้าดับหลังจาก (4) การทำธุรกรรมเสร็จสมบูรณ์ หากไฟฟ้าดับระหว่างขั้นตอน (1) ถึง (3) ระบบไฟล์จะมาพร้อมกับสถานะเก่า (ข้อมูลที่เขียนในขั้นตอน (1) จะสูญหายไป แต่ระบบไฟล์สอดคล้องกัน) โปรดทราบว่าไม่จำเป็นต้องตรวจสอบข้อผิดพลาดของระบบไฟล์ซึ่งหมายความว่าระบบไฟล์พร้อมใช้งานทันทีซึ่งเป็นข้อได้เปรียบที่ยิ่งใหญ่ (การตรวจสอบระบบไฟล์ขนาดใหญ่อาจใช้เวลานานมาก!)

นี่คือตัวอย่างวิธีที่สิ่งต่าง ๆ ผิดปกติกับฮาร์ดแวร์ "buggy":

  1. เขียนข้อมูลเพื่อบล็อกฟรีบนดิสก์
  2. ทำสำเนาต้นไม้ Merkle * อัปเดตตามการเปลี่ยนแปลงที่เขียนไว้ใน (1)
  3. ขอให้ฮาร์ดแวร์ล้างข้อมูลไปยังดิสก์ - ฮาร์ดแวร์ยืนยันว่าเสร็จสิ้น แต่ไม่ได้ล้างข้อมูลทั้งหมด (เช่นข้อมูลอาจยังอยู่ในแคชเขียนกลับของดิสก์)
  4. อัปเดตตัวชี้ส่วนหัวเป็นแผนผัง Merkle ใหม่ ข้อมูลนี้จะถูกเขียนลงดิสก์ก่อนข้อมูลที่รอดำเนินการอื่น ๆ (เช่นเนื่องจากส่วนหัวของดิสก์อยู่ในตำแหน่งที่ถูกต้อง)
  5. ข้อมูลที่เขียนในขั้นตอน (1) และ (2) ถูกเขียนลงดิสก์
  6. ฟรีบล็อคเก่า ๆ ที่ไม่จำเป็นอีกต่อไป

ระบบไฟล์จะไม่สอดคล้องกันหากไฟฟ้าดับระหว่าง (4) และ (5) หรือขณะดำเนินการตามขั้นตอน (5) ด้วยเหตุนี้แผนผัง Merkle และ / หรือข้อมูลอาจถูกเขียนเพียงบางส่วนเท่านั้นทำให้ระบบไฟล์ไม่สอดคล้องกัน

ในทางปฏิบัติคุณจะต้องระมัดระวังโดยเฉพาะอย่างยิ่งเมื่อใช้ควบคุม RAID พวกเขามักจะปิดใช้งานแคชการเขียนกลับบนดิสก์และใช้แคชการเขียนกลับของตนเองแทน มีสองวิธีทั่วไปสำหรับสิ่งที่ผิดพลาดที่นี่:

* ฉันทำให้สิ่งที่นี่ง่ายขึ้น จริงๆแล้วมันไม่จำเป็นที่จะต้องคัดลอกต้นไม้ทั้งหมด ต้องเพิ่มเฉพาะส่วนที่เปลี่ยนไปเท่านั้น - ส่วนที่เหลือสามารถใช้ร่วมกันระหว่างต้นไม้เก่ากับต้นไม้ใหม่ได้


ขอบคุณสำหรับคำอธิบายที่ดี อย่างไรก็ตามการอ้างสิทธิ์ที่จำเป็นสำหรับการเรียกร้องทั้งหมดรวมถึงการสนทนา IRC จากนั้นคำตอบของคุณจะได้รับการยอมรับ
ceremcem

เกี่ยวกับบันทึกของ IRC ฉันพูดถึงความคิดเห็นของ @ Hi-Angel ที่นี่ บางทีเขาอาจให้ข้อมูลอ้างอิงได้? ฉันเพิ่มการอ้างอิงเพิ่มเติมไปยังส่วนอื่น ๆ อีกเล็กน้อย
Martin

BTRFS ไม่ใช้ต้นไม้ Merkle ใช้ B-trees (ดังนั้น 'B-TRee FileSystem') และตัวอย่างความล้มเหลวของคุณต้องการให้อุปสรรคการเขียนไม่ได้ถูกนำไปใช้อย่างถูกต้องโดยฮาร์ดแวร์ (ซึ่งจริงๆแล้วเป็นกรณีที่ค่อนข้างผิดปกติในปัจจุบัน) . มิฉะนั้นคำตอบที่ดี
Austin Hemmelgarn

ต้นไม้ที่ใช้โดย btrfs เป็นจริงทั้งต้นไม้ B (คุณสมบัตินี้เป็นเรื่องเกี่ยวกับ "รูปร่าง" ของต้นไม้และความจริงที่ว่าพวกเขามีความสมดุลในตัวเอง) และต้นไม้แฮช / Merkle (ใบมีแฮชของข้อมูลบางส่วนโหนดมี แฮชของลูก ๆ ของพวกเขาดังนั้นการเปลี่ยนแปลงแต่ละครั้งจึงแพร่กระจายไปจนถึงราก) ความสามารถในการตรวจสอบแฮชเหล่านี้คือสิ่งที่ทำให้ btrfs และ ZFS ตรวจจับข้อมูลที่เสียหาย (และอ่านจากดิสก์อื่นหากใช้ในโหมด "การทำมิเรอร์")
Martin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.