btrfs ขัดผิวทำอะไรกันแน่? ตามหน้าคู่มือซึ่งไม่ชัดเจนโดยสิ้นเชิงมันทำการตรวจสอบข้อผิดพลาดบางอย่าง การตรวจสอบข้อผิดพลาดชนิดใด มันเชื่อถือได้แค่ไหน? มันสามารถกู้คืนข้อผิดพลาดบางอย่าง? มันทำงานยังไง? มันทำงานบนดิสก์ btrfs ทุกอันหรือไม่
btrfs ขัดผิวทำอะไรกันแน่? ตามหน้าคู่มือซึ่งไม่ชัดเจนโดยสิ้นเชิงมันทำการตรวจสอบข้อผิดพลาดบางอย่าง การตรวจสอบข้อผิดพลาดชนิดใด มันเชื่อถือได้แค่ไหน? มันสามารถกู้คืนข้อผิดพลาดบางอย่าง? มันทำงานยังไง? มันทำงานบนดิสก์ btrfs ทุกอันหรือไม่
คำตอบ:
ฉันไม่รู้ว่ามันจะทำอะไรอย่างอื่นอีกหรือไม่ แต่ฉันรู้ว่าอย่างน้อยที่สุดbtrfs scrub
ก็ทำการขัดข้อมูลดิสก์แบบเต็ม โดยพื้นฐานแล้วมันจะอ่าน data * ทั้งหมดบนดิสก์คำนวณการตรวจสอบซ้ำและเปรียบเทียบ checksum ที่คำนวณแล้วใหม่กับที่เก็บไว้ เมื่อเช็คซัมที่จัดเก็บและคำนวณใหม่ไม่ตรงกันระบบจะรู้ว่ามีความเสียหาย
เมื่อตรวจพบความเสียหายพฤติกรรมจะขึ้นอยู่กับการตั้งค่าดิสก์ของคุณ ตัวอย่างเช่นหากคุณมี RAID 1 (การทำมิเรอร์) คุณbtrfs scrub
สามารถแก้ไขข้อมูลที่เสียหายได้โดยการคัดลอกเวอร์ชั่นที่ไม่เสียหายจากดิสก์อื่น หากสำเนาทั้งหมดของข้อมูลเสียหาย (เช่นความเสียหายหลายดิสก์หรือไม่มีการทำสำเนาซ้ำซ้อนในตอนแรก) แสดงว่าไม่มีอะไรbtrfs scrub
สามารถทำได้นอกเหนือจากการเตือนคุณ
เหตุผลที่สำคัญคือฮาร์ดไดรฟ์มีความน่าเชื่อถือเพียง 99.999999999999% สำหรับการอ่านและการเขียนบิต ดังนั้นทุกๆ I / O ของข้อมูลเทราไบต์สองสามอาจมีข้อผิดพลาด แม้ว่าข้อผิดพลาดสามารถตรวจพบและแก้ไขได้ (และคงที่สมมติว่าสำเนาที่ซ้ำซ้อนยังคงใช้ได้) ในระหว่างการเข้าถึงดิสก์ปกติการขัดถูดิสก์เต็มรูปแบบประจำสามารถค้นหาและแก้ไขข้อผิดพลาดก่อนสะสมได้ว่าสำเนาทั้งหมดของข้อมูลเดียวกันเสียหาย
* ฉันใช้ "data" แทน "file" เพื่อรวมข้อมูลเมตาด้วย Btrfs เก็บไฟล์และข้อมูลที่สอดคล้องกัน (รวม checksums) ในบล็อกข้อมูลทั้งหมดที่ได้รับการ checksummed btrfs scrub
และตรวจสอบโดย
ดูสิ่งนี้ด้วย:
100-1/10^14
มี 16 เก้าและโพสต์มีเพียง 14 (ตรงกับ 10 ^ 12)
1-10^n
ซึ่งจะถูกแปลงเป็นเปอร์เซ็นต์เพราะมนุษย์ไม่ชอบทศนิยม นอกจากนี้ฉันละเลยที่จะพูดถึงในความคิดเห็นก่อนหน้าของฉันว่าไดรฟ์อยู่ใน RAID 1 (ดังนั้นข้อมูล 270-300 GiB เดียวกันอยู่ในแต่ละของพวกเขา) ซึ่งแก้ไขข้อผิดพลาดการคำนวณที่ชัดเจนอีก
การขยายคำตอบที่ยอดเยี่ยมของ Mark Haferkamp btrfs scrub
การอ่านข้อมูลทั้งหมดแทนที่จะเป็นไฟล์ทั้งหมดเป็นคุณสมบัติที่สำคัญและเป็นสิ่งที่ทำให้มีประโยชน์มาก โปรดจำไว้ว่า btrfs นั้นรองรับการสร้าง RAID สมมติว่าคุณมีระบบไฟล์ btrfs ซึ่งประกอบไปด้วยไดรฟ์สองตัวที่คุณกำหนดค่าให้ใช้ RAID1 ในกรณีนี้เมื่อคุณเขียนไปยังไฟล์การเขียนนั้นจะถูกเรพลิเคทไปยังดิสก์ทั้งสอง (มันมีความซับซ้อนมากขึ้นด้วยตัวอย่างที่ซับซ้อนมากขึ้น แต่สำหรับกรณีง่าย ๆ นี่คือสิ่งที่เกิดขึ้นเสมอ) อย่างไรก็ตามเมื่อคุณอ่านจากไฟล์นั้นการอ่านจะกดดิสก์เพียงแผ่นเดียว (เพราะเป็นการสิ้นเปลืองในการอ่านไฟล์สองครั้ง เว้นแต่ว่าสำเนาแรกจะใช้ไม่ได้ด้วยเหตุผลบางประการ)
ทีนี้สมมติว่าไดรฟ์ btrfs ตัวที่สองของคุณเสื่อมสภาพและเริ่มมีข้อมูลเสียหายในระบบไฟล์ของคุณ เมื่อคุณอ่านบล็อกจากดิสก์นี้ btrfs จะสังเกตเห็นว่าการตรวจสอบไม่ตรงกันและจะคืนค่าบล็อกในวงจากสำเนาที่รู้จักดี - สำเนาในไดรฟ์แรก มันจะส่งคืนข้อมูลไปยังแอปพลิเคชันที่โทรมาread()
(หรืออะไรก็ตาม) ราวกับว่าไม่มีอะไรเกิดขึ้น
แต่ถ้า btrfs ไม่ตัดสินใจที่จะอ่านจากดิสก์ที่สอง โปรดจำไว้ว่ามีสองชุดดังนั้นจึงสามารถอ่านได้ทั้งแผ่นแรกหรือแผ่นที่สอง ถ้าอ่านจากดิสก์แผ่นแรกมันจะไม่สังเกตเห็นอะไรผิดปกติ ครั้งเดียวที่มันจะสังเกตเห็นสิ่งผิดปกติคือเมื่อดิสก์ตัวแรกเสื่อมสภาพเช่นกัน ตอนนี้คุณถูกซ่อนเพราะสายเกินไปที่จะกู้คืนข้อมูล - สำเนาของดิสก์ที่สองได้รับความเสียหายในขณะที่และสำเนาแรก (ซึ่งเป็นสิ่งที่คุณเคยใช้ในการกู้คืนดิสก์ที่สอง) ก็เสียหายเช่นกัน!
นี่คือที่btrfs scrub
มามันอ่านข้อมูลทั้งหมดไม่ใช่ไฟล์ทั้งหมด ซึ่งรวมถึงข้อมูลเมตา แต่ยังมีสำเนาสำรองของไฟล์ที่ปกติจะไม่อยู่ในเส้นทางการอ่าน เมื่ออ่านสำเนาสำรองเหล่านี้จะสร้างโอกาสในการแก้ไขข้อผิดพลาดในวงของ btrfs เพื่อเริ่มต้นและกู้คืนข้อมูลจากสำเนาที่ซ้ำซ้อน