นอกเหนือจากระบบการบันทึกปกติแล้ว BTRFS ยังมีคำสั่งstatsซึ่งคอยติดตามข้อผิดพลาด (รวมถึงข้อผิดพลาดการอ่านการเขียนและความเสียหาย / การตรวจสอบ) ต่อไดรฟ์:
# btrfs device stats /
[/dev/mapper/luks-123].write_io_errs 0
[/dev/mapper/luks-123].read_io_errs 0
[/dev/mapper/luks-123].flush_io_errs 0
[/dev/mapper/luks-123].corruption_errs 0
[/dev/mapper/luks-123].generation_errs 0
ดังนั้นคุณสามารถสร้าง cronjob รูตแบบง่าย:
MAILTO=admin@myserver.com
@hourly /sbin/btrfs device stats /data | grep -vE ' 0$'
การดำเนินการนี้จะตรวจสอบความผิดพลาดเชิงบวกที่มีค่าทุกชั่วโมงและส่งอีเมลถึงคุณ เห็นได้ชัดว่าคุณจะทดสอบสถานการณ์ดังกล่าว (ตัวอย่างเช่นก่อให้เกิดความเสียหายหรือลบ grep) เพื่อตรวจสอบว่าการแจ้งเตือนอีเมลทำงาน
นอกจากนี้ด้วยระบบไฟล์ขั้นสูงเช่น BTRFS (ที่มีการตรวจสอบ) มักจะแนะนำให้กำหนดเวลาการขัดทุกสองสามสัปดาห์เพื่อตรวจสอบความเสียหายเงียบที่เกิดจากไดรฟ์ที่ไม่ดี
@monthly /sbin/btrfs scrub start -Bq /data
-B
ตัวเลือกที่จะทำให้ขัดในเบื้องหน้าเพื่อที่คุณจะเห็นผลใน cron อีเมลที่ส่งให้คุณ มิฉะนั้นจะทำงานในพื้นหลังและคุณจะต้องจำไว้ว่าให้ตรวจสอบผลลัพธ์ด้วยตนเองเนื่องจากไม่ได้อยู่ในอีเมล
ปรับปรุง : ปรับปรุง grep ตามคำแนะนำของ Michael Kjörlingขอบคุณ
อัปเดต 2 : หมายเหตุเพิ่มเติมเกี่ยวกับการขัดถูกับการอ่านปกติ (นี่ไม่ได้ใช้กับ BTRFS เท่านั้น):
ดังที่ Ioan ชี้ให้เห็นการขัดผิวอาจใช้เวลาหลายชั่วโมงขึ้นอยู่กับขนาดและประเภทของอาเรย์ (และปัจจัยอื่น ๆ ) ซึ่งมากกว่าหนึ่งวันในบางกรณี และเป็นการสแกนที่ใช้งานอยู่มันจะไม่ตรวจจับข้อผิดพลาดในอนาคต - เป้าหมายของการขัดคือการค้นหาและแก้ไขข้อผิดพลาดในไดรฟ์ของคุณ ณ เวลานั้น แต่เช่นเดียวกับระบบ RAID อื่น ๆ ขอแนะนำให้กำหนดตารางการขัดเป็นระยะ เป็นความจริงที่การดำเนินการตามปกติของ i / o เช่นการอ่านไฟล์จะตรวจสอบว่าข้อมูลที่อ่านนั้นถูกต้องจริงหรือไม่ แต่ให้พิจารณามิเรอร์อย่างง่าย - ถ้าสำเนาแรกของไฟล์เสียหายอาจเกิดจากไดรฟ์ที่กำลังจะตาย แต่สำเนาที่สองซึ่งถูกต้องจะถูกอ่านโดย BTRFS จริงแล้ว BTRFS จะไม่ทราบว่ามีความเสียหาย บนหนึ่งในไดรฟ์ นี่เป็นเพียงเพราะได้รับข้อมูลที่ร้องขอซึ่งหมายความว่าแม้ว่าคุณจะอ่านไฟล์ที่คุณรู้ว่าได้รับความเสียหายในไดรฟ์เดียวโดยเฉพาะไม่มีการรับประกันว่าการดำเนินการอ่านนี้จะตรวจพบความเสียหาย
ทีนี้สมมติว่า BTRFS อ่านจากไดรฟ์ที่ดีเท่านั้นไม่มีการสครับที่จะตรวจพบความเสียหายในไดรฟ์ที่ไม่ดีและจากนั้นไดรฟ์ที่ดีก็ไม่ดีเช่นกัน - ผลลัพธ์ก็คือข้อมูลสูญหาย (อย่างน้อย BTRFS จะทราบ ไฟล์ใดที่ยังคงถูกต้องและยังช่วยให้คุณสามารถอ่านไฟล์เหล่านั้นได้) แน่นอนว่านี่เป็นตัวอย่างที่ง่าย ในความเป็นจริง BTRFS จะไม่อ่านจากไดรฟ์หนึ่งเสมอและไม่สนใจไดรฟ์อื่น
แต่ประเด็นก็คือการขัดเป็นระยะมีความสำคัญเนื่องจากจะพบข้อผิดพลาด (และแก้ไข) ที่การดำเนินการอ่านปกติไม่จำเป็นต้องตรวจจับ
ไดรฟ์ที่มีข้อผิดพลาด: เนื่องจากคำถามนี้ค่อนข้างเป็นที่นิยมฉันต้องการที่จะชี้ให้เห็นว่า "โซลูชันการตรวจสอบ" นี้มีไว้สำหรับตรวจจับปัญหากับไดรฟ์ที่อาจไม่ดี (เช่นไดรฟ์ที่กำลังจะตาย
ในทางกลับกันหากไดรฟ์หายไปในทันที (หลุดหรือขาดการเชื่อมต่ออย่างสมบูรณ์มากกว่าที่จะตายและก่อให้เกิดข้อผิดพลาด) มันจะเป็นไดรฟ์ที่มีความผิดพลาด (ZFS จะทำเครื่องหมายว่าไดรฟ์ดังกล่าวเป็น FAULTED) น่าเสียดายที่ BTRFS อาจไม่ทราบว่ามีไดรฟ์หายไปในขณะที่ติดตั้งระบบไฟล์ตามที่ระบุไว้ในรายการส่งเมลนี้ตั้งแต่วันที่ 09/2015 (เป็นไปได้ว่าสิ่งนี้ได้รับการติดตั้งแล้ว):
ความแตกต่างคือเรามีรหัสเพื่อตรวจสอบอุปกรณ์ที่ไม่ได้อยู่ที่เมานท์เรายังไม่มีรหัส (ยัง) เพื่อตรวจจับมันหล่นบนระบบไฟล์ที่ติดตั้ง เหตุใดการมีการตรวจจับที่เหมาะสมสำหรับอุปกรณ์ที่หายไปจึงไม่ถือเป็นลำดับความสำคัญฉันไม่มีความคิด แต่นั่นเป็นปัญหาแยกต่างหากจากพฤติกรรมการเมานต์
https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg46598.html
อาจมีข้อความแสดงข้อผิดพลาดเป็นจำนวนมากในช่วงเวลานั้นดังนั้นการ grepping dmesg จึงอาจไม่น่าเชื่อถือ
สำหรับเซิร์ฟเวอร์ที่ใช้ BTRFS อาจเป็นความคิดที่จะมีการตรวจสอบที่กำหนดเอง (งาน cron) ที่ส่งการแจ้งเตือนหากอย่างน้อยหนึ่งไดรฟ์ในอาร์เรย์ RAID หายไปนั่นคือไม่สามารถเข้าถึงได้อีกต่อไป ...