שרשרת תמונת מצב של מכונה וירטואלית שבורה (.VMDK / .VHDX / .QCOW2) והצלת דיסק¶
מספרי חירום שונים לפי מדינה. דף זה משתמש ב-911, המספר של ארצות הברית וקנדה. מדינות רבות אחרות משתמשות ב-112, 999 או מספר אחר. מצא את המספר עבור המדינה שלך.
כאשר מכונה וירטואלית (VM) בייצור ב-VMware ESXi / Workstation, Microsoft Hyper-V, Proxmox VE / QEMU-KVM, או Oracle VirtualBox מסרבת לפתע להידלק לאחר שעבודת גיבוי נכשלה, למאגר הנתונים נגמר שטח הדיסק (0 bytes free), או שמנהל מערכת נוגע בקובץ תמונת מצב, קליק אחד מבוהל יכול למחוק חודשים או שנים של נתונים עסקיים חיים. צילומי מצב של מכונות וירטואליות הן לא גיבויים עצמאיים מלאים; הם שבירים שרשראות הבדל דלתא להעתקה על כתיבה (CoW) (*-000001-delta.vmdk, *.avhdx, או קובץ גיבוי .qcow2 שכבות-על) כאשר כל בלוק בודד שנכתב מאז שצולמה תצלום חי אך ורק בתוך קבצי הדלתא של הילד, בעוד שדיסק הבסיס המקורי יושב קפוא בעבר.
אם אתה רואה שגיאות כמו "The parent virtual disk has been modified since the child was created (Parent CID does not match)" ב-VMware, "Cannot boot: The chain of virtual hard disks is broken" ב-Hyper-V, או "Could not open backing file: L1/L2 table corrupted" ב-QEMU/Proxmox, הצבעה מחדש של ה-VM ישירות על הדיסק הבסיסי (flat.vmdk או בסיס .vhdx) ואתחול זה קטלני. פעולה זו מאתחלת את השרת כפי שהיה קיים לפני 6 חודשים כאשר נוצרה תמונת המצב הראשונה, מבטל באופן מיידי את קישור ההורה-ילד ה-GUID/CID ההצפנה ומעבד כל תמונת מצב של דלתא מאז אותו תאריך מיותמת ובלתי ניתנת למיזוג.
מדריך זה מספק שלב אחר שלב שחזור שרשרת תמונת מצב לא הרסנית, תיקון כותרות קובץ מתאר ופרוטוקולי חילוץ קבצי אורח מחוץ לפס המבוססים על מאמרי VMware מאת Broadcom Knowledge Base (KB 1007969 / 316578 ו-KB 1002511), Microsoft Hyper-V Merge-VHD ו Set-VHD מפרטים הנדסיים, QEMU qemu-img ו libguestfs (guestmount) תקנים משפטיים, ו-NIST Special Publication 800-86.
תעשה את זה עכשיו¶
אם מכונה וירטואלית מסרבת להפעיל או זורקת שגיאת שרשרת תמונת מצב/שגיאת דיסק וירטואלי פגום:
- לעולם אל תערוך את הגדרות ה-VM כדי לאתחל ישירות מהדיסק הבסיסי (
Server.vmdkאוServer.vhdx) כאשר צילומי דלתא (-000001.vmdkאו.avhdx) קיימים בתיקייה. ברגע שמערכת הפעלה אורחת מאתחלת ישירות מהדיסק האב הבסיסי אפילו למשך 2 שניות, מערכת ההפעלה האורחת כותבת חותמות זמן אתחול ועדכוני יומן NTFS/ext4 לתוך הדיסק הבסיסי, משנה את מזהה התוכן של הדיסק האב (CID) ב-VMware או ב-Linkage GUID / Timetamp ב-Hyper-V. האתחול הבודד הזה שובר את כל שרשרת צילומי הילד התלויים בכך שדיסק הבסיס יישאר קפוא ביט אחר ביט. אם חדר השרת שלך חווה שריפה פעילה, כשל קירור או סכנה פיזית, פנה והתקשר למספר החירום המקומי שלך (911 בארצות הברית וקנדה, 112 ברחבי האיחוד האירופי, 999 בבריטניה) או בדוק מספרי חירום. - לעולם אל תמחק
.avhdx,-delta.vmdk, או-sesparse.vmdkקבצים בסייר Windows או בדפדפן ESXi Datastore כדי "לפנות שטח דיסק." שלא כמו קבצים זמניים רגילים,.avhdxו-delta.vmdkקבצים הם הכונן הקשיח החי הנוכחי שלך. אם תמונת מצב נוצרה לפני 8 חודשים על ידי עבודת גיבוי תקועה של Veeam/CommVault ונותרה לפעול, 100 אחוז מכל עסקת מסד נתונים, חשבונית וקובץ שנוצרו במהלך 8 החודשים האחרונים מאוחסנים בתוך אלה.avhdxאו-delta.vmdkקבצים. מחיקתם מוחקת את כל הנתונים שנוצרו מאז החלה תמונת המצב. - ** העתק או שכפול הכל
.vmdk,.vhdx/.avhdx, או.qcow2קבצים לנפח אחסון חיצוני / משני לפני הפעלת כל פקודת מיזוג, ביצוע או תיקון.** מיזוג שרשרת של תמונת מצב כותב את כל בלוקי הדלתא לאחור אל הדיסק האב במקום. אם המיזוג נכשל באמצע בגלל שגיאה של סקטור דיסק פגום או שגיאה מלאה של מאגר הנתונים, גם הדיסק האב וגם הדיסק הבן פגום אלא אם כן הוצאת תחילה עותק של קובץ גולמי. - אם ה-Hypervisor נכשל בגלל שמאגר הנתונים המארח/נפח פגע ב-100% מלא (
No space left on device), לעולם אל תנסה "למחוק / לאחד תמונות Snapshots" עד שתוסיף שטח פנוי או שיבוט למאגר נתונים גדול יותר. איחוד שרשרת מרובת תמונות מצריך שטח שריטה זמני השווה לגודל דיסק הדלתא הגדול ביותר. ניסיון לאחד על מאגר נתונים מלא ב-99% יקרוס את ה-hypervisor mid-commit. - מפה את ההורה המדויק -> שרשרת התלות בילד באמצעות פקודות בדיקה לקריאה בלבד (
vmkfstools -e,Get-VHD, אוqemu-img info --backing-chain) לפני נגיעה בבייט בודד. כל כותרת של קובץ תמונת מצב שמה במפורש את שם הקובץ האב המדויק ואת מזהה ההצפנה ההורה שהוא מצפה שיישבו ישירות מעליו.
flowchart TD
A["VM מסרב לאתחל: שרשרת Snapshot שבורה, חוסר התאמה של CID של הורה או VMDK/VHDX/QCOW2 פגום"] --> B["עצור: אין לאתחל את הדיסק הבסיסי ישירות, ואל תמחק אף קבצי -delta.vmdk או .avhdx"]
B --> C["שלב 1: בדוק מאחסן נתונים מארח / שטח פנוי בנפח (`df -h` / `רשימת מערכת קבצי אחסון esxcli`)"]
C --> D["שלב 2: העתק את כל קבצי הבסיס ותמונת המצב לכונן NAS/SAN/USB גיבוי משני לפני השינוי"]
D --> E{"איזה Hypervisor / פורמט דיסק וירטואלי מושפע?"}
E -->|"1. VMware ESXi / Workstation (.vmdk / -flat.vmdk / -delta.vmdk / -sesparse.vmdk)"| F["בדוק מתארי טקסט (`cat *.vmdk`) ובדוק שרשרת (`vmkfstools -e Server-000002.vmdk`)"]
F --> G{"מהי תקלת VMware VMDK?"}
G -->|"אי התאמה של CID הורה (`parentCID .= CID of parent`)"| H["ערוך את מתאר הטקסט הצאצא `.vmdk` כך ש- `parentCID` יתאים את `CID` של האב, או שיכפל דיסק עלה פעיל ל-VMDK מאוחד חדש (`vmkfstools -i`)"]
G -->|"חסר מתאר טקסט של 1KB `.vmdk` (קיים רק `-flat.vmdk` ענק)"| I["חשב גודל בתים מדויק / 512 סקטורים וצור מחדש את מתאר הטקסט הפשוט `.vmdk` עם `vmkfstools -c`"]
E -->|"2. Microsoft Hyper-V (שרשרת.vhdx ו-.avhdx)"| J["בדוק את השרשרת מ-`.avhdx` החדש ביותר כלפי מעלה: `Get-VHD -Path *.avhdx | בחר Path, ParentPath`"]
J --> K["קישור מחדש של מצביע אב שבור (`Set-VHD -Path child.avhdx -ParentPath parent.vhdx -IgnoreIdMismatch`) או מיזוג לא מקוון (`Merge-VHD`)"]
E -->|"3. Proxmox / KVM / QEMU (.qcow2) או VirtualBox (.vdi)"| L["בדוק `qemu-img info --backing-chain`; תקן טבלאות refcount/L2 (`qemu-img check -r all`) או rebase (`qemu-img rebase -u`)"]
H --> M["Back Rescue File Out-of-Band: התקן כל שרשרת ישירות במצב קריאה בלבד באמצעות `guestmount --ro` או `7-Zip` / `UFS Explorer`"]
I --> M
K --> M
L --> M
הבנת איך שרשראות צילומי מצב של מכונות וירטואליות עובדות בפועל¶
בין אם אתה מפעיל את VMware ESXi, Microsoft Hyper-V, Proxmox/KVM או VirtualBox, כל hypervisor מיישם צילומי מצב תוך שימוש באותה ארכיטקטורה בסיסית בדיוק: רשימה מקושרת חד כיוונית של דיסקים אב לקריאה בלבד ודיסק קריאה-כתיבה של עלה צאצא.
[Base Disk: Server.vmdk / Server.vhdx] <-- Frozen Read-Only at Snapshot 1 (e.g., Jan 1)
^
| (Points to Parent Path + Parent CID/GUID: 1234abcd)
[Snapshot 1: Server-000001.vmdk / Server_A.avhdx] <-- Frozen Read-Only at Snapshot 2 (e.g., June 1)
^
| (Points to Parent Path + Parent CID/GUID: 5678ef01)
[Snapshot 2 (Active Leaf): Server-000002.vmdk / Server_B.avhdx] <-- Active Read/Write Today (Oct 31)
- כאשר ה-VM רוצה לכתוב בלוק חדש היום, הוא כותב רק לקובץ העלה התחתון (
Snapshot 2). - כאשר ה-VM רוצה לקרוא בלוק היום, ה-Hypervisor בודק
Snapshot 2תחילה. אם הבלוק הזה השתנה מאז 1 ביוני, הוא קורא אותוSnapshot 2. אם לא, זה מחפש במעלה השרשרתSnapshot 1. אם גם שם זה לא שונה, זה קורא את הבלוק המקורי מה-Base Disk. - מדוע שרשראות נשברות: כל תמונת מצב של ילד מאחסנת שני מצביעים קפדניים בכותרת שלו: (1) נתיב הקובץ של ההורה המיידי שלו, ו**(2) מזהה תוכן של 32 סיביות (
CIDב-VMware) או 128-bit Linkage GUID (ParentUniqueIdב-Hyper-V) שמתחדש בכל פעם שדיסק אב נפתח לכתיבה**. אם מישהו מעביר קובץ, משנה שם לתיקייה או מעלה לזמן קצר את הדיסק האב במצב קריאה-כתיבה,CID/GUIDשינויים, וה-hypervisor מסרב מיד להעלות את תמונת הילד כדי למנוע שחיתות בלוקים שקטים.
| פלטפורמת היפרוויזר | קבצי דיסק בסיס | קבצי תמונת מצב / דלתא | כלי CLI לבדיקת שרשרת | כלי איחוד בטוח / מיזוג CLI |
|---|---|---|---|---|
| VMware ESXi (VMFS-5 / VMFS-6) ותחנת עבודה | VM.vmdk (מתאר טקסט רגיל של 500 בתים) + VM-flat.vmdk (נתוני דיסק בינארי גולמי) |
VM-000001.vmdk (מתאר טקסט) + VM-000001-sesparse.vmdk (VMFS-6) או VM-000001-delta.vmdk (VMFS-5) |
vmkfstools -e VM-000002.vmdk ו cat VM*.vmdk |
vmkfstools -i VM-000002.vmdk /vmfs/volumes/NewDS/Merged.vmdk (שיבוט/מיזוג לא הרסני מחוץ למקום) |
| Microsoft Hyper-V (שרת Windows) | VM.vhdx (או מורשת .vhd) |
VM_<GUID>.avhdx (או .avhd) |
PowerShell: Get-VHD -Path *.avhdx \ | בחר Path, ParentPath, VhdType |
PowerShell: Set-VHD -Path child.avhdx -ParentPath parent.vhdx ו Merge-VHD -Path child.avhdx -DestinationPath parent.vhdx |
| Proxmox VE / QEMU / KVM (לינוקס) | vm-100-disk-0.qcow2 (או נפח LVM/ZFS גולמי) |
שכבת-על חיצונית .qcow2 עם כותרת קובץ גיבוי (או טבלת תמונת מצב פנימית של QCOW2) |
qemu-img info --backing-chain top_overlay.qcow2 |
qemu-img convert -O qcow2 top_overlay.qcow2 flattened_rescue.qcow2 (השטח הבטוח ביותר מחוץ למקום) או qemu-img commit |
| Oracle VirtualBox | Disk.vdi (בתוך תיקיית VM) |
{UUID}.vdi בפנים Snapshots/ תיקיית משנה + .vbox רישום מדיה ב-XML |
VBoxManage showmediuminfo disk "{UUID}.vdi" |
VBoxManage clonemedium disk "{Newest_Snapshot_UUID}.vdi" Flattened_Rescue.vdi |
מסלול 1: הצלת VMware ESXi & Workstation .vmdk שרשראות תמונת מצב¶
ב-VMware ESXi, דיסק וירטואלי יחיד מורכב למעשה משני קבצים נפרדים עבור הדיסק הבסיסי ושני קבצים נפרדים עבור כל תמונת מצב:
1. קובץ מתאר זעיר (-500-בתים) בטקסט רגיל (Server.vmdk ו Server-000001.vmdk) שמחזיק את CID, parentCID, גיאומטריית דיסק, ושם הקובץ המדויק של המידה הבינארית. (הערה: ממשק המשתמש באינטרנט של ESXi Datastore Browser מסתיר את הצמד -flat.vmdk ו -sesparse.vmdk קבצים בינאריים ומציג רק סמל אחד ממוזג, עליך להשתמש ב-מסוף SSH במארח ESXi כדי לראות את הקבצים האמיתיים).
2. קובץ היקף נתונים בינארי רב גיגה-בייט (Server-flat.vmdk עבור הדיסק הבסיסי, ו Server-000001-sesparse.vmdk או Server-000001-delta.vmdk עבור כל תמונת מצב).
תרחיש 1A: תיקון "The parent virtual disk has been modified since the child was created (Parent CID mismatch)"¶
- SSH לתוך המארח ESXi ונווט אל ספריית מאגר הנתונים של ה-VM:
- הדפיס את
CID,parentCID, וparentFileNameHintעל פני כל מתאר הטקסט.vmdkקבצים בבת אחת: (חשוב: רק לרוץcatאוgrepעל מתאר הטקסט הזעיר של 500 בתים.vmdkקבצים, לא ב-Multi-Gigabyte-flat.vmdkאו-sesparse.vmdkקבצים). - השווה את
CIDשל כל הורה נגדparentCIDשל הילד המיידי שלו: תסתכל על הפלט:Server.vmdk: CID=1a2b3c4d parentCID=ffffffff (ffffffff means this is the root Base Disk) Server-000001.vmdk: CID=99887766 parentCID=55443322 <-- ERROR: Should equal Server.vmdk's CID (1a2b3c4d) parentFileNameHint="Server.vmdk" Server-000002.vmdk: CID=aabbccdd parentCID=99887766 <-- OK: Matches Server-000001.vmdk's CID (99887766) parentFileNameHint="Server-000001.vmdk" - תקן את השבור
parentCIDבתיאור הילד ואמת עםvmkfstools -e: - ראשית, גבה את קבצי מתאר הטקסט (
cp Server-000001.vmdk Server-000001.vmdk.bak). - פתוח
Server-000001.vmdkבviולשנותparentCID=55443322לparentCID=1a2b3c4d(תואםServer.vmdkהנוכחיתCID). - בדוק את שלמות השרשרת מתוך תמונת המצב החדשה ביותר (במספר הגבוה ביותר) באמצעות
vmkfstools -e: - אם השרשרת שלמה, ESXi מוציא:
Disk chain is consistent. - איחוד לא הרסני (
vmkfstools -iשיבוט לא במקום): - אם
Server.vmdkשונה מעט לפני שתיקנת אתparentCID, אל תאחד במקום על פני העותק היחיד שלך. במקום זאת, הצבעvmkfstools -iבתמונת העלים החדשה ביותר (Server-000002.vmdk) ושכפל את כל השרשרת ל-VMDK חדיש ושטוח יחיד בחנות נתונים עם מקום פנוי: vmkfstools -iקורא כל בלוק מServer-000002.vmdkלמטה דרךServer-000001.vmdkוServer-flat.vmdkבמצב קריאה בלבד קפדני וכותבת תמונה נקייה ונטולת תמונותServer_Merged.vmdkמבלי לגעת בקבצים המקוריים שלך.
תרחיש 1B: יצירה מחדש של 500-בתים חסרים או נמחקים .vmdk מתאר טקסט מתי Server-flat.vmdk עדיין שלם¶
לפעמים מנהל מערכת או סקריפט שבור נמחק Server.vmdk (או שזה נפגם ל 0 bytes), מה שגורם לדפדפן ה-Datastore להפסיק להציג את הדיסק הווירטואלי, למרות שהנפח העצום של 500 גיגה-בייט Server-flat.vmdkקובץ המכיל 100 אחוז מהנתונים האמיתיים שלך עדיין נמצא שם ב-SSH (ls -la *-flat.vmdk).
אתה יכול ליצור מחדש את הטקסט הפשוט החסר Server.vmdk קובץ התיאור תוך 60 שניות מבלי לאבד ולו בייט אחד של נתונים בפנים Server-flat.vmdk:
# 1. Check the exact byte size of your existing Server-flat.vmdk:
ls -l Server-flat.vmdk
# Example output: -rw------- 1 root root 107374182400 Oct 31 12:00 Server-flat.vmdk (Exactly 107,374,182,400 bytes)
# 2. Create a temporary dummy VMDK of that EXACT byte size in /tmp or the datastore:
vmkfstools -c 107374182400 -d thin temp_dummy.vmdk
# 3. Delete the dummy binary file (temp_dummy-flat.vmdk) and rename the 500-byte descriptor to Server.vmdk:
rm -f temp_dummy-flat.vmdk
mv temp_dummy.vmdk Server.vmdk
# 4. Edit Server.vmdk in 'vi' and change the filename inside quotes from "temp_dummy-flat.vmdk" to "Server-flat.vmdk":
sed -i 's/temp_dummy-flat.vmdk/Server-flat.vmdk/g' Server.vmdk
# (Also delete the line 'ddb.thinProvisioned = "1"' if the original disk was thick-provisioned)
תרחיש 1C: ביטול נעילה של א .vmdk ננעל על ידי מארח ESXi נתלה או פרוקסי גיבוי קרס (Cannot open the disk: Failed to lock the file)¶
אם VM מסרב להידלק עם Failed to lock the file או Cannot open disk: Resource busy, מארח ESXi אחר באשכול (או מכשיר Veeam/גיבוי HotAdd שקרס במהלך הגיבוי) עדיין מחזיק נעילת קובץ SCSI / VMFS -flat.vmdk או -sesparse.vmdk:
1. בדוק אם VM של פרוקסי גיבוי קרס עדיין מכיל את VM הייצור שלך .vmdk מחובר לבקר ה-SCSI הווירטואלי שלו: ערוך את ההגדרות של מכשירי ה-VM של ה-Proxy Veeam/CommVault והסר כל דיסקי ייצור מיושנים המחוברים (**בחר "הסר ממכונה וירטואלית", לעולם אל "מחק קבצים מ-datastore").
2. מצא איזו כתובת MAC מארח ESXi ותהליך העולם מכיל את נעילת VMFS:
vmx מזהה עולם (esxcli vm process list), ולסיים את העולם התלוי (esxcli vm process kill --type=force --world-id=<WorldID>).
מסלול 2: הצלת Microsoft Hyper-V .vhdx ו .avhdx שרשראות תמונת מצב¶
ב-Microsoft Hyper-V, כל נקודת ביקורת (תמונת מצב) יוצרת דיסק קשיח וירטואלי שונה עם ההרחבה .avhdx (או .avhd בפורמט VHD ישן יותר) הוקצה שם קובץ GUID ארוך כמו ProdSQL_A1B2C3D4-E5F6-7890-ABCD-1234567890AB.avhdx.
שלב 1: מפה את הכרונולוגי המדויק .avhdx עץ הורה-ילד ב- PowerShell¶
לפני מיזוג או קישור מחדש של משהו ב-Hyper-V Manager, פתח חלון Elevated Administrator PowerShell במארח Hyper-V, נווט אל התיקיה המכילה את .vhdx ו .avhdx קבצים, והפעל את ה-one liner הזה כדי להציג את שרשרת ההורה-ילד המדויקת מהחדש ליותר:
# Inspect every .vhdx and .avhdx in the directory, sorted by LastWriteTime:
Get-ChildItem -Filter "*.*vhd*" | ForEach-Object {
Get-VHD -Path $_.FullName -ErrorAction SilentlyContinue |
Select-Object Path, ParentPath, VhdType, FileSize, Size
} | Format-List
תסתכל על Path ו ParentPath שדות. הם יחשפו את סדר השרשרת המדויק:
- ProdSQL.vhdx -> ParentPath: (blank) (דיסק בסיס בסיס, הישן ביותר)
- ProdSQL_1111.avhdx -> ParentPath: D:\VMs\ProdSQL.vhdx (ילד 1)
- ProdSQL_2222.avhdx -> ParentPath: D:\VMs\ProdSQL_1111.avhdx (ילד 2)
- ProdSQL_3333.avhdx -> ParentPath: D:\VMs\ProdSQL_2222.avhdx (הדיסק Active Leaf החדש ביותר)
שלב 2: תיקון "The chain of virtual hard disks is broken" או "Differencing disk parent ID mismatch" (Set-VHD -IgnoreIdMismatch)¶
מה אם מישהו העביר את תיקיית ה-VM מ C:\VMs\ ל E:\VMs\, או אוחל בטעות ProdSQL.vhdx למשך 5 שניות, מה שגורם ProdSQL_1111.avhdx להיכשל עם:
The chain of virtual hard disks is broken. The system cannot locate the parent virtual hard disk for the differencing disk או There is a mismatch in the virtual disk identifiers?
השתמש ב-cmdlet הרשמי Hyper-V PowerShell Set-VHDעם ה-IgnoreIdMismatch דגל (לאחר גיבוי הקבצים תחילה):
# Relink a child .avhdx to its parent .vhdx/.avhdx (adding -IgnoreIdMismatch if the parent timestamp/GUID shifted):
Set-VHD -Path "E:\VMs\ProdSQL_1111.avhdx" -ParentPath "E:\VMs\ProdSQL.vhdx" -IgnoreIdMismatch
שלב 3: מיזוג יתום יתום .avhdx שרשרת מהחדש ביותר לישן ביותר (Merge-VHD)¶
כאשר סוכן גיבוי משאיר 15 יתומים .avhdx קבצים בתיקייה שלך שאינם מופיעים יותר בעץ Hyper-V Manager GUI "Checkpoints", עליך למזג אותם באופן ידני ב-PowerShell בזמן שה-VM כבוי.
Danger
כלל הברזל של Hyper-V .avhdx מיזוג: עליך תמיד למזג מה-החדש ביותר (העלה הצעיר ביותר) .avhdx לתוך ההורה המיידי שלו, מתקדם צעד אחר צעד אחורה במעלה השרשרת עד רק לבסיס .vhdx נשאר.
למשל, בשרשרת Base.vhdx <- Child1.avhdx <- Child2.avhdx <- Child3_Newest.avhdx:
1. מיזוג Child3_Newest.avhdx -> לתוך Child2.avhdx.
2. מיזוג Child2.avhdx -> לתוך Child1.avhdx.
3. מיזוג Child1.avhdx -> לתוך Base.vhdx.
4. הפנה את הגדרות ה-VM אל Base.vhdx ואתחול.
הפעל את הפקודות המדויקות של PowerShell על עותק עבודה של התיקיה:
# Step 1: Merge Child 3 (Newest) into Child 2:
Merge-VHD -Path "E:\VMs\ProdSQL_3333.avhdx" -DestinationPath "E:\VMs\ProdSQL_2222.avhdx"
# Step 2: Merge Child 2 into Child 1:
Merge-VHD -Path "E:\VMs\ProdSQL_2222.avhdx" -DestinationPath "E:\VMs\ProdSQL_1111.avhdx"
# Step 3: Merge Child 1 into the Base .vhdx:
Merge-VHD -Path "E:\VMs\ProdSQL_1111.avhdx" -DestinationPath "E:\VMs\ProdSQL.vhdx"
מסלול 3: הצלת Proxmox VE / QEMU / KVM .qcow2 ו-VirtualBox .vdi שרשראות¶
1. בדיקה ותיקון פגומים QCOW2 L1/L2 Cluster & Refound Tables (qemu-img check)¶
כאשר מארח Linux KVM או Proxmox סובל מהפסקת חשמל פתאומית ללא מטמון מגובה סוללה, .qcow2 דיסק וירטואלי לעתים קרובות לא מצליח לאתחל איתו qcow2: Marking image as corrupt: L2 table offset unaligned או Refcount block corrupted.
1. העתק תחילה את .qcow2 קובץ (cp vm-100-disk-0.qcow2 vm-100-disk-0.qcow2.bak).
2. בדוק את שרשרת הגיבוי ואת רשימת התמונות הפנימית:
2. תיקון נתיב קובץ גיבוי QCOW2 שבור (qemu-img rebase -u)¶
אם תמונת מצב חיצונית QCOW2 (overlay.qcow2) לא מצליח להיפתח כי קובץ הגיבוי האב שלו (base.qcow2) הועבר לספרייה חדשה או למאגר אחסון חדש, עדכן את מצביע קובץ הגיבוי במצב לא בטוח (-u, מצב כותרת בלבד) ללא שכתוב בלוקי נתונים:
3. שיטוח שרשרת QCOW2 או VMDK או VHDX שבירה לתמונה עצמאית חדשה לגמרי (qemu-img convert)¶
אחד הכלים המגוונים ביותר בהצלת מכונות וירטואליות הוא qemu-img convert (שנקרא באופן מקורי .qcow2, .vmdk, .vhdx, .vhd, ו .vdi). כשאתה מצביע qemu-img convert בתמונת העלה החדשה ביותר של שרשרת חוקית, הוא קורא את כל ההיררכיה של הורה-ילד במצב קריאה בלבד וכותב דיסק וירטואלי חדש לגמרי, עצמאי, נטול תצלומי מצב באחסון ההצלה שלך:
# Non-destructively flatten an entire QCOW2, VMDK, or VHDX chain into a single clean image:
qemu-img convert -p -O qcow2 top_snapshot_leaf.qcow2 /mnt/rescue_storage/flattened_clean.qcow2
רצועה 4: הצלת קבצים מחוץ לפס (חילוץ קבצים כאשר ה-VM עדיין לא מאתחל)¶
מה אם מערכת ההפעלה האורחת בתוך הדיסק הוירטואלי אינה ניתנת לאתחול, או שתמונת מצב אמצעית בשרשרת פגומה חלקית ואתה צריך לשלוף מסדי נתונים של SQL (.mdf/.ldf), קבצי QuickBooks, /var/lib/mysql, או מסמכי חברה ב-30 הדקות הקרובות?
אינך צריך לאתחל מחשב וירטואלי כדי לחלץ את הקבצים בתוך הכונן הקשיח הווירטואלי שלו. השתמש בכל אחד משלושת כלי הרכבה מחוץ לפס הבלתי הרסניים הבאים:
שיטה 1: הר כל .vmdk, .vhdx, .qcow2, או .vdi במצב קריאה בלבד בלינוקס באמצעות libguestfs (guestmount / qemu-nbd)¶
התקן libguestfs-tools (sudo apt install libguestfs-tools qemu-utils ב-Ubuntu/Debian/Proxmox) והעלו את תמונת העלה החדשה ביותר במצב קפדני קריאה בלבד (--ro):
# Option A: Using guestmount (Automatically detects internal guest LVM/partitions and mounts read-only):
sudo mkdir -p /mnt/vm_rescue
sudo guestmount -a /path/to/Newest_Leaf_Snapshot.vmdk -i --ro /mnt/vm_rescue
# (If guest OS partitions fail auto-inspection due to dirty NTFS journal, list partitions with 'virt-filesystems -a disk.vmdk -l'
# and mount the specific partition directly with '-m /dev/sda2 --ro -o norecover')
# Option B: Attaching the virtual disk chain as a Read-Only Network Block Device (/dev/nbd0):
sudo modprobe nbd max_part=16
sudo qemu-nbd --read-only --connect=/dev/nbd0 /path/to/Newest_Leaf_Snapshot.qcow2
sudo partprobe /dev/nbd0
lsblk /dev/nbd0
# Now mount /dev/nbd0p2 read-only (with -o ro,norecover for NTFS or -o ro,noload for ext4):
sudo mount -o ro,norecover /dev/nbd0p2 /mnt/vm_rescue
שיטה 2: חילוץ מיידי לקריאה בלבד ב-Windows באמצעות 7-Zip או Disk Management -> Attach VHD (Read-Only)¶
- באמצעות 7-Zip (עובד על
.vmdk,.vhdx,.vhd,.qcow2, ו.vdi): לחץ לחיצה ימנית על פריט עצמאי או שטוח.vmdk,.vhdx, או.qcow2קובץ ב-Windows ובחר 7-Zip -> פתח ארכיון. 7-Zip מנתח באופן טבעי טבלאות מחיצות GPT/MBR ומערכות קבצים NTFS/ext4 בתוך דיסקים וירטואליים במצב של 100% קריאה בלבד, ומאפשר לך לגרור ולשחרר תיקיות אורחות ישירות אל שולחן העבודה שלך תוך שניות. - שימוש בניהול דיסקים של Windows (עבור
.vhdx/.avhdx): פתוחdiskmgmt.msc-> פעולה -> צרף VHD -> דפדף אל הדף החדש ביותר.avhdx(או.vhdx), בדוק את התיבה[X] Read-only(קריטי: לעולם אל תשכח לסמן לקריאה בלבד, אחרת Windows ישנה את כותרת הדיסק), ולחץ על אישור. כונני C: ו-D: של ה-VM שלך מופיעים מיד בסייר הקבצים של Windows.
שיטה 3: שחזור שרשראות שנפגעו קשות עם UFS Explorer Professional Recovery¶
אם דיסק אב בשרשרת VMDK או VHDX אוחל ושונה בטעות, או אם השחתה של מאגר הנתונים VMFS/NTFS גרסה חלק מ- -sesparse.vmdk או .avhdx קובץ כך שכלי ה-Hypervisor דוחים אותו, UFS Explorer Professional Recovery (או R-Studio Technician) מאפשר לך להרכיב באופן ידני את דיסק הבסיס הגולמי וכל תמונת דלתא צאצאית ל-Virtual Delta Stack ב-RAM של תוכנה, תוך עקיפת Hypervisor. CID/GUID בדיקות כותרות כדי לגלף ולחלץ קבצי אורח שלמים.
רצועה 5: שחזור קובץ תצורה של VM יתום (.vmx, .xml, או <vmid>.conf)¶
לפעמים שרשרת הדיסק הקשיח הווירטואלי עצמו (*.vmdk, *.vhdx, או *.qcow2) הוא 100 אחוז שלם במערך האחסון, אבל קובץ התצורה הקטן שמגדיר את פריסת החומרה של המכונה הווירטואלית (.vmx ב-VMware ESXi, <GUID>.vmcx / .xml ב-Hyper-V, או /etc/pve/qemu-server/<vmid>.conf ב-Proxmox VE) פגום, נמחק בטעות או מאופס במהלך קריסת מארח.
אם תיצור מחדש מעטפת VM חלופית עם בקר אחסון וירטואלי או מצב קושחה שגויים, מערכת ההפעלה האורחת תקרוס מיד עם האתחול עם INACCESSIBLE_BOOT_DEVICE (Windows) או היכנס לתוך a dracut / initramfs מעטפת חירום (לינוקס). התאם את ארבע הגדרות החומרה האלה לתצורת האורח המקורית שלך לפני חיבור הדיסק הוירטואלי שחולץ:
| הגדרת חומרה וירטואלית | סימפטום אם הוגדר בצורה שגויה ב-VM חלופי | כיצד לקבוע את ההגדרה הנכונה ללא הישן .vmx / .vmcx |
|---|---|---|
1. מצב אתחול קושחה (UEFI / OVMF לעומת Legacy BIOS / SeaBIOS) |
מציג VM "Operating System Not Found" או נופל ישר לתוך מעטפת האינטראקטיבית של UEFI (Shell>). |
בדוק את טבלת המחיצות של הדיסק הוירטואלי (fdisk -l או virt-filesystems -a disk.vmdk --partitions --long). אם לדיסק יש 100 MB עד 512 MB FAT32 EFI System Partition (ESP) ומשתמש בטבלת מחיצות GPT, עליך להגדיר את קושחת ה-VM ל-UEFI. אם הדיסק משתמש בטבלת מחיצות MBR (dos) ללא מחיצת EFI, הגדר את הקושחה ל-Legacy BIOS. |
2. סוג בקר אחסון וירטואלי (VMware Paravirtual SCSI - PVSCSI לעומת LSI Logic SAS לעומת NVMe לעומת VirtIO SCSI) |
Windows זורק א 0x0000007B / INACCESSIBLE_BOOT_DEVICE מסך כחול; לינוקס נכנסת initramfs: /dev/mapper/root does not exist. |
ב-VMware ESXi, בדוק את הטקסט הפשוט .vmdk קובץ התיאור עבור השורה ddb.adapterType = "lsilogic" או "buslogic" או לבדוק vmware.log בתוך תיקיית VM (grep -i "scsi0.virtualDev" vmware.log), שמדפיס את ההיסטורי המדויק .vmx מילון מהאתחול המוצלח האחרון. |
3. מתאם רשת וירטואלית כתובת ומנהל התקן MAC (VMXNET3 לעומת E1000e לעומת VirtIO-Net) |
מערכת ההפעלה האורח מאתחלת, אך מאבדת את כתובת ה-IP הסטטית או נעילת הרישוי שלה מכיוון שהיא מזהה כרטיס רשת "חדש" (eth1 במקום eth0). |
חפש את הישן vmware.log בתוך ספריית מאגר הנתונים של ה-VM (grep -i "ethernet0.generatedAddress" vmware.log) כדי לשחזר את כתובת ה-MAC המדויקת של 6 בתים (00:50:56:xx:xx:xx) והדבק אותו בהגדרות הרשת של ה-VM החלופי. |
4. Virtual TPM 2.0 (vTPM) & BitLocker / LUKS State |
Windows BitLocker מבקש את מפתח השחזור בן 48 הספרות בעת האתחול אם .nvram / vTPM המדינה חסרה. |
ב-VMware ESXi, שמרו תמיד על <VM_Name>.nvram ו.vmsd קבצים לצד ה .vmdk קבצים; ב-Hyper-V, שימרו את Virtual Machines\<GUID>.vmgs (מדינת אורח) כך שמפתחות ה-TPM הווירטואליים יישארו מקושרים. |
שאלות נפוצות¶
מה יקרה אם רק אכוון את ה-VM שלי בחזרה לבסיס המקורי `.vmdk` או `.vhdx` קובץ ולאתחל אותו כדי לראות מה יש בפנים?
לעולם אל תעשה זאת מבלי לגבות תחילה את הקבצים, ולעולם אל תפעיל את הדיסק הבסיסי במצב קריאה-כתיבה כאשר צילומי מצב (`-000001.vmdk` או `.avhdx`) קיימים. ראשית, הדיסק הבסיסי הוקפא בדיוק ביום ובדקה שבה נוצרה תמונת המצב הראשונה, אם תמונת מצב רצה במשך 6 חודשים, אתחול הדיסק הבסיסי מאתחל את השרת שלך כפי שהיה קיים לפני 6 חודשים, וחסר כל קובץ שנוצר בחצי השנה האחרונה. שנית, וגרוע הרבה יותר, ברגע שמערכת ההפעלה האורחת מאתחלת מהדיסק הבסיסי, היא כותבת יומני אתחול ושינויי יומן לדיסק הבסיס, משנה את הסקטורים שלו ומשנה את מזהה התוכן שלו (`CID`) או קישור GUID. זה שובר לצמיתות את מפת בלוק הדלתא הדרושה לכל צילומי המצב של הילד שלך.
מדוע מוצג חנות הנתונים של VMware ESXi שלי `Server-000001.vmdk` כמו בעל אותו גודל מלא של 500 GB כמו `Server.vmdk` בדפדפן האינטרנט?
זוהי מוזרות תצוגה של דפדפן VMware ESXi Web Client Datastore. בממשק המשתמש של דפדפן האינטרנט, ESXi מסתיר את הבסיס `-flat.vmdk`, `-delta.vmdk`, ו `-sesparse.vmdk` קבצים בינאריים ומציג את *הקיבולת הלוגית המסופקת* של הדיסק במקום את השטח הפיזי שנצרך בפועל על ידי קובץ הדלתא. כדי לראות את שמות הקבצים הפיזיים האמיתיים, גדלים מדויקים של בתים וקבצי מתארי טקסט, אפשר SSH במארח ESXi, היכנס דרך Terminal/PuTTY, נווט אל `/vmfs/volumes/
כיצד אוכל לאחד תמונות VMware או Hyper-V כאשר מאגר הנתונים המארח מלא ב-100% (0 בתים בחינם)?
כאשר מאגר נתונים מגיע ל-0 בתים פנויים, הרגיל במקום "מחק את כל התמונות / איחוד" נכשל מכיוון שמיזוג Snapshot 2 לתוך Snapshot 1 מגדיל באופן זמני את גודל Snapshot 1 לפני שניתן למחוק את Snapshot 2. יש לך שלוש דרכים בטוחות לצאת: (1) מצא ומחק או העבר קבצי ISO *אחרים* לא חשובים, קובצי יומן ישנים או מחשבי VM בדיקה כבויים באותו מאגר נתונים כדי לפנות 15 עד 20 אחוז מרווח ראש; (2) אם מערך האחסון הוא SAN/NAS (iSCSI/NFS/FC), הרחב את ה-LUN והגדל את נפח ה-VMFS/NTFS המקוון ב-100 GB; או (3) חבר כונן USB חיצוני או שיתוף NFS למארח והשתמש בו `vmkfstools -i Server-000002.vmdk /vmfs/volumes/New_NFS_Share/Merged.vmdk` (או `qemu-img convert` / `Merge-VHD` לאות כונן אחרת) כדי לאחד את השרשרת *לא במקום* לנפח האחסון השני באמצעות אפס בתים של שטח כתיבה במאגר הנתונים המלא.
איך אני מונע מתוכנות גיבוי כמו Veeam, CommVault או Nakivo להשאיר "תמונות מצב מיותמות" נסתרות שממלאות את השרת שלי חודשים מאוחר יותר?
יישומי גיבוי יוצרים תמונת מצב זמני של Hypervisor בתחילת כל עבודת גיבוי לילית כדי שיוכלו לקרוא את דיסק הבסיס הקפוא, ולאחר מכן להורות ל-ESXi או Hyper-V למחוק/לאחד את תמונת המצב עם סיום הגיבוי. מדי פעם, פסק זמן לאחסון גורם לשלב הסרת תמונת המצב להיכשל בשקט, ומותיר `-000001.vmdk` או `.avhdx` גדל במשך חודשים עד שהוא מגיע ל-100 אחוז מחנות הנתונים. הגדר שני אמצעי הגנה אוטומטיים: (1) הפעל את אזעקת vCenter / Hyper-V / Proxmox המובנית עבור `"Virtual Machine Snapshot Size > 20 GB or Age > 72 Hours"`, וכן (2) תזמן ביקורת שבועית לקריאה בלבד של PowerCLI או PowerShell (`Get-VM | Get-Snapshot` או `Get-ChildItem -Recurse -Filter *.avhdx`) ששולח דוא"ל לצוות המנהל שלך בכל פעם שקיים קובץ תמונת מצב ישן מ-3 ימים באחסון הייצור.
נבדקו מקורות¶
- VMware מאת Broadcom Technical Knowledge Base: KB 1007969 / 316578 (פתרון "הדיסק הווירטואלי האב השתנה מאז שהילד נוצר" שגיאות CID Mismatch), KB 1002511 (יצירת מחדש של מתאר דיסק חסר של מחשב וירטואלי
.vmdkקובץ), ו-KB 10051 (הבנת צילומי Snapshot של מחשב וירטואלי ב-ESXi). - Microsoft Learn / Windows Server Hyper-V תיעוד הנדסי: Hyper-V PowerShell Reference for
Get-VHD,Set-VHD -IgnoreIdMismatch, וMerge-VHDאיחוד דיסקים לא מקוונים. - פרויקט QEMU & Red Hat Enterprise Linux תיעוד וירטואליזציה: רשמי
qemu-imgידני (info --backing-chain,check -r all,rebase -u,convert) וlibguestfs(guestmount --ro) בדיקת דיסק וירטואלי לקריאה בלבד. - תיעוד טכני של Oracle VirtualBox:
VBoxManage showmediuminfoוclonemediumארכיטקטורת תמונה שונה. - המכון הלאומי לתקנים וטכנולוגיה (NIST, ארצות הברית): פרסום מיוחד של NIST 800-86: מדריך לשילוב טכניקות משפטיות בתגובה לאירועים (שימור תמונה וירטואלית של מכונה).