यदि Hyper-V पर चल रही आपकी वर्चुअल मशीन किसी कारण से अटक गई है, प्रतिक्रिया देना बंद कर दिया है और Hyper-V कंसोल में संबंधित बटन पर क्लिक करने के बाद शुरू/रोक/रीसेट नहीं होती है, तो इसे ठीक करने का एकमात्र तरीका होस्ट OS पर इस VM के लिए जिम्मेदार प्रक्रिया को जबरन मारना है। हम आपको दिखाएंगे कि पूरे होस्ट और सभी चल रही VMs को रीबूट किए बिना Windows Server 2016/2019 पर अटकी Hyper-V VMs को जबरन रीस्टार्ट कैसे करें (यदि आपके पास Hyper-V HA क्लस्टर और Live-Migration नहीं है)।
Hyper-V VM "Stopping/Starting" स्थिति में अटकी
मान लीजिए कि आपकी Hyper-V VMs में से एक Stopping (Stopping-Critical) या Starting (Starting x%) स्थिति में अटक गई है।

गेस्ट OS प्रतिक्रिया नहीं देता और Hyper-V Manager में "Turn Off", "Shut Down" और "Reset" बटन या तो अनुपलब्ध हैं, या दबाने पर निम्न त्रुटि लौटाते हैं:
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 Hyper-V Manager कंसोल में वर्चुअल मशीन नहीं दिखाता है, और "Connecting to Virtual Machine Management service" त्रुटि लौटाता है, तो आपको vmms.exe (Hyper-V Virtual Machine Management service) प्रक्रिया को पुनरारंभ करना होगा। यह एक सुरक्षित ऑपरेशन है और चल रही VMs को बाधित नहीं करेगा। Vmms.exe प्रक्रिया को पुनरारंभ करने का सबसे आसान तरीका services.msc कंसोल या PowerShell सेवा प्रबंधन cmdlets के माध्यम से vmms सेवा का उपयोग करना है:
Get-Service vmms | Restart-Service

टास्क मैनेजर में अटकी VM प्रक्रिया को कैसे मारें?
पूरे Hyper-V होस्ट को रीबूट किए बिना ऐसी अटकी VM को जबरन शटडाउन/रीस्टार्ट करने का एकमात्र तरीका गेस्ट OS में उसके चल रहे वर्कफ़्लो को समाप्त करना है। Hyper-V होस्ट पर सभी VMs vmwp.exe प्रक्रिया (Virtual Machine Worker Process) का उपयोग करके शुरू की जाती हैं। किसी प्रक्रिया को खोजने के लिए, आपको वर्चुअल मशीन का GUID पता लगाना होगा।
आप Hyper-V Manager कंसोल के माध्यम से VM GUID प्राप्त कर सकते हैं। Hyper-V सर्वर सेटिंग्स खोलें। सर्वर सेक्शन में, VM कॉन्फ़िगरेशन फ़ाइलों का स्थान दिखाया गया है (हमारे मामले में यह D:\VMStore है)।

फाइल एक्सप्लोरर में इस डायरेक्टरी को खोलें और उसी नाम का फ़ोल्डर ढूंढें जो आपकी वर्चुअल मशीन का है। *.vmcx एक्सटेंशन वाली VM कॉन्फ़िगरेशन फ़ाइल के नाम में निर्दिष्ट GUID कॉपी करें।

Task Manager चलाएं और Details टैब पर जाएं। सभी वर्चुअल मशीनें vmwp.exe के अपने स्वयं के इंस्टेंस में चल रही हैं। यह निर्धारित करने के लिए कि कौन सी प्रक्रिया आपकी VM के लिए जिम्मेदार है, आपको पहले प्राप्त की गई अटकी VM के GUID की आवश्यकता है। User name कॉलम में आपके VM के GUID वाली vmwp.exe प्रक्रिया का पता लगाएं। इस प्रक्रिया को मारें (End Task)।

