เครื่องเสมือน Hyper-V ติดอยู่ในสถานะหยุด/เริ่มต้น
หากเครื่องเสมือนของคุณที่ทำงานบน Hyper-V ติดค้างด้วยเหตุผลบางประการ หยุดตอบสนอง และไม่เริ่ม/หยุด/รีเซ็ตหลังจากคลิกปุ่มที่เกี่ยวข้องในคอนโซล Hyper-V Manager คุณสามารถบังคับหยุด (ฆ่า) ผู้ปฏิบัติงานได้ ประมวลผลสำหรับ VM นี้บนโฮสต์ Hyper-V เราจะแสดงวิธีบังคับให้รีสตาร์ท Hyper-V VM ที่แฮงซึ่งทำงานบน Windows Server 2022/2019/2016, Windows 10/11 หรือ Free Hyper-V Server โดยไม่ต้องรีบูตโฮสต์ไฮเปอร์ไวเซอร์ทั้งหมดและ VM ที่ทำงานอยู่ทั้งหมด (มีประโยชน์หากคุณ ไม่มีคลัสเตอร์ Hyper-V HA และ Live-Migration)
Hyper-V VM ติดอยู่ในสถานะหยุด/เริ่มต้น/สำรองข้อมูล
สมมติว่า เครื่องเสมือนเครื่องหนึ่งของคุณบนโฮสต์ Hyper-V ติดอยู่ใน การหยุด (การหยุด-วิกฤต), การเริ่มต้น (การเริ่มต้น 10%) หรือ กำลังสำรองข้อมูลสถานะ
ในกรณีนี้ ระบบปฏิบัติการเกสต์จะหยุดตอบสนอง และปุ่ม “Turn Off ”, “Shut Down ” และ “Reset ” ใน Hyper-V Manager จะไม่สามารถใช้งานได้ (เป็นสีเทา) หรือแสดงข้อผิดพลาดต่อไปนี้เมื่อกด:
The application encountered an error while attempting to change the state of VM.
Failed to change state.
The operation cannot be performed while the object is in its current state.
หาก Hyper-V ของคุณไม่แสดงรายการเครื่องเสมือนที่ลงทะเบียนในคอนโซล Hyper-V Manager และส่งกลับข้อผิดพลาด “การเชื่อมต่อกับบริการการจัดการเครื่องเสมือน” คุณต้องรีสตาร์ท vmms .exe (บริการ Hyper-V Virtual Machine Management) นี่เป็นการดำเนินการที่ปลอดภัยและจะไม่ขัดจังหวะการทำงานของ VM วิธีที่ง่ายที่สุดในการรีสตาร์ทกระบวนการ vmms.exe ของบริการ vmms คือผ่าน
services.mscคอนโซลหรือด้วย cmdlets การจัดการบริการ PowerShell:
Get-Service vmms | Restart-Serviceจะหยุด/ฆ่าเครื่องเสมือนที่หยุดทำงานบน Hyper-V ได้อย่างไร
วิธีเดียวที่จะบังคับปิด/รีสตาร์ท VM ที่ติดขัดโดยไม่ต้องรีบูตโฮสต์ Hyper-V ทั้งหมดคือการฆ่ากระบวนการของผู้ปฏิบัติงานบนระบบปฏิบัติการโฮสต์ VM ทั้งหมดบนโฮสต์ Hyper-V เริ่มต้นโดยใช้อินสแตนซ์กระบวนการ vmwp.exe (Virtual Machine Worker Process) หากต้องการค้นหา PID ของกระบวนการเฉพาะ คุณต้องค้นหา GUID ของเครื่องเสมือน
คุณสามารถรับ VM GUID ได้โดยใช้คอนโซล Hyper-V Manager เปิดการตั้งค่าเซิร์ฟเวอร์ Hyper-V ส่วน เซิร์ฟเวอร์ มีไดเรกทอรีที่เก็บไฟล์การกำหนดค่า VM (ในกรณีของเราคือ D:\VMStore)
เปิดไดเร็กทอรีนี้ใน File Explorer และค้นหาโฟลเดอร์ที่มีชื่อเครื่องเสมือนที่ติดอยู่ คัดลอก GUID ที่ระบุในชื่อของไฟล์คอนฟิกูเรชัน VM ด้วยไฟล์
*.vmcxส่วนขยาย.
เรียกใช้ งาน ตัวจัดการ และไปที่แท็บ รายละเอียด เครื่องเสมือนทั้งหมดทำงานภายใต้อินสแตนซ์ของกระบวนการ vmwp.exe ของตนเอง ในการระบุว่ากระบวนการใดรับผิดชอบ VM ของคุณ คุณต้องใช้ GUID ของ VM ที่หยุดทำงานซึ่งคุณได้รับก่อนหน้านี้ ค้นหากระบวนการ vmwp.exe ที่มี GUID ของ VM ของคุณในคอลัมน์ ชื่อผู้ใช้ ชื่อ ฆ่ากระบวนการ VM นี้ (จบงาน)
ในทำนองเดียวกัน คุณสามารถค้นหาและหยุดกระบวนการเครื่องเสมือนที่หยุดทำงานบนโฮสต์ Hyper-V โดยใช้เครื่องมือ Process Explorer
เรียกใช้ Process Explorer ในฐานะผู้ดูแลระบบ แล้วคลิก ค้นหาหมายเลขอ้างอิงหรือ DLL (หรือกด Ctrl-F)
ระบุเส้นทางไปยังดิสก์เสมือน (*.vhdx) ของ Hyper-V VM ที่ติดอยู่ในสถานะเริ่มต้น/หยุดทำงาน
Process Explorer จะแสดงรายการกระบวนการทั้งหมดที่ใช้ไฟล์ VHDX ของเครื่องเสมือน
ค้นหากระบวนการของเครื่องเสมือน vmwp.exe และฆ่ามัน (คลิกขวา -> ฆ่ากระบวนการ)
ก่อนหน้านี้ เราได้แสดงวิธีใช้ Process Explorer เพื่อค้นหาและปลดล็อกไฟล์ที่ถูกล็อกโดยกระบวนการอื่น
เครื่องเสมือนจะถูกบังคับให้หยุดทำงาน ตอนนี้คุณสามารถทำอะไรก็ได้ที่คุณต้องการด้วย VM
บังคับให้หยุด Hyper-V VM ด้วย PowerShell
การค้นหาและฆ่ากระบวนการเครื่องเสมือนที่ไม่ตอบสนองนั้นง่ายกว่ามากโดยใช้ PowerShell เรียกใช้คอนโซล PowerShell ในฐานะผู้ดูแลระบบ (บัญชีของคุณต้องเป็นสมาชิกของกลุ่ม "ผู้ดูแลระบบ Hyper-V" ของ Hyper-V)
ในกรณีนี้ cmdlet Stop-VM ในตัวจากโมดูล Hyper-V PowerShell จะไม่อนุญาตให้คุณปิด VM หากคุณพยายามเรียกใช้ไฟล์
Stop-VM -Forceคำสั่งมันก็แฮงค์เช่นกัน เห็นได้ชัดว่ากำลังรอการตอบกลับจาก VM
คุณต้องฆ่ากระบวนการ VM ด้วย GUID คุณจะได้รับ VM GUID ตามชื่อของมัน ตัวอย่างเช่น หากต้องการรับ GUID ของ VM ที่มีชื่อ SVM-GUARDEDHOST1 ให้รันคำสั่ง:
$VMGUID = (Get-VM "SVM-GUARDEDHOST1").IDหากคุณไม่ต้องการพิมพ์ชื่อเต็มของ VM คุณสามารถแสดงรายการ VM ทั้งหมดที่ลงทะเบียนบนโฮสต์ Hyper-V นี้และรหัสของมัน:
Get-VM | Select VMName, VMId, pathคัดลอก VMID ของคุณจากรายการผลลัพธ์
ค้นหาตัวระบุกระบวนการ vmwp.exe (PID) สำหรับ VMGUID นี้:
$VMWMProc = (Get-WmiObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VMGUID})จากนั้นคุณต้องยุติกระบวนการของเครื่องเสมือน Hyper-V ที่หยุดทำงานโดยใช้คำสั่ง Stop-Process:
Stop-Process ($VMWMProc.ProcessId) -Forceเคล็ดลับ นอกจากนี้ เรายังมีคำแนะนำง่ายๆ เกี่ยวกับวิธีกำจัด VM ที่ติดขัดบน VMWare ESXi
Hyper-V VM ติดอยู่ในสถานะสำรองข้อมูล
เมื่อสำรอง VM บนโฮสต์ Hyper-V คุณอาจพบว่า Hyper-V VM ติดอยู่ในสถานะ กำลังทำงาน โดยมีสถานะเป็น สำรองข้อมูล อย่างไรก็ตาม คุณไม่สามารถหยุดหรือเริ่ม VM ผ่าน Hyper-V Manager
หากคุณไม่ต้องการรีบูตโฮสต์ Hyper-V ให้ตรวจสอบสถานะของบริการ “Microsoft Hyper-V VSS Writer” ก่อน:
vssadmin list writersตรวจสอบให้แน่ใจว่าคำสั่งไม่ส่งคืนข้อผิดพลาด จากนั้น คุณต้องเริ่มบริการ “Hyper-V Virtual Machine Management” ใหม่โดยใช้คำสั่ง PowerShell:
Get-service vmms | stop-processตรวจสอบให้แน่ใจว่ากระบวนการ vmms.exe สิ้นสุดลงแล้ว ถ้าไม่บังคับให้ยุติ:
Get-Process | Where-Object { $_.ProcessName -eq 'vmms' } | Stop-Processตอนนี้คุณสามารถเริ่มบริการการจัดการ Hyper-V:
Start-Service vmmsการเริ่มบริการการจัดการเครื่องเสมือนใหม่ควรรีเซ็ตสถานะของ VSS Writer บนโฮสต์ Hyper-V
Hyper-V Manager ไม่สามารถเปลี่ยนสถานะ VM
บางครั้งมันเกิดขึ้นที่แม้หลังจากหยุดกระบวนการ VM ที่หยุดทำงาน คุณก็ไม่สามารถเปิด VM ได้ ยิ่งกว่านั้น มันค้างในสถานะเริ่มต้นโดยมีข้อผิดพลาด:
Virtual Machine Connection
Failed to Change State.ในกรณีนี้ ให้ตรวจสอบตัวเลือกต่อไปนี้:
ตรวจสอบว่ามีพื้นที่ว่างเพียงพอบนดิสก์ที่เก็บไฟล์ Hyper-V VM
หากมีการเชื่อมต่ออิมเมจ ISO ในการตั้งค่า VM ให้ตรวจสอบว่าไฟล์อิมเมจนี้มีอยู่ในพาธที่ระบุหรือไม่
ตรวจสอบการตั้งค่าอะแดปเตอร์เครือข่ายของ VM อะแดปเตอร์เครือข่ายเสมือนต้องเชื่อมต่อกับสวิตช์เสมือน Hyper-V ที่มีอยู่ (ต้องไม่มีสถานะอะแดปเตอร์เครือข่าย - ข้อผิดพลาดในการกำหนดค่าสำหรับ NIC ใดๆ)
ตรวจสอบว่า Hyper-V Virtual Management Service (VMMS) กำลังทำงานอยู่และไม่ติดอยู่ในสถานะหยุดทำงาน
ตรวจสอบให้แน่ใจว่าซอฟต์แวร์ป้องกันไวรัสของคุณไม่ปิดกั้นการเข้าถึงไฟล์ VM เพิ่มพาธไปยังไดเร็กทอรี VM ไปยังการยกเว้นโปรแกรมป้องกันไวรัส (ดูการยกเว้นการเพิ่มโปรแกรมป้องกันไวรัสในตัวของ Windows Defender บน Windows Server)
ตรวจสอบข้อผิดพลาดที่เกี่ยวข้องกับ Hyper-V ใน Event Viewer -> Applications and Services Logs -> Microsoft -> Windows -> Hyper-V-Worker;
ปิดใช้งานโหมดสลีปและโหมดไฮเบอร์เนตบนระบบปฏิบัติการแขกของ Virtual Machine คุณสามารถปิดการใช้งานโหมดสลีปใน Windows ผ่านแผงควบคุม -> ตัวเลือกการใช้พลังงาน -> เปลี่ยนการตั้งค่าแผน -> ทำให้คอมพิวเตอร์เข้าสู่โหมดสลีป -> ไม่เลย หากต้องการปิดใช้งานโหมดไฮเบอร์เนตและโหมดสลีปในระบบปฏิบัติการเกสต์ของ Ubuntu Linux ให้รันคำสั่ง:
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
หากวิธีการด้านบนไม่ได้ผล ดูเหมือนว่าคุณจะต้องรีบูตโฮสต์ Hyper-V ทั้งหมด











