מחשב וירטואלי Hyper-V תקוע במצב עצירה/התחלה


אם המחשב הווירטואלי שלך הפועל ב- Hyper-V תקוע מסיבה כלשהי, מפסיק להגיב ואינו מופעל/עוצר/מתאפס לאחר לחיצה על הלחצנים המתאימים במסוף Hyper-V Manager, באפשרותך לעצור (להרוג) בכוח את תהליך העבודה עבור מחשב וירטואלי זה במחשב המארח Hyper-V. נראה לך כיצד לכפות הפעלה מחדש של מכונות וירטואליות Hyper-V הפועלות ב- Windows Server 2022/2019/2016, Windows 10/11 או שרת Hyper-V בחינם מבלי לאתחל מחדש את מארח ה- Hypervisor כולו ואת כל המחשבים הווירטואליים הפועלים (שימושי אם אין לך אשכול Hyper-V HA ו- Live-Migration).

Hyper-V VM תקוע במצב עצירה/הפעלה/גיבוי

נניח שאחד מהמחשבים הווירטואליים שלך במארח Hyper-V תקוע במצב עצירה (עצירה-קריטי), התחלה (התחלה 10%) או גיבוי.

במקרה זה, מערכת ההפעלה האורחת מפסיקה להגיב, והלחצנים "כבה ", "כיבוי" ו- "איפוס " במנהל Hyper-V הופכים ללא זמינים (מעומעמים), או מחזירים את השגיאה הבאה בעת לחיצה:

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). זוהי פעולה בטוחה והיא לא תפריע להפעלת מחשבים וירטואליים. הדרך הקלה ביותר להפעיל מחדש את התהליך vmms.exe של שירות vmms היא באמצעות

services.msc

מסוף או עם רכיבי cmdlet לניהול שירות PowerShell:

Get-Service vmms | Restart-Service

כיצד לעצור/להרוג מכונה וירטואלית תלויה על Hyper-V?

הדרך היחידה לכפות כיבוי/הפעלה מחדש של VM תקוע כזה מבלי לאתחל מחדש את כל מארח Hyper-V היא להרוג את תהליך העבודה שלו במערכת ההפעלה המארחת. כל המחשבים הווירטואליים במחשב מארח Hyper-V מופעלים באמצעות מופעי התהליך vmwp.exe (Virtual Machine Worker Process). כדי למצוא PID תהליך ספציפי, עליך לגלות את ה- GUID של המחשב הווירטואלי.

באפשרותך לקבל את ה- GUID של VM באמצעות מסוף Hyper-V Manager. פתח את הגדרות שרת Hyper-V. המקטע שרת מכיל את הספרייה שבה מאוחסנים קבצי התצורה של VM (במקרה שלנו הוא D:\VMStore).

פתח ספריה זו בסייר הקבצים ומצא את התיקיה עם שם המחשב הווירטואלי התקוע שלך. העתק את ה- GUID שצוין בשם קובץ התצורה של VM עם

*.vmcx

סיומת.

הפעל את מנהל המשימות ועבור אל הכרטיסיה פרטים. כל המכונות הווירטואליות פועלות תחת מופע משלהן של תהליך vmwp.exe. כדי לקבוע איזה תהליך אחראי על המחשב הווירטואלי שלך, דרוש לך ה- GUID של ה- VM התלוי שקיבלת קודם לכן. חפש את vmwp.exe התהליך הכולל את ה- GUID של המחשב הווירטואלי שלך בעמודה שם משתמש. הרוג את תהליך ה-VM הזה (End Task).

