เมื่อเร็วๆ นี้บนระบบหนึ่ง VirtualBox หยุดทำงาน ไม่ว่าจะพยายาม launch VM ไหน ก็โยน error เดียวกัน Popup อ่านว่า: Failed to open a session for the virtual machine [ชื่อ VM] ในกล่องรายละเอียด: NS_ERROR_FAILURE (0x80004005)
ข้อความน่าปริศนาและ generic ไม่ให้ clue ทันทีว่าผิดที่ไหน ลอง troubleshooting หลัง trial and error ได้คู่มือเล็กๆ นี้ อาจไม่แก้ปัญหาทั้งหมด (รหัส error เดียวกัน) แต่อาจให้แนวทางพอแก้ปัญเฉพาะของคุณ ตามมา
(ภาพประกอบ error popup)
ปัญหาในรายละเอียด (Problem in more detail)
Popup ไม่บอกมาก ต้องดู system logs พบข้อมูลที่มีประโยชน์กว่า: ดูเหมือน VirtualBox VMSVGA graphics driver crash และ error ชี้ไปที่ libX11 shared library
Feb 3 12:21:09 kernel: [] VMSVGA FIFO[11413]: segfault at f8 ip 00007fcf4df5ada4 sp 00007fced9329c40 error 4 in libX11.so.6.3.0[7fcf4df40000+133000]
ขณะนั้นคิดว่าบางอย่างผิดปกติกับ VirtualBox instance ตัดสินใจทำทีละขั้นตอนอย่างเป็นระบบ ก่อนอื่น rebuild VirtualBox modules ด้วย vboxconfig (ยัง restart service ด้วย)
sudo vboxconfig vboxdrv.sh: Stopping VirtualBox services. vboxdrv.sh: Starting VirtualBox services. vboxdrv.sh: Building VirtualBox kernel modules.
แต่ไม่แก้ปัญหาทันที คิดต่อว่าอะไรอีกบ้างของ VirtualBox อาจผิด แต่ไม่ได้ครอบคลุมโดย vboxconfig นึกถึง VirtualBox Extensions pack?
ดูที่ติดตั้งบนระบบที่มีปัญหา พบว่า VirtualBox และ Extensions pack เวอร์ชันต่างกัน ไม่ดีและนำไปสู่ unexpected behavior ซึ่งเกิดขึ้นจริง ใน Linux ปัญหาเพิ่มขึ้นเพราะตอน launch VirtualBox จะตรวจสอบอัปเดต Extensions pack และให้ติดตั้ง ส่วน core program ใช้ system update ถ้าทั้งสองไม่เกิดต่อเนื่องกัน (system ก่อน extensions ต่อมา) อาจจบลงที่ VM รันไม่ได้
(ภาพประกอบ Extensions pack version mismatch)
วิธีแก้ (Solution)
Fix คือ remove offending pack แล้วติดตั้งเวอร์ชันที่ตรงกับ VirtualBox program หรือ vice versa ต้อง match กัน ไปที่ File > Preferences > Extensions กด Remove แต่ได้ error เดียวกันตอนพยายาม remove pack!
ทำความสะอาดผ่านบรรทัดคำสั่ง (Command-line cleanup)
แก้ปัญหาครั้งที่สอง: ทำ cleanup ใน terminal - ใช้คำสั่ง install/remove extension packs (และ force removals)
VBoxManage extpack cleanup Successfully performed extension pack cleanup
กลับไป GUI remove pack ได้ แล้วดาวน์โหลดและติดตั้งใหม่ เวอร์ชันตรงกับ main program:
(ภาพประกอบ)
ตอนนี้ VM รันได้เหมือนเดิม!
สรุป (Conclusion)
ปัญหาข้างต้นเป็น self-made แต่ควรมีวิธีทำให้ robust มากขึ้น เช่น ไม่อนุญาต incompatible extension packs เก็บหลายเวอร์ชันไว้ (restore) ใช้ default fail ให้ข้อความรายละเอียดมากขึ้น ให้ extensions ผ่าน VirtualBox Linux repository เหมือน main program
หากเจอปัญหาคล้ายๆ นี้ โปรดทราบ error code น่าจะครอบคลุมหลาย issue ไม่จำเป็นต้องหา root cause ได้จาก error code เดียว อาจอ่าน bug reports/forum posts หลายโพสต์ จุดเริ่มต้นเดียวกัน แต่วิธีแก้/ผลต่างกัน บทความนี้ไม่ข้อยกเว้น แต่ผมติดตาม system log อย่างระมัดระวัง จึง narrow down focus และหาตัวติดได้ สำหรับวันนี้พอแล้ว Take care.
Cheers.