วันนี้ผมมีประสบการณ์การใช้งานคอมพิวเตอร์เสมือน (Virtual Machine) มาเล่าให้ฟังเป็นอุทาหรณ์สำหรับผู้ดูแลระบบ Hyper-V บน Windows Sever โดยเฉพาะอย่างยิ่งการใช้งานสแนปช็อต (Snapshot) ครับ
รายละเอียดของปัญหา
ที่มาที่ไปของเรื่องที่นำมาฝากครั้งนี้ เริ่มต้นจากการมีคนมาขอใช้ห้องคอมพิวเตอร์เพื่อทำการสอบการใช้โปรแกรม SolidWorks โดยขออนุญาตเก็บไฟล์งานของผู้เข้าสอบบนไฟล์เซิร์ฟเวอร์ (คอมพิวเตอร์เสมือนรันด้วย Windows Server 2008 R2) เพื่อความสะดวก และเนื่องจากการให้บริการแบบนี้เป็นเรื่องปกติที่ผมให้บริการอยู่เป็นประจำประกอบกับเห็นว่ามีคนใช้เพียงแค่ 22 คน จึงไม่ได้กังวลใจใดๆ
หลังจากทำการสร้างและแบ่งปันโฟลเดอร์สำหรับใช้เก็บไฟล์โดยให้สิทธิ์ Read/Write จากนั้นได้แนะนำวิธีการเก็บข้อมูลขึ้นแชร์โฟลเดอร์แก่ผู้ใช้จนเข้าใจดีแล้วผมจึงปล่อยให้ผู้ใช้ดำเนินการส่วนที่เหลือเอง เมื่อหมดเวลาสอบผมก็เข้าไปสอบถามผู้ใช้ซึ่งได้คำตอบว่ากำลังเก็บไฟล์ ผมจึงกลับไปรอในออฟฟิศแต่เมื่อผ่านไปประมาณ 10 นาที ผู้ใช้เข้ามาแจ้งว่าเก็บไปขึ้นเซิร์ฟเวอร์ไม่ได้ เมื่อผมเข้าไปตรวจสอบที่เครื่องพีซี (Windows 8.1) พบว่า File Explorer มีอาการค้าง จากนั้นพยายามลองทำการเชื่อมต่อเดสก์ท็อประยะไกล (Remote Desktop) ไปยังเครื่องไฟล์เซิร์ฟเวอร์แต่ไม่สำเร็จ – ถึงตอนนี้ผมเริ่มใจไม่ดีล่ะ
ต่อมาจึงทำการเชื่อมต่อเดสก์ท็อประยะไกลไปยังโฮสต์ Hyper-V (Windows Server 2008 R2) แล้วเปิด Hyper-V Manager ปรากฏว่าสถานะของคอมพิวเตอร์เสมือนเป็น Paused (ผมไม่ได้จับภาพหน้าจอไว้เพราะรีบหาวิธีแก้ไขจนลืมนึกถึงเรื่องนี้ไป) จึงพยายามทำการ Start คอมพิวเตอร์เสมือนแต่ล้มเหลว
จากนั้นทำการตรวจสอบฮาร์ดดิสก์ทางกายภาพ (ความจุ 73 GB) ปรากฏว่ามีพื้นที่เหลือน้อยมาก จึงทำการตรวจสอบฮาร์ดดิสก์เสมือน ซึ่งไฟล์เซิร์ฟเวอร์ตัวนี้ผมจะทำสแนปช็อตเพื่อเก็บสถานะไว้ 2 จุด (ไฟล์นามสกุล .avhd) เมื่อรวมกับสถานะเริ่มต้น (ไฟล์นามสกุล .vhd) ทำให้มีฮาร์ดดิสก์เสมือน 3 ตัว มีขนาดรวมกันมากกว่า 72 GB (ตอนนั้นผมเองก็แปลกใจว่าทำไมฮาร์ดดิสก์เสมือนจึงมีขนาดเพิ่มขึ้นมากผิดสังเกต – แต่ไม่มีเวลาตรวจสอบอย่างละเอียดเพราะกังวลเรื่องเปิดเครื่องไม่ได้มากกว่า)
รูปที่ 1
ด้วยความรีบร้อนที่จะแก้ปัญหาผมจึงทำการลบสแนปช็อตทั้ง 2 จุดออกด้วยหวังว่า Hyper-V จะทำการรวม (Merge) ฮาร์ดดิสก์เสมือนของสแนปช็อต (ไฟล์นามสกุล .avhd) เพื่อให้มีพื้นที่ว่าง แต่ผลกลับไม่เป็นไปอย่างที่ต้องการนั่นคือ สามารถลบสแนปช็อตได้แต่ฮาร์ดดิสก์เสมือนกลับไม่ถูกรวมให้เหลือตัวเดียว (ผมสันนิษฐาน) สาเหตุเพราะมีพื้นที่ว่างบนฮาร์ดดิสก์ทางกายภาพไม่เพียงพอสำหรับใช้ในการรวมฮาร์ดดิสก์เสมือน – ยอมรับโดยไม่อายว่าใจหล่นวูบลงไปอยู่ที่ตาตุ่มเลยครับตอนนั้น
รูปที่ 2
การแก้ไขที่ไม่เป็นผล
แน่นอนว่าถ้าปัญหาแก้ไขได้ง่ายๆ ผมคงไม่เจ็บใจ (ตัวเอง) จนต้องเอามาเล่าให้ฟังเป็นอุทาหรณ์ เพราะกว่าจะแก้ไขได้ต้องชดใช้ด้วยเวลาไปกว่า 4 ชั่วโมง
วิธีแรกที่ผมพยายามใช้แก้ปัญหาคือ การส่งออกคอมพิวเตอร์เสมือน (ไฟล์เซิร์ฟเวอร์) เพื่อจะได้นำไปนำเข้าโฮสต์ Hyper-V ที่มีพื้นที่ฮาร์ดดิสก์ว่างมากพอ (ผมมีโฮสต์ Hyper-V บน Windows Server 2012 R2 อีกหนึ่งตัว) แต่ปัญหาคือ (ไดรฟ์ D: เต็มครับ) ไดรฟ์ที่พอจะมีพื้นที่ว่างให้ใช้งานได้คือไดรฟ์ C: นั้นมีไฟล์สำรองของคอมพิวเตอร์เสมือน (อีกตัวซึ่งไม่เกี่ยวกัน) อยู่ทำให้กว่าจะเริ่มทำการส่งออกคอมพิวเตอร์เสมือนได้ต้องเสียเวลาย้ายไฟล์ (ประมาณ 40 GB) กว่า 15 นาที หลังจากได้พื้นที่ว่าง (ประมาณ 60 GB) จึงทำการส่งออกคอมพิวเตอร์เสมือน ถึงจุดนี้จิตใจก็เริ่มรู้สึกมีความหวัง แต่ไม่รู้ว่าคิดไปเองหรืออย่างไรไม่ทราบแต่รู้สึกว่า Hyper-V ทำงานช้ามากก็ได้แต่นั่งจ้องหน้าจอดูความคืบหน้าทีละ 1% จนการทำงานครบ 100% ก็ใช้เวลาไปนานกว่า 30 นาที (ระบบแจ้งขนาดข้อมูลประมาณ 40 GB ถ้าจำไม่ผิด) จากนั้นเปิดไปยังโฟลเดอร์ที่ใช้เก็บคอมพิวเตอร์เสมือนที่ส่งออกแต่ไม่มีข้อมูลอะไรเลย ทั้งที่ในระหว่างทำการส่งออก Hyper-V ไม่มีการแจ้งข้อผิดพลาดใดๆ เจอแบบนี้ทั้งตกใจทั้งงงว่าเกิดอะไรขึ้นและไม่รู้ว่าเอายังไงต่อแต่พอสรุปว่าการแก้ไขโดยการส่งออกคอมพิวเตอร์เสมือนไม่ได้ผลครับ
แก้ไขสำเร็จ
หลังจากล้มเหลวจากวิธีการส่งออกคอมพิวเตอร์เสมือนจากนั้นผมใช้ไม้ตายและเป็นวิธีการสุดท้ายที่คิดออก (ตอนนั้นยังไม่มั่นใจว่าจะแก้ปัญหาได้หรือไม่) นั้นคือทำการคัดลอกไฟล์ฮาร์ดดิสก์เสมือน (ไฟล์ .vhd 1 ตัว ไฟล์ .avhd 2 ตัว ขนาดรวมกันประมาณ 72 GB) ของไฟล์เซิร์ฟเวอร์ไปยังโฮสต์ Hyper-V ตัวใหม่ที่มีพื้นที่ฮาร์ดดิสก์ว่างมากพอขั้นตอนนี้ใช้เวลาไปกว่า 25 นาที จากนั้นย้ายไปทำงานบนโฮสต์ Hyper-V ตัวใหม่ (Windows Server 2012 R2) ผ่านทางเดสก์ท็อประยะไกล จากนั้นทำการสร้างคอมพิวเตอร์เสมือนใหม่ (อ่านรายละเอียด) โดยพยายามตั่งค่าต่างๆ ให้เหมือนกับตัวเดิมมากที่สุด (บนโฮสต์ Hyper-V ตัวเก่ายังสามารถเปิดหน้า Setting ของไฟล์เซิร์ฟเวอร์ได้เพียงแต่เปิดเครื่องไม่ได้) โดยตั้งค่า Hard Drive เป็นสแนปช็อตตัวล่าสุด (xxxxxxx_6FBA5B5A-0F95-4701-86FC-2E8DE997CBB7.avhd)
รูปที่ 3
เสร็จแล้วทำการเปิดเครื่องปรากฏว่าไฟล์เซิร์ฟเวอร์สามารถบูทและทำงานได้ตามปกติ ถึงตอนนี้ทั้งดีใจทั้งโล่งอกอย่างบอกไม่ถูก หลังจากนั้นทำการลงชื่อเข้าระบบและทำการตั้งค่าระบบเครือข่ายให้ตรงกับค่าเดิม เสร็จแล้วทำการตรวจสอบข้อมูลที่เก็บข้อสอบปรากฏว่ายังอยู่อย่างครบถ้วน เพียงแต่…เพียงแต่ข้อมูลดังกล่าวมีขนาดใหญ่กว่า 10 GB และน่าจะเป็นสาเหตุที่ทำให้ฮาร์ดดิสก์ทางกายภาพเต็มจนทำให้ไฟล์เซิร์ฟเวอร์ล่มในครั้งนี้
บทเรียน
สรุปว่าเรื่องที่เกิดขึ้นกับคอมพิวเตอร์เสมือนบน Hyper-V สอนให้ผมได้เรียนรู้ว่า
- ไม่ควรใช้งานคอมพิวเตอร์เสมือน (โดยเฉพาะบน Hyper-V) โดยเก็บสแนปช็อตไว้หลายตัวเพราะทำให้เปลืองพื้นที่ฮาร์ดดิสก์และแก้ไขสถานการณ์ได้ยากในกรณีเกิดข้อผิดพลาด หากจำเป็นให้ทำการส่งออกสแนปช็อตไปเก็บไว้ในที่อื่น (เซิร์ฟเวอร์ตัวอื่น)
- ก่อนทำการเก็บข้อมูลขึ้นไฟล์เซิร์ฟเวอร์ควรทำการตรวจขนาดข้อมูลก่อนว่ามีพื้นที่เพียงพอสำหรับรองรับการเก็บข้อมูลหรือไม่ และไม่ควรปล่อยให้ผู้ใช้ดำเนินการเพียงลำพัง (เพราะเวิร์ฟเวอร์อาจพังได้ ฮ่าๆๆ)
นับว่ายังโชคดีที่ผมสามารถผ่านปัญหาไปได้ด้วยดีไม่มีข้อมูลใดสูญหาย เพียงแต่ต้องเสียเวลากว่า 4 ชั่วโมงในการกู้คืนระบบ แต่ใช่ว่าความโชคดีจะอยู่ใครได้ทุกครั้ง โดยหลังจากเกิดเหตุการณ์นี้ ผมทำการลบสแนปช็อตบนคอมพิวเตอร์เสมือนออกทั้งหมดและใช้วิธีการส่งออกไปเก็บไว้บนเซิร์ฟเวอร์แทน
เหตุการณ์ที่เกิดขึ้นในครั้งนี้ผมคงโทษใครไม่ได้นอกจากตัวเองที่รู้เท่าไม่ถึงกาลและประเมินสถานการณ์ผิดพลาด และคงจดจำไว้เป็นบทเรียนเพื่อที่จะไม่ให้เกิดซ้ำเดิมในอนาคตครับ