באופן דומה, באפשרותך למצוא ולעצור תהליך מחשב וירטואלי תלוי במחשב מארח Hyper-V באמצעות הכלי Process Explorer.

  1. הפעל את Process Explorer כמנהל מערכת ולחץ על חפש נקודת אחיזה או DLL (או הקש Ctrl-F);

  2. ציין את הנתיב לדיסק הווירטואלי (*.vhdx) של Hyper-V VM שתקוע במצב התחלה/עצירה;

  3. Process Explorer יפרט את כל התהליכים המשתמשים בקובץ VHDX של המחשב הווירטואלי;

  4. אתר את תהליך המחשב הווירטואלי vmwp.exe והרוג אותו (לחץ לחיצה ימנית -> Kill Process).

    בעבר, הראינו לך כיצד להשתמש בסייר התהליכים כדי לחפש ולבטל נעילה של קבצים שננעלו על-ידי תהליכים אחרים.

המכונה הווירטואלית תיעצר בכוח. עכשיו אתה יכול לעשות מה שאתה רוצה עם VM.

כפה עצירה של Hyper-V VM עם PowerShell

הרבה יותר קל למצוא ולהרוג את תהליך המחשב הווירטואלי שאינו מגיב באמצעות PowerShell. הפעל את מסוף PowerShell כמנהל מערכת (החשבון שלך חייב להיות חבר בקבוצה Hyper-V "מנהלי Hyper-V ").

במקרה זה, cmdlet Stop-VM המובנה ממודול Hyper-V PowerShell לא יאפשר לך לכבות את המחשב הווירטואלי. אם תנסה להפעיל את

Stop-VM -Force

פקודה, זה גם נתקע. ברור שמחכים לתגובה מה-VMs.

אתה צריך להרוג תהליך VM על-ידי ה-GUID שלו. אתה יכול לקבל את ה- GUID של VM לפי שמו. לדוגמה, כדי לקבל את ה- GUID של המחשב הווירטואלי עם השם SVM-GUARDEDHOST1, הפעל את הפקודה:

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

אם אינך מעוניין להקליד את השם המלא של המחשב הווירטואלי, באפשרותך לרשום את כל המחשבים הווירטואליים הרשומים במחשב מארח 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 ($VMWMProc.ProcessId) -Force

טיפ. יש לנו גם מדריך פשוט כיצד להרוג VM תקוע ב- VMWare ESXi.

Hyper-V VM תקוע במצב גיבוי

בעת גיבוי VM במחשב מארח Hyper-V, ייתכן שתיתקל ב- Hyper-V 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, בדוק אם קובץ תמונה זה זמין בנתיב שצוין;

  • בדוק את הגדרות מתאם הרשת של המחשב הווירטואלי. מתאמי רשת וירטואלית חייבים להיות מחוברים למתג וירטואלי קיים של Hyper-V (אסור שיהיה מצב מתאם רשת - שגיאת תצורה עבור כל כרטיס ממשק רשת (NIC);

  • ודא ששירות הניהול הווירטואלי Hyper-V (VMMS) פועל ולא נתקע במצב עצירה;

  • ודא שתוכנת האנטי-וירוס שלך אינה חוסמת את הגישה לקבצי VM. הוספת נתיבים לספריית ה- VM לאי-הכללות האנטי-וירוס (ראה הוספה חמה של אי הכללות לאנטי-וירוס המוכלל של Windows Defender ב- Windows Server);

  • בדוק אם קיימות שגיאות הקשורות ל- Hyper-V במציג האירועים -> יומני רישום של יישומים ושירותים -> Microsoft -> Windows -> Hyper-V-Worker;

  • השבת שינה (sleep) ומצב שינה (hibernation) במערכות הפעלה אורחות של מחשב וירטואלי. באפשרותך להשבית שינה ב- Windows באמצעות לוח הבקרה ->אפשרויות צריכת חשמל -> לשנות הגדרות תוכנית -> להעביר את המחשב למצב שינה -> לעולם לא. כדי להשבית מצב שינה ושינה במערכת הפעלה אורחת של Ubuntu Linux, הפעל את הפקודה:

    systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

אם השיטות לעיל לא עזרו, נראה שתצטרך לאתחל מחדש את כל מארח Hyper-V.