Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีหยุด/Kill Virtual Machine ที่ค้างบน Hyper-V

หาก Virtual Machine ที่รันบน Hyper-V ค้าง ไม่ตอบสนอง และไม่ Start/Stop/Reset ได้หลังกดปุ่มใน Hyper-V Console วิธีเดียวคือ Force Kill Process ที่รับผิดชอบ VM นั้นบน Host OS เราจะแสดงวิธี Force Restart Stuck Hyper-V VMs บน Windows Server 2016/2019 โดยไม่ต้อง Reboot Host ทั้งเครื่องและ VMs อื่นๆ (หากไม่มี Hyper-V HA Cluster และ Live Migration)

สารบัญ

Hyper-V VM ค้างสถานะ "Stopping/Starting"

สมมติ Hyper-V VM หนึ่งค้างในสถานะ Stopping (Stopping-Critical) หรือ Starting (Starting x%)

Guest OS ไม่ตอบสนอง ปุ่ม "Turn Off", "Shut Down", "Reset" ใน Hyper-V Manager ไม่พร้อมใช้งาน หรือกดแล้ว Error:

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 Manager ค้าง "Connecting to Virtual Machine Management Service"

หาก Hyper-V ไม่แสดง VMs ใน Console แสดง Error "Connecting to Virtual Machine Management service" ต้อง Restart Process vmms.exe (Hyper-V Virtual Machine Management service) การทำอย่างนี้ปลอดภัย ไม่ interrump VMs ที่กำลังรัน วิธีง่ายที่สุด Restart vmms.exe ผ่าน Service vmms ใน services.msc หรือ PowerShell:

Get-Service vmms | Restart-Service

Kill Hung VM Process ใน Task Manager

วิธีเดียว Force Shutdown Restart Stuck VM โดยไม่ Reboot Host คือ End Running Workflow ใน Guest OS VMs ทั้งหมดบน Hyper-V Host รันด้วย Process vmwp.exe (Virtual Machine Worker Process) เพื่อหา Process ต้องหา GUID ของ VM

หา VM GUID ผ่านคอนโซล Hyper-V Manager เปิด Hyper-V Server Settings ในส่วน Server จะแสดง Location ของ VM Config Files (ตัวอย่าง D:\VMStore)

เปิดไดเรกทอรีนี้ใน File Explorer หาโฟลเดอร์ชื่อเดียวกับ VM Copy GUID ที่ระบุในชื่อไฟล์ Config *.vmcx

รัน Task Manager → แท็บ Details VMs ทุกตัวรันใน Instance ของ vmwp.exe แยกกัน หา Process vmwp.exe ที่มี GUID ของ VM ในคอลัมน์ User name Kill Process นั้น (End Task)

VM จะถูก Force Stop ตอนนี้ทำอะไรกับ VM ก็ได้แล้ว

Kill Frozen Hyper-VM ด้วย PowerShell

หาและ Kill Process ของ Hung VM ด้วย PowerShell CLI ง่ายกว่ามาก รัน PowerShell As Administrator (Account ต้องอยู่ใน Local "Hyper-V Administrators" Group)

ในกรณีนี้ Cmdlet Stop-VM ตัว Built-in จะไม่ให้ Shutdown VM ได้ หากลองรัน Stop-VM -Force ก็ค้างเช่นกัน รอ Response จาก VM

ต้อง Kill VM Process โดย GUID หา VM GUID จากชื่อ VM เช่น หา GUID ของ VM ชื่อ SVM-GUARDEDHOST1:

$VMGUID = (Get-VM "SVM-GUARDEDHOST1").ID

หากไม่ muốnพิมพ์ชื่อเต็ม ให้ List VMs ทั้งหมดบน Host:

Get-VM | Select Name, Id

Copy VM GUID จากรายการ

หา vmwp.exe Process ID (PID) สำหรับ VMGUID นี้:

$VMWMProc = (Get-WmiObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VMGUID})

Force Terminate Process นี้ด้วย Stop-Process:

Stop-Process ($VMWMProc.ProcessId) –Force

นี่คือวิธีง่าย Force Terminate Working Process ของ Hung Hyper-V VM

Tip: เรายังมีคู่มือวิธี Kill Process ของ Hung VM บน VMWare ESXi คล้ายกัน

Hyper-V: Failed to Change VM State

บางครั้งแม้ Kill Hung VM Process แล้ว ก็ยังไม่สามารถ Turn On VM ได้ ยังคงค้างใน Starting State พร้อม Error:

Virtual Machine Connection Failed to Change State.

ในกรณีนี้ ตรวจสอบตัวเลือกต่อไปนี้:

  • ตรวจสอบว่ามีพื้นที่ว่างเพียงพอบน Disk ที่เก็บ Hyper-V VM Files
  • หากมี ISO Image Mount ใน VM Settings ตรวจสอบความพร้อมใช้งาน
  • ตรวจสอบ Network Adapter Settings ของ VM — Virtual Network Adapters ต้องเชื่อมต่อกับ Hyper-V Virtual Switch ที่มีอยู่ (ไม่ควรมีสถานะ Network Adapter – Configuration Error สำหรับ NIC ใดๆ)
  • ตรวจสอบ Hyper-V Virtual Management Service (VMMS) ว่าทำงานอยู่และไม่ค้างใน Stopping State
  • ตรวจสอบว่า Antivirus ไม่ได้ Block การเข้าถึง VM Files เพิ่ม Path ของ VM Directory เข้า Antivirus Exclusions (ดูวิธีเพิ่ม Exclusions ใน Windows Defender บน Windows Server 2016)
  • ตรวจสอบ Hyper-V Related Errors ใน Event Viewer → Applications and Services Logs → Microsoft → Windows → Hyper-V-Worker