Nếu máy ảo chạy trên Hyper-V bị treo, không phản hồi và không start/stop/reset sau khi nhấn nút tương ứng trong Hyper-V console, cách duy nhất để khắc phục là kill buộc tiến trình chịu trách nhiệm cho VM đó trên host OS. Bài viết hướng dẫn cách force restart VM Hyper-V bị treo trên Windows Server 2016/2019 mà không reboot toàn bộ host và các VM đang chạy (nếu không có Hyper-V HA cluster và Live-Migration).
Nội dung chính
- Hyper-V VM bị treo trạng thái "Stopping/Starting"
- Hyper-V Manager treo "Connecting to Virtual Machine Management Service"
- Kill tiến trình VM treo trong Task Manager
- Kill Hyper-VM bị đóng băng bằng PowerShell
- Hyper-V: Failed to Change VM State
Hyper-V VM bị treo trạng thái "Stopping/Starting"
Giả sử một VM Hyper-V bị treo ở trạng thái Stopping (Stopping-Critical) hoặc Starting (Starting x%).
Guest OS không phản hồi và nút "Turn Off", "Shut Down", "Reset" trong Hyper-V Manager hoặc không khả dụng, hoặc trả về lỗi khi nhấn:
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 treo "Connecting to Virtual Machine Management Service"
Nếu Hyper-V không hiển thị VM trong console Hyper-V Manager và báo lỗi "Connecting to Virtual Machine Management service", cần restart tiến trình vmms.exe (Hyper-V Virtual Machine Management service). Đây là thao tác an toàn, không làm gián đoạn VM đang chạy. Cách dễ nhất restart vmms.exe qua dịch vụ vmms dùng services.msc hoặc cmdlet PowerShell quản lý dịch vụ:
Get-Service vmms | Restart-Service
Kill tiến trình VM treo trong Task Manager
Cách duy nhất force shutdown/restart VM bị treo mà không reboot toàn bộ Hyper-V host là kết thúc quy trình chạy của nó trong guest OS. Tất cả VM trên Hyper-V host chạy qua tiến trình vmwp.exe (Virtual Machine Worker Process). Để tìm tiến trình, cần GUID của máy ảo.
Lấy VM GUID qua console Hyper-V Manager. Mở Hyper-V server settings. Phần Server hiển thị vị trí file cấu hình VM (ví dụ: D:\VMStore).
Mở thư mục này trong File Explorer, tìm thư mục trùng tên VM. Copy GUID trong tên file cấu hình *.vmcx.
Mở Task Manager → tab Details. Tất cả VM chạy trong instance riêng của vmwp.exe. Để xác định tiến trình nào chịu trách nhiệm cho VM của bạn, cần GUID VM treo đã lấy trước. Tìm tiến trình vmwp.exe có GUID VM ở cột User name. Kill tiến trình này (End Task).
VM sẽ bị force stop. Bây giờ bạn có thể thao tác bất kỳ với nó.
Kill Hyper-VM bị đóng băng bằng PowerShell
Dễ dàng hơn tìm và kill tiến trình VM treo bằng PowerShell CLI. Mở PowerShell console với quyền admin (tài khoản phải thuộc group local "Hyper-V administrators").
Trong trường hợp này, cmdlet built-in Stop-VM không cho shutdown VM. Nếu chạy Stop-VM -Force, nó cũng treo. Chờ phản hồi từ VM.
Cũng cần kill tiến trình VM theo GUID. Lấy VM GUID theo tên. Ví dụ, lấy GUID VM tên SVM-GUARDEDHOST1: $VMGUID = (Get-VM "SVM-GUARDEDHOST1").ID
Nếu không muốn gõ toàn bộ tên VM, liệt kê tất cả VM đăng ký trên host: Get-VM | Select Name, Id. Copy GUID VM từ danh sách kết quả.
Tìm PID tiến trình vmwp.exe cho VMGUID này: $VMWMProc = (Get-WmiObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VMGUID})
Sau đó dùng Stop-Process force-terminate tiến trình này: Stop-Process ($VMWMProc.ProcessId) –Force
Đây là cách dễ dàng force-terminate tiến trình làm việc của Hyper-V VM bị treo.
Mẹo. Chúng tôi cũng có mô tả cách tương tự kill tiến trình VM treo trên VMWare ESXi.
Hyper-V: Failed to Change VM State
Đôi khi ngay sau khi kill tiến trình VM treo, vẫn không bật được VM. Nó treo ở trạng thái Starting với lỗi:
Virtual Machine Connection Failed to Change State.
Kiểm tra các tùy chọn sau:
- Đảm bảo đủ dung lượng trống trên ổ chứa file Hyper-V VM;
- Nếu ISO image được gắn trong cài đặt VM, kiểm tra tính khả dụng;
- Kiểm tra cài đặt network adapter của VM. Virtual network adapter phải kết nối với Hyper-V virtual switch hiện có (không được có trạng thái Network Adapter – Configuration Error cho bất kỳ NIC nào);
- Kiểm tra dịch vụ Hyper-V Virtual Management Service (VMMS) đang chạy và không treo ở trạng thái Stopping;
- Đảm bảo phần mềm antivirus không chặn truy cập file VM. Thêm đường dẫn thư mục VM vào exclusion antivirus (xem cách thêm exclusion cho Windows Defender built-in trên Windows Server 2016);
- Kiểm tra lỗi liên quan Hyper-V trong Event Viewer → Applications and Services Logs → Microsoft → Windows → Hyper-V-Worker.