คุณพยายามบันทึกไฟล์หรืออัปเดตบริการบน SUSE Linux Enterprise Server (SLES) และ Linux ตอบกลับด้วยข้อความ “ระบบไฟล์อ่านอย่างเดียว” ข้อความนั้นอาจหมายความว่าการเมานต์ถูกตั้งค่าเป็นอ่านอย่างเดียวโดยเจตนา คุณบูตเข้าสู่สแนปช็อต Snapper ที่อ่านอย่างเดียว หรือ Btrfs ตรวจพบปัญหาและหยุดรับการเขียนเพื่อป้องกันวอลุ่ม สาเหตุเหล่านี้ต้องการการแก้ไขที่แตกต่างกัน เริ่มต้นด้วยการระบุว่าระบบไฟล์และการเมานต์ใดเกี่ยวข้อง อย่าบังคับการเมานต์ใหม่หรือเรียกใช้คำสั่งซ่อมแซมก่อนที่จะตรวจสอบบันทึกเคอร์เนลและปกป้องข้อมูลสำคัญ
ข้อผิดพลาดนั้นหมายความว่าอย่างไร
Btrfs เป็นระบบไฟล์ Linux แบบ copy-on-write ที่ใช้เป็นค่าเริ่มต้นสำหรับระบบไฟล์รูทของ SLES ในการติดตั้งมาตรฐานหลายๆ ครั้งซับโวลุ่ม Btrfs คือส่วนหนึ่งของระบบไฟล์ที่สามารถเมานต์ได้อย่างอิสระสแนปช็อตคือสำเนาของซับโวลุ่ม ณ จุดเวลาหนึ่งๆ ที่ใช้บล็อกข้อมูลที่ไม่เปลี่ยนแปลงร่วมกัน Snapper และเมนูบูตของ SLES สามารถใช้สแนปช็อตเพื่อกู้คืนจากความเปลี่ยนแปลงของระบบได้ การบูตสแนปช็อตจะเมานต์ส่วนที่รวมอยู่แบบอ่านอย่างเดียว นอกจากนี้ Btrfs ยังสามารถเปลี่ยนเป็นโหมดอ่านอย่างเดียวได้หลังจากตรวจพบข้อผิดพลาดเชิงโครงสร้างบางอย่างเพื่อหลีกเลี่ยงการเขียนเพิ่มเติม SUSE ได้บันทึกพฤติกรรมของสแนปช็อตไว้ในคู่มือ Snapper ของ SLES 15 SP7โครงการ Btrfs อธิบายว่าการตรวจสอบโครงสร้างระบบไฟล์สามารถเปลี่ยนโวลุ่มเป็นโหมดอ่านอย่างเดียวเพื่อป้องกันความเสียหายเพิ่มเติมในเอกสาร tree-checkerป้ายกำกับเมนูและตัวเลือกการกู้คืนที่มีให้ใช้งานอาจแตกต่างกันไปตาม service pack ของ SLES และรูปแบบการจัดเก็บข้อมูล
ปัญหาเรื่องสิทธิ์การเข้าถึงนั้นแตกต่างออกไป “การอนุญาตถูกปฏิเสธ” มักหมายถึงความเป็นเจ้าของหรือการควบคุมการเข้าถึง ในขณะที่ “ระบบไฟล์อ่านอย่างเดียว” (มักแสดงเป็นEROFS) หมายถึงสถานะของระบบไฟล์หรือซับโวลุ่ม การเปลี่ยนสิทธิ์การเข้าถึงไฟล์ด้วยchmodจะไม่ทำให้การเมานต์แบบอ่านอย่างเดียวสามารถเขียนได้
ก่อนที่คุณจะเปลี่ยนแปลงอะไรก็ตาม
หากนี่คือเซิร์ฟเวอร์ที่ใช้งานจริง ไดรฟ์ฐานข้อมูล หรือสำเนาข้อมูลสำคัญเพียงชุดเดียว โปรดติดต่อผู้ดูแลระบบและยืนยันการสำรองข้อมูลก่อนที่จะพยายามกู้คืน เมื่อระบบยังคงสามารถอ่านได้ ให้คัดลอกไฟล์ที่สำคัญที่สุดไปยังพื้นที่จัดเก็บข้อมูลที่ใช้งานได้ปกติแยกต่างหาก หากคุณสามารถทำได้โดยไม่ทำให้เครื่องที่กำลังจะเสียทำงานหนักเกินไป ระบบไฟล์ Btrfs อาจมีการเปลี่ยนแปลงเมตาเดต้าล่าสุดเฉพาะในหน่วยความจำหลังจากเกิดข้อผิดพลาดร้ายแรง การยกเลิกการเชื่อมต่อหรือการรีบูตอาจทำให้การเปลี่ยนแปลงที่ยังไม่ได้บันทึกเหล่านั้นสูญหายไป หากบันทึกกล่าวถึงข้อผิดพลาด I/O อุปกรณ์หายไป หรือการรีเซ็ตซ้ำๆ ให้ให้ความสำคัญกับสุขภาพของพื้นที่จัดเก็บข้อมูลและการปกป้องข้อมูลมากกว่าการกู้คืนข้อมูลที่เขียนลงไป
อย่าเรียกใช้btrfs check --repairโหมดซ่อมแซมเป็นขั้นตอนแรกตามปกติ โครงการ Btrfs เตือนว่าโหมดซ่อมแซมอาจทำให้เกิดความเสียหายและไม่สามารถแก้ไขความเสียหายทุกประเภทได้ อย่าบังคับการเมานต์แบบอ่าน-เขียนซ้ำๆ เช่นกัน: อาจล้มเหลวทันทีเมื่อเคอร์เนลได้ป้องกันระบบไฟล์ไว้ด้วยเหตุผลบางประการ
ขั้นตอนที่ 1: ระบุตำแหน่งการติดตั้งที่ได้รับผลกระทบ
ใช้เส้นทางที่การเขียนล้มเหลว ตัวอย่างเช่น หากบริการไม่สามารถเขียนไป/srv/appยัง ให้ตรวจสอบเส้นทางนั้นแทนที่จะสันนิษฐานว่าระบบไฟล์รูทเป็นปัญหา:
findmnt -T /srv/app -o TARGET,SOURCE,FSTYPE,OPTIONS
แทนที่/srv/appด้วยไฟล์หรือไดเร็กทอรีที่ได้รับผลกระทบ ตรวจสอบผลลัพธ์เพื่อดูแหล่งที่มาของ Btrfs เป้าหมายการเมานต์ และตัวเลือกroหรือrwเป้าหมายอาจเป็น/การเมานต์ข้อมูลแยกต่างหาก หรือซับโวลุ่ม บันทึกแหล่งที่มาและเป้าหมายก่อนดำเนินการต่อ หากคำสั่งรายงานประเภทระบบไฟล์อื่น ขั้นตอนเฉพาะของ Btrfs จะไม่สามารถใช้ได้กับเส้นทางนั้น
ตรวจสอบข้อความเคอร์เนลจากการบูตครั้งปัจจุบันเพื่อหาสาเหตุที่ระบบไฟล์กลายเป็นโหมดอ่านอย่างเดียว:
sudo journalctl -k -b --no-pager | grep -iE 'btrfs|I/O error|read-only|readonly'
มองหาข้อผิดพลาด Btrfs หรือข้อความ "บังคับอ่านอย่างเดียว" ข้อผิดพลาดเกี่ยวกับ checksum หรือ tree ความล้มเหลวในการรับส่งข้อมูลของอุปกรณ์ และการตัดการเชื่อมต่อของอุปกรณ์ บรรทัดบันทึกเป็นเพียงเบาะแส ไม่ใช่การวินิจฉัยที่สมบูรณ์ บันทึกข้อความและเวลาที่เกี่ยวข้องก่อนรีบูต เนื่องจากบันทึกเหล่านี้อาจเป็นประโยชน์ต่อทีมสนับสนุนด้านการจัดเก็บข้อมูลหรือฮาร์ดแวร์
ขั้นตอนที่ 2: ตรวจสอบว่ามีการสร้างสแนปช็อตแบบอ่านอย่างเดียวโดยเจตนาหรือไม่
หากเซิร์ฟเวอร์เริ่มต้นจากสแนปช็อตที่สามารถบูตได้ใน GRUB ไฟล์ที่รวมอยู่ในสแนปช็อตนั้นจะเป็นแบบอ่านอย่างเดียวตามที่ออกแบบไว้ นี่คือสภาพแวดล้อมการกู้คืนเพื่อตรวจสอบสถานะระบบก่อนหน้า ไม่ใช่ระบบที่กู้คืนอย่างถาวรโดยอัตโนมัติ ยืนยันรายการบูตกับผู้ดูแลระบบ จากนั้นรีบูตและเลือกรายการ SLES เริ่มต้นตามปกติหากการบูตสแนปช็อตเกิดขึ้นโดยไม่ได้ตั้งใจ เอกสารของ SUSE ระบุว่าการบูตสแนปช็อตจะติดตั้งส่วนของระบบไฟล์ที่รวมอยู่เป็นแบบอ่านอย่างเดียว และอธิบายขั้นตอนการย้อนกลับแยกต่างหากในคู่มือการกู้คืน Snapper ของSLES 15 SP7
สแนปช็อตบางภาพอาจเป็นแบบอ่านอย่างเดียว แม้ว่าระบบไฟล์หลักจะถูกเมานต์แบบอ่านเขียนก็ตาม หากคุณกำลังทำงานกับสแนปช็อตโดยตั้งใจ โปรดตรวจสอบโดยไม่เปลี่ยนแปลงข้อมูล:
sudo btrfs property get -t subvol /path/to/subvolume ro
แทนที่พาธด้วยพาธการเมานต์ของซับโวลุ่ม ผลลัพธ์ที่ได้ro=trueยืนยันว่าคุณสมบัติของซับโวลุ่มเป็นแบบอ่านอย่างเดียว เอกสาร อ้างอิงคุณสมบัติของ Btrfs อธิบายสถานะนี้ไว้ อย่าเปลี่ยนสถานะสแนปช็อตสำรองข้อมูลที่จัดการโดย Snapper หรือที่ได้รับมาเป็นอ่านเขียนโดยตรง สถานะอ่านอย่างเดียวอาจเป็นส่วนหนึ่งของสมมติฐานการย้อนกลับหรือการสำรองข้อมูลแบบเพิ่มทีละส่วน ใช้เวิร์กโฟลว์ของ Snapper ที่รองรับ หรือสร้างซับโวลุ่มที่เขียนได้แยกต่างหากเมื่อนั่นเป็นงานที่ต้องการ
ขั้นตอนที่ 3: ตรวจสอบการตั้งค่าการเชื่อมต่อและสถานะพื้นที่จัดเก็บข้อมูล
หากfindmntรายงานroและบันทึกไม่แสดงข้อผิดพลาด Btrfs หรือ I/O ให้ตรวจสอบรายการเมานต์ที่ตรงกันใน/etc/fstab. การเมานต์อาจถูกกำหนดค่าเป็นแบบอ่านอย่างเดียวโดยเจตนาเพื่อการกู้คืน อิมเมจอุปกรณ์ หรือนโยบายการปกป้องข้อมูล เปลี่ยนการกำหนดค่าหลังจากยืนยันสถานะที่ต้องการกับเจ้าของบริการแล้วเท่านั้น ตรวจสอบด้วยว่าระบบใช้การปรับใช้แบบธุรกรรมหรือแบบอ่านอย่างเดียวหรือไม่: SLES ได้จัดทำเอกสารเกี่ยวกับการกำหนดค่าดังกล่าวและขั้นตอนการบำรุงรักษาไว้ในคู่มือการอัปเดตแบบธุรกรรมหากรายการนั้นตั้งใจให้เขียนได้ อุปกรณ์อยู่ในสภาพสมบูรณ์ และเส้นทางไม่ใช่สแนปช็อตแบบอ่านอย่างเดียว ผู้ดูแลระบบสามารถลองเมานต์ใหม่ชั่วคราวได้:
sudo mount -o remount,rw /mountpoint
แทนที่/mountpointด้วยเป้าหมายที่แสดงไว้อย่างแม่นยำ การดำเนิน findmntการนี้ไม่ได้วินิจฉัยหรือซ่อมแซมความเสียหาย หากล้มเหลว ส่งคืนข้อผิดพลาด หรือบันทึกเคอร์เนลแสดงปัญหาเกี่ยวกับพื้นที่จัดเก็บข้อมูล ให้หยุดและดำเนินการวางแผนการกู้คืนแทนที่จะลองใหม่ด้วยตัวเลือกเพิ่มเติม
หากพบปัญหาเกี่ยวกับความจุ โปรดตรวจสอบการจัดสรร Btrfs และสถานะของอุปกรณ์:
sudo btrfs filesystem usage /mountpoint
sudo btrfs filesystem show /mountpoint
SUSE ระบุว่า ข้อมูลสรุปพื้นที่ว่างบนดิสก์ทั่วไปอาจทำให้เข้าใจผิดได้ในระบบไฟล์ Btrfs เนื่องจากข้อมูลและเมตาเดต้าถูกจัดสรรแยกกัน สแนปช็อตของ Snapper ยังสามารถเก็บพื้นที่ไว้ได้มาก อย่างไรก็ตาม ข้อความ “ไม่มีพื้นที่เหลือบนอุปกรณ์” ไม่เหมือนกับข้อผิดพลาดแบบอ่านอย่างเดียวของ Btrfs โปรดตรวจสอบว่าแอปพลิเคชันได้รับข้อความใดจริง ๆ อย่าลบสแนปช็อตเพียงเพื่อทดสอบทฤษฎี ตรวจสอบสิ่งที่สแนปช็อตเหล่านั้นมีอยู่และปฏิบัติตามนโยบายการเก็บรักษาที่เกี่ยวข้องก่อน ดูคู่มือการแก้ไขปัญหาของระบบไฟล์ SLES 15 SP7
ขั้นตอนที่ 4: ตัดสินใจว่าระบบไฟล์จำเป็นต้องกู้คืนหรือไม่
หากพบข้อผิดพลาด Btrfs ในบันทึกเคอร์เนล อุปกรณ์หายไป หรือการเมานต์ใหม่ถูกปฏิเสธ ให้เก็บรักษาบันทึกและจัดเตรียมการสำรองข้อมูลที่ตรวจสอบแล้วหรือสแนปช็อตระดับพื้นที่จัดเก็บก่อนเริ่มดำเนินการซ่อมแซม สำหรับวอลุ่มข้อมูลที่ไม่ใช่รูท ให้วางแผนช่วงเวลาการบำรุงรักษาและยกเลิกการเมานต์ก่อนตรวจสอบแบบออฟไลน์ สำหรับระบบไฟล์รูท ให้ใช้สื่อการติดตั้งหรือกู้คืนของ SUSE และปฏิบัติตามขั้นตอนสำหรับรุ่น SLES และลักษณะข้อผิดพลาดที่ถูกต้อง อย่าเดาชื่ออุปกรณ์: ระบบไฟล์ Btrfs สามารถครอบคลุมอุปกรณ์หลายตัว ดังนั้นจึงต้องระบุสมาชิกทั้งหมดและตัวระบุการเมานต์หรืออุปกรณ์ที่ถูกต้องก่อน
คู่มือการดูแลระบบ SLES 15 SP7 ของ SUSE มีส่วนเฉพาะสำหรับพาร์ติชัน Btrfs รูทที่ไม่สามารถเมานต์ได้ โดยจะกล่าวถึงตัวเลือกการกู้คืนสำหรับความล้มเหลวในการบูตดังกล่าว คำแนะนำเหล่านั้นไม่ได้หมายความว่าไฟล์ระบบแบบอ่านอย่างเดียวที่เมานต์ทุกระบบควรล้างล็อกคู่มือ btrfs-rescue ต้นฉบับ อธิบายว่า การล้างล็อกนั้น btrfs rescue zero-logใช้สำหรับความล้มเหลวในการเล่นล็อกซ้ำบางกรณีระหว่างการเมานต์ และสามารถทิ้งการเปลี่ยนแปลงตั้งแต่ธุรกรรมที่ยืนยันครั้งล่าสุดได้ ควรใช้เฉพาะเมื่อข้อผิดพลาดที่บันทึกไว้ตรงกับกรณีที่ระบุไว้ และแผนการกู้คืนคำนึงถึงการสูญเสียข้อมูลที่อาจเกิดขึ้นได้
btrfs checkโดยค่าเริ่มต้น โปรแกรมจะทำงานในโหมดอ่านอย่างเดียวบนระบบไฟล์ที่ยังไม่ได้เมานต์ ควรคงสถานะนี้ไว้สำหรับการประเมินเบื้องต้น และแบ่งปันผลลัพธ์กับฝ่ายสนับสนุนของ SUSE หรือผู้เชี่ยวชาญด้าน Btrfs คู่มือการใช้งาน btrfs-check ต้นฉบับ ได้เตือนไว้อย่างชัดเจนว่าไม่ควรใช้งาน--repairโดยปราศจากคำแนะนำจากผู้ใช้หรือนักพัฒนาที่มีประสบการณ์ ห้ามเรียกใช้โปรแกรมตรวจสอบแบบออฟไลน์บนระบบไฟล์ที่เมานต์และมีการเปลี่ยนแปลงเด็ดขาด
ขั้นตอนที่ 5: ตรวจสอบการกู้คืน
หลังจากแก้ไขสาเหตุแล้ว ให้รีบูตเฉพาะเมื่อแผนการกู้คืนกำหนดไว้เท่านั้น จากนั้นใช้งานfindmnt -T /path -o TARGET,SOURCE,FSTYPE,OPTIONSอีกครั้งและตรวจสอบให้แน่ใจว่าการเชื่อมต่อที่ต้องการนั้นสามารถอ่านและเขียนได้ ตรวจสอบบันทึกเคอร์เนลเพื่อหาข้อผิดพลาด Btrfs หรือ I/O ใหม่ๆ สุดท้าย ตรวจสอบว่าบริการหรือแอปพลิเคชันที่ได้รับผลกระทบสามารถทำงานได้ตามปกติ และตรวจสอบให้แน่ใจว่าข้อมูลสำรองยังคงใช้งานได้ การเชื่อมต่อใหม่สำเร็จเพียงอย่างเดียวไม่ได้พิสูจน์ว่าพื้นที่จัดเก็บข้อมูลนั้นอยู่ในสภาพดี
หากระบบไฟล์กลับสู่โหมดอ่านอย่างเดียว อุปกรณ์หยุดทำงาน หรือเกิดข้อผิดพลาดต่อเนื่อง ให้หยุดการเขียนและส่งข้อมูลบันทึก ข้อมูลเอาต์พุตfindmntรายการอุปกรณ์ Btrfs ระดับ Service Pack ของ SLES และรายละเอียดตัวควบคุมการจัดเก็บข้อมูลไปยังระดับที่สูงขึ้น หลักฐานเหล่านี้ช่วยแยกแยะความแตกต่างระหว่างการตั้งค่าสแนปช็อตหรือตัวเลือกการเมานต์โดยเจตนา กับความเสียหายของสื่อ การเชื่อมต่อ ไดรเวอร์ หรือระบบไฟล์ และหลีกเลี่ยงการเปลี่ยนสถานะอ่านอย่างเดียวที่เป็นการป้องกันให้กลายเป็นปัญหาการกู้คืนที่ใหญ่ขึ้น