เรื่องนี้เกิดขึ้นเมื่อเที่ยงๆ วันอาทิตย์ที่ผ่านมา ผมได้รับโทรศัพท์จากลูกค้า ซึ่งเป็นพี่ที่คุ้นเคยกันเป็นอย่างดี ว่าเค้าได้ลอง reboot เครื่อง Linux Server (CentOS 6.x) แล้วพบว่า boot กลับขึ้นมาไม่ได้ ช่วยแก้ปัญหาให้หน่อย หลังจากที่ฟังดูอาการแล้ว ปัญหาเหมือนอยู่ที่ disk คือ อยู่ในขั้นตอนการ boot Linux Server และ Linux พยายาม mount filesystem ทั้งหมดที่อยู่ใน config file ที่ชื่อ /etc/fstab แต่ปรากฏว่า บาง filesystem mount ไม่ได้ ระบบจะหยุด boot และ ให้เราแก้ปัญหาเอง โดยที่จอ console จะมีการขึ้น prompt ให้เราป้อน root password และเรียกใช้คำสั่งเพื่อซ่อม filesystem ที่มีปัญหา (Linux จะแนะนำว่าให้ใช้คำสั่งอะไร)
ผมได้แนะนำลูกค้าท่านนี้ให้ทำตามขั้นตอนที่ระบบแนะนำ และลอง reboot ใหม่อยู่หลายรอบ แต่ไม่สำเร็จ เลยต้องรีบทานเข้ากลางวันและบิ่งไปหาลูกค้าโดยเร็ว หลังจากไปถึงก็ได้ลองซ่อม filesystem ดูตามที่ Linux แนะนำ แต่ไม่สำเร็จ ตามรูป
วิเคราะห์ปัญหาและแนวทางการแก้ไข
Server เครื่องนี้ ค่อนข้างจะพิเศษคือนอกจาก disk ปกติแล้ว จะมี Solid State Card (SSC) อยุ่สองใบ (เป็น card เสียบเลยครับ ไม่ใช้ Harddisk) ใช้เก็บข้อมูล และลูกค้าอยากให้ SSC สองใบนี้ทำ mirror กัน ที่นี้จะทำที่ Bios ก็ไม่ได้ คาดว่า Raid Software บน Bios ทำ Raid กับ SS Card ไม่ได้ ทางเลือกที่เหลือคือผมทำ Raid Mirror โดยใช้ Software Raid บน Linux เสร็จแล้ว ก็สร้าง Logical Volume (LV) บน Raid SS Card อีกที เพื่อ disk เต็มจะได้เพิ่ม Disk เข้าไปใน Logical Volume ได้โดยไม่ต้อง Backup & Restore disk
ซึ่งพอผมนั่งดู error โดยละเอียด เปรียบเทียบกับข้อมูลที่เคยเก็บไว้ พบว่า lv device /dev/vgdata/lvol0 ที่มีปัญหาคือ คือ LV นี้ถูกสร้างอยู่บน Solid State Card นี้เอง สิ่งแรกที่ผมตัดสินใจลอง คือทำการแก้ไขไฟล์ /etc/fstab ให้ไม่ให้ mount filesystem ของ lv ที่มีปัญหานี้
แก้ปัญหา boot Linux ด้วย Rescue Mode
ที่นี้ถึงแม้ เราตอนนี้จะเข้า prompt ได้แต่อยู่ใน mode พิเศษ ซึ่งแก้ไขไฟล์บนเครื่องไม่ได้เลย ซึ่งรวมถึง file /etc/fstab ด้วย จะ boot ปกติ ก็ไม่ได้ วิธีที่เหลือคือ ใช้ install DVD ของเครื่องนี้ ทำการ Boot แทน และเข้า Rescue Mode ซึ่งในกรณีนี้ file /etc/fstab จะอยู่ที่ /mnt/sysimage/etc/fstab
หลังจาก boot ด้วย Recuse Mode เรียบร้อยแล้ว ผมเลยลอง comment บรรทัด ที่ mount device /dev/vgdata/lvol0 ออกก่อน (โดยการใส่เครื่องหมาย # ที่ต้นบรรทัด) และลอง reboot ใหม่ คราวนี้ Linux Server สามารถ Boot ผ่าน สามารถใช้งานได้เกือบเหมือนปกติ แปลว่าปัญหาอยู่ที่ ตัว device /dev/vgdata/lvol0 นี้จริงๆ
ลูกค้าผมก็โทรไปถาม Vendor เจ้าของ Server เครื่องนี้ ซึ่ง Technical support ของ Vendor เค้าบอกว่าควรกด (R) ทำการ Repair ซึ่งลูกค้าผมก็ทำตามคำแนะนำ เลยเกิดปัญหา ( โดน Hardware Vendor แอบวาง bug ซะแล้ว ) ซึ่งปกติถ้าไม่สนใจ สักพัก Bios มันจะ Skip ข้ามขั้นตอนนี้ไป นี่คือเหตุผลทำไม่ก่อนหน้านี้ ไม่มีปัญหา เดียวกลับมาเรื่องนี้ใหม่ ขอข้ามไปก่อน
แก้ปัญหาหลังจาก boot ได้ปกติ
พอ boot Linux ตามปกติได้ สิ่งที่เหลือคือ ต้อง mount device /dev/vgdata/lvol0 ให้ได้ ซึ่ง device นี้เก็บข้อมูลหลักขององค์กร ไม่งั้นก็ต้อง เอาข้อมูลจาก tape backup ลงซึ่งเป็นมาตรการสุดท้าย ซึ่งยังไงผมก็ขอลองแก้ให้ถึงที่สุดก่อน
พอลองตรวจสอบดู พบว่า Linux มองเห็น ตัว Solid State Card Device ทั้งสองตัว (nvme0n1, nvme1n1) ตามรูป
ดังนั้นสิ่งทีต้องทำคือสร้าง software raid ใหม่ โดยใช้คำสั่ง mdadm ตามรูป พร้อมกับสร้าง config ของ software raid ใหม่ (mdadm --detail --scan > /etc/mdadm.conf) โดยไม่ลืมเก็บ config file ของเดิมไว้ด้วย กันพลาด
หลังจากนั้น ก็ลองตรวจสอบว่า software raid ทำงานหรือไม่ (cat /proc/mdstat) สรุปว่าเริ่มทำงานแล้วครับ
ทดลอง Reboot อีกหนึ่งคร้ง โดยไม่ repair ตาม warning ใน BIOS เพื่อดูว่า device file /dev/vgdata/vol0 จะกลับมาหรือไม่ ซึ่งโชคดี กลับมาครับ ถึงจุดนี้ สามารถทดลอง mount filesystem /dev/vgdata/vol0 ได้ ตรวจสอบข้อมูล อยู่ครบครับ โชคดีไป
พอแน่ใจแล้ว ก็ edit ไฟล์ /etc/fstab และลบ comment ที่ใส่ไว้ก่อนหน้านี้ออก เพื่อให้ระบบทำการ mount filesystem อัตโนมัติ ตอน reboot
วิเคราะห์และทดสอบ หาสาเหตุที่แท้จริง
คำถามที่คาใจผมกับลูกค้าคือ การสั่งให้ Bios ของเครื่องนี้ทำการซ่อม GPT ที่มีปัญหา (Repair GPT corruption) เป็นต้นเหตุของปัญหาทั้งมวล จริงหรือไม่ เราเลยทำการ Reboot อีกสองรอบ รอบแรกลองไม่ Repair เครื่อง Server ก็ทำงานได้ พอ reboot รอบสอง ลอง Repair เกิดปัญหาเหมือนเดิมเลย
จากการวิเคราะห์สาเหตุของปัญหา ผมคาดว่า ตัว Software Raid เก็บข้อมูลว่าจะทำ Raid บน disk ลูกไหน โดยอ้างอิง Disk UID พอเราสั่ง Repair เลยทำให้ Disk UID เปลี่ยน โดยดูจาก ค่า UUID ของ Disk ที่เก็บไว้ใน /etc/mdadm.conf ก่อนและหลังการ repair GPT Corruption ตามรูป
ลูกค้าได้บอกว่า การที่อยู่ๆ เกิด GPT Corruption นี้เป็น Bug ของ Bios ครับ ถ้า update Bios แล้วจะหาย ก็คงต้องมาดูกันต่อไปครับ ว่า ปัญหาจะหายหรือไม่
No comments:
Post a Comment