หากระบบไฟล์ Btrfs ของ SUSE Linux Enterprise รายงานว่า “ระบบไฟล์อ่านอย่างเดียว” ให้ตรวจสอบก่อนว่าระบบไฟล์นั้นถูกเมานต์ในโหมดอ่านอย่างเดียวโดยตั้งใจ หรือเปลี่ยนเป็นโหมดอ่านอย่างเดียวหลังจากเกิดข้อผิดพลาด ตรวจสอบตัวเลือกการเมานต์ พื้นที่ว่าง และบันทึกเคอร์เนลก่อนที่จะพยายามเมานต์ใหม่ ใช้ Snapper rollback เพื่อสร้างสแนปช็อตของระบบที่สามารถบูตได้ หาก Btrfs บันทึกข้อผิดพลาด I/O หรือเมตาเดตา ให้ปกป้องข้อมูลและวินิจฉัยเส้นทางการจัดเก็บข้อมูลก่อนที่จะเขียนลงในระบบไฟล์อีกครั้ง
ตัวอย่างนี้ตรวจสอบตัวเลือกการเมานต์และระบุอุปกรณ์ Btrfs ที่สำรองข้อมูล /data
1. แยกแยะการเมานต์แบบอ่านอย่างเดียวโดยเจตนาออกจากข้อผิดพลาดของระบบไฟล์
แทนที่/dataด้วยจุดเชื่อมต่อที่ได้รับผลกระทบ หรือ/สำหรับ root
findmnt -T /data -o SOURCE,FSTYPE,OPTIONS
sudo btrfs filesystem show /data
ในคำสั่งแรก ให้มองหาroหรือrwในตัวเลือก สแนปช็อต Snapper แบบอ่านอย่างเดียวคาดว่าจะปฏิเสธการเขียน การเมานต์ที่กำหนดค่าด้วยroใน/etc/fstabอาจเป็นไปโดยเจตนาเช่นกัน Btrfs ยังสามารถเปลี่ยนเป็นแบบอ่านอย่างเดียวหลังจากเกิดข้อผิดพลาดร้ายแรงในการทำธุรกรรม เมตาเดต้า หรืออุปกรณ์ ในกรณีนั้น การเรียกใช้ซ้ำๆmount -o remount,rwจะไม่สามารถแก้ไขสาเหตุได้และอาจล้มเหลวทันที
หากระบบไฟล์ถูกเมานต์ในโหมดอ่านอย่างเดียวโดยเจตนา อุปกรณ์อยู่ในสภาพสมบูรณ์ และบันทึกเคอร์เนลไม่มีข้อผิดพลาดเกี่ยวกับ Btrfs หรือ I/O การเมานต์ข้อมูลตามปกติสามารถทำได้ในโหมดอ่านเขียน:
sudo mount -o remount,rw /data
findmnt -T /data -o TARGET,OPTIONS
อย่าใช้คำสั่งนั้นเป็นคำสั่งกู้คืนสำหรับสแนปช็อตแบบอ่านอย่างเดียวที่บูตขึ้นมา หรือระบบไฟล์แบบอ่านอย่างเดียวที่ถูกบังคับให้เป็นอ่านอย่างเดียวเนื่องจากข้อผิดพลาด การเมานต์ใหม่สำเร็จเป็นการยืนยันความสามารถในการเขียน ไม่ใช่ความสมบูรณ์ของระบบไฟล์
2. ตรวจสอบว่าแรงดันในอวกาศเป็นปัญหาที่แท้จริงหรือไม่
เปรียบเทียบพื้นที่ว่างในระบบไฟล์กับรายละเอียดการจัดสรรของ Btrfs ค่าตัวอย่างเป็นเพียงภาพประกอบเท่านั้น
ระบบไฟล์ Btrfs อาจมีพื้นที่ไม่เพียงพอแม้ว่าการตรวจสอบพื้นที่ดิสก์แบบพื้นฐานจะดูปกติดีก็ตาม เนื่องจากระบบจะติดตามการจัดสรรข้อมูลและเมตาเดต้าแยกกัน ตรวจสอบทั้งพื้นที่ว่างปกติและการใช้งาน Btrfs:
df -hT /data
sudo btrfs filesystem usage -T /data
หากระบบรายงานNo space left on deviceและบันทึกเคอร์เนลไม่แสดงความล้มเหลวของอุปกรณ์หรือข้อผิดพลาดเชิงโครงสร้าง ให้ตรวจสอบการใช้งาน Snapper ก่อนที่จะลบสิ่งใดๆ:
sudo snapper list
ลบเฉพาะสแนปช็อตที่นโยบายการเก็บรักษาอนุญาตให้คุณลบได้ โดยใช้sudo snapper delete SNAPSHOT_IDสำหรับแต่ละ ID ที่เลือก เก็บสแนปช็อตก่อนการอัปเดตที่ใช้งานได้ดีไว้หากคุณต้องการตัวเลือกการย้อนกลับ การลบสแนปช็อตจะกู้คืนพื้นที่ได้ แต่จะลบจุดกู้คืนออกไป การล้างข้อมูลอาจไม่คืนพื้นที่ทันที และสแนปช็อตจะไม่แก้ไขข้อผิดพลาด I/O อย่าเรียกใช้การปรับสมดุลเพื่อบังคับให้ระบบไฟล์แบบอ่านอย่างเดียวสามารถเขียนได้ เพราะมันจะย้ายข้อมูลและมีจุดประสงค์เพื่อแก้ไขปัญหาการจัดสรรที่ได้รับการวินิจฉัยแล้วบนระบบไฟล์ที่เขียนได้และใช้งานได้ปกติ
3. อ่านบันทึกเคอร์เนลก่อนเลือกวิธีการซ่อมแซม
ข้อความจากเคอร์เนลสามารถแยกแยะความแตกต่างระหว่างปัญหาพื้นที่ไม่เพียงพอ ปัญหาการอ่าน การตรวจสอบผลรวม หรือข้อผิดพลาดของอุปกรณ์ได้ บรรทัดที่แสดงเป็นเพียงตัวอย่าง
มองหาข้อผิดพลาดแรกของ Btrfs, อุปกรณ์บล็อก, ตัวควบคุม หรือการขนส่ง ไม่ใช่แค่ข้อความสุดท้ายที่ระบุว่าระบบไฟล์กลายเป็นโหมดอ่านอย่างเดียว:
sudo journalctl -k -b --no-pager | grep -Ei 'btrfs|I/O error|nvme|ata|scsi'
ข้อความเกี่ยวกับการอ่านล้มเหลว ความไม่ตรงกันของค่าตรวจสอบความถูกต้อง อุปกรณ์หายไป หรือข้อผิดพลาด I/O บ่งชี้ถึงปัญหาที่แตกต่างจากroตัวเลือกการเมานต์แบบง่ายๆ ตรวจสอบดิสก์ คอนโทรลเลอร์ RAID/HBA SAN หรือเลเยอร์ดิสก์เสมือน และข้อมูลสถานะของผู้ผลิตที่รายงาน แก้ไขปัญหาฮาร์ดแวร์หรือการเชื่อมต่อที่ไม่เสถียรก่อน หากข้อมูลมีความสำคัญ ให้ลดการเขียนให้น้อยที่สุดและจัดเตรียมการสำรองข้อมูลหรืออิมเมจระดับบล็อกกับผู้ดูแลระบบก่อนที่จะพยายามซ่อมแซมระบบไฟล์
4. เลือกวิธีการรักษาที่มีความเสี่ยงน้อยที่สุดที่สอดคล้องกับหลักฐาน
สิ่งที่คุณพบ การดำเนินการถัดไป การแลกเปลี่ยน
roได้รับการกำหนดค่าแล้ว หรือการเมานต์ถูกตั้งใจให้เป็นแบบอ่านอย่างเดียว ไม่มีข้อผิดพลาดของเคอร์เนลที่เกี่ยวข้องแก้ไขการตั้งค่าการเมานต์หากไม่ถูกต้อง หรือเมานต์ซับวอลุ่มที่เขียนได้ตามปกติอีกครั้งหลังจากตรวจสอบแล้วว่าอุปกรณ์อยู่ในสภาพสมบูรณ์ แม้จะรวดเร็ว แต่การเมานต์ใหม่ไม่สามารถล้างสถานะอ่านอย่างเดียวที่เกิดจากข้อผิดพลาด หรือทำให้สแนปช็อตแบบอ่านอย่างเดียวสามารถเขียนได้
การสร้างสแนปช็อตรูทที่สามารถบูตได้นั้นใช้งานได้ และปัญหาดังกล่าวเกิดขึ้นหลังจากการเปลี่ยนแปลงระบบ บูตเครื่องและทดสอบสแนปช็อต จากนั้นเรียกใช้งานsudo snapper rollbackและรีบูตเครื่องเพื่อกลับไปยังค่าเริ่มต้น กู้คืนซับโวลุ่มรูทให้กลับสู่สถานะสแนปช็อต ข้อมูลในซับโวลุ่มที่ถูกยกเว้นหรือแยกต่างหากจะไม่ถูกย้อนกลับ SLES 15 SP7 รองรับการย้อนกลับนี้เฉพาะกับโครงสร้างซับโวลุ่มรูทเริ่มต้นและระบบไฟล์รูทแบบอุปกรณ์เดียวเท่านั้น
บันทึกเคอร์เนลประกอบด้วยข้อผิดพลาด I/O ของหน่วยเก็บข้อมูลหรือข้อผิดพลาดโครงสร้างของ Btrfs รักษาเสถียรภาพการจัดเก็บข้อมูลและปกป้องข้อมูล ใช้สภาพแวดล้อมการกู้คืนและยกระดับสิทธิ์เพื่อการกู้คืนเฉพาะระบบไฟล์ ช้ากว่า แต่ช่วยหลีกเลี่ยงการซ่อนปัญหาฮาร์ดแวร์ที่ยังแก้ไม่ตกด้วยการติดตั้งใหม่แบบเขียนได้
มีการรายงานเพียงว่าพื้นที่จัดเก็บข้อมูลหมดเท่านั้น ไม่มีข้อผิดพลาดในการจัดเก็บข้อมูล ตรวจสอบระยะเวลาการเก็บรักษาข้อมูลของ Snapper และจำนวนสแนปช็อตหรือข้อมูลที่ได้รับอนุญาตฟรี จากนั้นตรวจสอบการใช้งาน Btrfs อีกครั้ง เพิ่มพื้นที่จัดเก็บข้อมูลโดยแลกกับการสูญเสียจุดกู้คืนหรือไฟล์ที่เลือกไว้
เลือกสแนปช็อตจากช่วงเวลาก่อนเกิดข้อผิดพลาด ตรวจสอบการบูตทดสอบแบบอ่านอย่างเดียว จากนั้นทำการย้อนกลับด้วย Snapper หากวิธีนี้ช่วยแก้ปัญหาได้
บน SLES สแนปช็อตที่สามารถบูตได้จะใช้การกำหนดค่ารูท Snapper ตามค่าเริ่มต้น รูทต้องเป็น Btrfs บนอุปกรณ์หนึ่งตัว บูตโหลดเดอร์ต้องรองรับ และจะย้อนกลับเฉพาะซับโวลุ่มรูทเท่านั้น ตรวจสอบตัวเลือกก่อนที่จะยืนยัน หากไม่เหมาะสม ให้รีบูตไปยังระบบปัจจุบันหรือสภาพแวดล้อมกู้คืน ดู ขั้นตอนการย้อนกลับ Snapper ใน SLES 15 SP7
เมื่อใดจึงเหมาะสมที่จะทำการตรวจสอบแบบออฟไลน์หรือทำการคัดกรองข้อมูล
หากระบบไฟล์ไม่สามารถเมานต์ได้ หรือข้อความจากเคอร์เนลบ่งชี้ถึงความเสียหายทางโครงสร้าง ให้บูตระบบกู้คืน SLES หรือสภาพแวดล้อมการกู้คืนที่เหมาะสมอื่นๆ ระบุอุปกรณ์ที่ถูกต้อง และตรวจสอบให้แน่ใจว่าได้ยกเลิกการเมานต์อุปกรณ์นั้นแล้ว ก่อนที่จะเรียกใช้การตรวจสอบแบบอ่านอย่างเดียวตามค่าเริ่มต้น:
sudo btrfs check /dev/DEVICE
ใช้บล็อกอุปกรณ์ Btrfs จริง ไม่ใช่ตัวยึดตำแหน่งจุดเชื่อมต่อ การตรวจสอบอาจใช้เวลานานและใช้หน่วยความจำมาก และจะรายงานเฉพาะข้อบกพร่องเชิงโครงสร้างเท่านั้น การตรวจสอบนี้ไม่รับประกันว่าจะซ่อมแซมได้ อย่าเพิ่ม--repairเป็นขั้นตอนถัดไปตามปกติ เอกสาร Btrfs เตือนว่าการซ่อมแซมอาจทำให้สถานการณ์แย่ลง และควรใช้ภายใต้คำแนะนำของผู้เชี่ยวชาญหลังจากยอมรับความเสี่ยงด้านข้อมูลแล้วเท่านั้น โปรดติดต่อฝ่ายสนับสนุนของ SUSE หรือผู้เชี่ยวชาญด้าน Btrfs เมื่อการตรวจสอบรายงานข้อผิดพลาดหรืออุปกรณ์มีข้อบกพร่องด้าน I/O
หลังจากที่ระบบจัดเก็บข้อมูลเสถียรและติดตั้งระบบไฟล์แบบอ่านเขียนแล้วsudo btrfs scrub start -B /dataสามารถตรวจสอบค่าตรวจสอบความถูกต้อง (checksum) ได้ Scrub ไม่ใช่โปรแกรมตรวจสอบโครงสร้าง มันสามารถซ่อมแซมความเสียหายได้จากสำเนาสำรองที่ใช้งานได้ดีเท่านั้น ในระบบที่มีสำเนาเดียว มันจะตรวจจับข้อผิดพลาดได้ แต่ไม่สามารถกู้คืนข้อมูลที่สูญหายได้ โปรดอ่านเอกสารประกอบการใช้งาน Btrfs scrub นอกจากนี้ โปรดดูคู่มือระบบไฟล์ SLES 15 SP7 ของ SUSE บทความเกี่ยวกับการกู้คืน Btrfs ของ SUSE และคู่มือการตรวจสอบ Btrfs ด้วย
ตรวจสอบผลลัพธ์
หลังจากเลือกวิธีการกู้คืนข้อมูลแล้ว ตรวจสอบว่าอุปกรณ์ที่เชื่อมต่อมีตัวเลือกตามที่ต้องการและสามารถทำการเขียนข้อมูลได้อย่างปลอดภัย:
findmnt -T /data -o TARGET,SOURCE,FSTYPE,OPTIONS
sudo touch /data/.rw-check && sudo rm /data/.rw-check
สำหรับการย้อนกลับสแนปช็อตหลัก ให้รีบูตเครื่องก่อนและตรวจสอบให้แน่ใจว่าระบบเริ่มต้นทำงานตามปกติ จากนั้นตรวจสอบบันทึกเคอร์เนลใหม่เพื่อหาข้อผิดพลาด Btrfs หรือข้อผิดพลาดของอุปกรณ์ที่เกิดขึ้นซ้ำๆ สถานะการอ่าน-เขียนเพียงอย่างเดียวไม่ได้หมายความว่าระบบทำงานได้อย่างสมบูรณ์ หากเกิดข้อผิดพลาดซ้ำ ให้หยุดการเขียนและกลับไปที่การวินิจฉัยระบบจัดเก็บข้อมูล