वर्चुअल मशीन जबरन बंद हो जाएगी। अब आप इसके साथ कुछ भी कर सकते हैं।
PowerShell का उपयोग करके फ्रोजन Hyper-VM को मारना
PowerShell CLI का उपयोग करके अटकी वर्चुअल मशीन की प्रक्रिया को ढूंढना और मारना बहुत आसान है। एडमिनिस्ट्रेटर विशेषाधिकारों के साथ PowerShell कंसोल चलाएं (आपका खाता स्थानीय "Hyper-V administrators" ग्रुप में जोड़ा जाना चाहिए)।
इस मामले में, अंतर्निहित Stop-VM cmdlet आपको VM को बंद नहीं करने देगा। यदि आप Stop-VM -Force कमांड चलाने का प्रयास करते हैं, तो यह भी फ्रीज हो जाता है। जाहिर है VM से प्रतिक्रिया की प्रतीक्षा कर रहा है।
आपको इसके GUID द्वारा VM प्रक्रिया को मारने की भी आवश्यकता है। आप VM नाम से VM GUID प्राप्त कर सकते हैं। उदाहरण के लिए, SVM-GUARDEDHOST1 नाम वाली VM का GUID प्राप्त करने के लिए, कमांड चलाएं:
$VMGUID = (Get-VM "SVM-GUARDEDHOST1").ID
यदि आप VM का पूरा नाम टाइप नहीं करना चाहते हैं, तो आप इस Hyper-V होस्ट पर पंजीकृत सभी VMs को सूचीबद्ध कर सकते हैं:
Get-VM | Select Name, Id

परिणामी सूची से अपने VM GUID को कॉपी करें।
इस VMGUID के लिए vmwp.exe प्रक्रिया पहचानकर्ता (PID) ढूंढें:
$VMWMProc = (Get-WmiObject Win32_Process | ? {$_.Name -match 'VMWP' -and $_.CommandLine -match $VMGUID})
फिर, Stop-Process कमांड का उपयोग करके, आपको इस प्रक्रिया को जबरन समाप्त करना होगा:
Stop-Process ($VMWMProc.ProcessId) –Force

यह Hyper-V वर्चुअल मशीन के हैंग वर्किंग प्रोसेस को जबरन समाप्त करने का आसान तरीका है।
टिप. हमारे पास VMWare ESXi पर अटकी VM की प्रक्रिया को मारने के समान तरीके का विवरण भी है।
Hyper-V: VM स्थिति बदलने में विफल
कभी-कभी ऐसा होता है कि अटकी VM प्रक्रिया को मारने के बाद भी, आप VM को चालू नहीं कर सकते। इसके अलावा, यह एक त्रुटि के साथ Starting स्थिति में फ्रीज हो जाता है:
Virtual Machine Connection Failed to Change State.
इस मामले में, निम्न विकल्पों की जांच करें:
- जांचें कि जिस डिस्क पर Hyper-V VM फ़ाइलें संग्रहीत हैं, उस पर पर्याप्त खाली स्थान है;
- यदि VM सेटिंग्स में एक ISO इमेज जुड़ी हुई है, तो इसकी उपलब्धता जांचें;
- VM के नेटवर्क एडाप्टर सेटिंग्स जांचें। वर्चुअल नेटवर्क एडाप्टर्स को मौजूदा Hyper-V वर्चुअल स्विच से जोड़ा जाना चाहिए (किसी भी NIC के लिए Network Adapter – Configuration Error स्थिति नहीं होनी चाहिए);

- जांचें कि Hyper-V Virtual Management Service (VMMS) चल रहा है और Stopping स्थिति में अटका नहीं है;
- सुनिश्चित करें कि आपका एंटीवायरस सॉफ़्टवेयर VM फ़ाइलों तक पहुंच को ब्लॉक नहीं करता है। VM डायरेक्टरी के पथ को एंटीवायरस बहिष्करण में जोड़ें (कृपया जांचें कि Windows Server 2016 पर अंतर्निहित Windows Defender एंटीवायरस में बहिष्करण कैसे जोड़ें);
- Event Viewer -> Applications and Services Logs -> Microsoft -> Windows -> Hyper-V-Worker में Hyper-V संबंधित त्रुटियों की जांच करें।