Skip to content

Uszkodzony łańcuch migawek maszyny wirtualnej (.VMDK / .VHDX / .QCOW2) i ratowanie dysku

Numery alarmowe różnią się w zależności od kraju. Na tej stronie używany jest numer 911, numer obowiązujący w Stanach Zjednoczonych i Kanadzie. W wielu innych krajach używany jest numer 112, 999 lub inny. Znajdź numer dla swojego kraju.

Kiedy produkcyjna maszyna wirtualna (VM) na VMware ESXi / Workstation, Microsoft Hyper-V, Proxmox VE / QEMU-KVM lub Oracle VirtualBox nagle odmawia włączenia po niepowodzeniu zadania tworzenia kopii zapasowej, w magazynie danych kończy się miejsce na dysku (0 bytes free) lub administrator dotknie pliku migawki, jedno kliknięcie w panice może wymazać miesiące lub lata aktualnych danych biznesowych. Migawki maszyn wirtualnych nie są nie pełnymi niezależnymi kopiami zapasowymi; są delikatne Łańcuchy różnicujące delta kopiowania przy zapisie (CoW) (*-000001-delta.vmdk, *.avhdxlub plik kopii zapasowej .qcow2 overlays), gdzie każdy pojedynczy blok zapisany od czasu wykonania migawki znajduje się wyłącznie w podrzędnych plikach delta, podczas gdy oryginalny dysk podstawowy jest zamrożony w przeszłości.

Jeśli widzisz błędy takie jak "The parent virtual disk has been modified since the child was created (Parent CID does not match)" w VMware, "Cannot boot: The chain of virtual hard disks is broken" w Hyper-V lub "Could not open backing file: L1/L2 table corrupted" w QEMU/Proxmox, ** ponowne skierowanie maszyny wirtualnej bezpośrednio na dysk podstawowy (flat.vmdk lub baza .vhdx), a uruchomienie go jest fatalne**. Spowoduje to uruchomienie serwera w stanie, w jakim istniał 6 miesięcy temu, kiedy utworzono pierwszą migawkę, natychmiastowo unieważniając kryptograficzne łącze GUID/CID elementu nadrzędnego-podrzędnego i renderując każdą migawkę delta od tej daty jako osieroconą i uniemożliwiającą połączenie.

W tym przewodniku opisano krok po kroku nieniszczącą rekonstrukcję łańcucha migawek, naprawę nagłówków plików deskryptorów i protokoły ekstrakcji plików gościa poza pasmem w oparciu o artykuły z bazy wiedzy VMware by Broadcom (KB 1007969/316578 i KB 1002511), Microsoft Hyper-V Merge-VHD i Set-VHD specyfikacje techniczne, QEMU qemu-img i libguestfs (guestmount) standardy kryminalistyczne i publikacja specjalna NIST 800-86.

Zrób to teraz

Jeśli maszyna wirtualna odmawia uruchomienia lub zgłasza uszkodzony łańcuch migawek/błąd uszkodzonego dysku wirtualnego:

  1. ** NIGDY nie edytuj ustawień maszyny wirtualnej, aby uruchamiać ją bezpośrednio z dysku podstawowego (Server.vmdk lub Server.vhdx) w przypadku migawek delta (-000001.vmdk lub .avhdx) istnieją w folderze.** W chwili, gdy system operacyjny gościa uruchamia się bezpośrednio z podstawowego dysku nadrzędnego nawet przez 2 sekundy, system operacyjny gościa zapisuje znaczniki czasu rozruchu i aktualizacje dziennika NTFS/ext4 na dysku podstawowym, modyfikując Content ID dysku nadrzędnego (CID) w VMware lub identyfikator GUID połączenia/znacznik czasu w Hyper-V. Ten pojedynczy rozruch przerywa cały łańcuch migawek podrzędnych, które zależą od tego, czy dysk podstawowy pozostaje zamrożony bit po bicie. Jeśli w Twojej serwerowni występuje aktywny pożar, awaria chłodzenia lub zagrożenie fizyczne, ewakuuj się i zadzwoń pod lokalny numer alarmowy (911 w Stanach Zjednoczonych i Kanadzie, 112 w całej Unii Europejskiej, 999 w Wielkiej Brytanii) lub sprawdź numery alarmowe.
  2. ** NIGDY nie usuwaj .avhdx, -delta.vmdklub -sesparse.vmdk plików w Eksploratorze Windows lub przeglądarce ESXi Datastore, aby „zwolnić miejsce na dysku”.** W przeciwieństwie do zwykłych plików tymczasowych, .avhdx i -delta.vmdk pliki SĄ Twoim bieżącym dyskiem twardym. Jeśli migawka została utworzona 8 miesięcy temu przez zablokowane zadanie tworzenia kopii zapasowej Veeam/CommVault i pozostawiona uruchomiona, 100 procent wszystkich transakcji w bazie danych, faktur i plików utworzonych w ciągu ostatnich 8 miesięcy jest w nich przechowywanych .avhdx lub -delta.vmdk pliki. Usunięcie ich powoduje usunięcie wszystkich danych utworzonych od momentu uruchomienia migawki.
  3. ** Skopiuj lub sklonuj wszystko .vmdk, .vhdx/.avhdxlub .qcow2 pliki na zewnętrzny/dodatkowy wolumin pamięci PRZED uruchomieniem jakiegokolwiek polecenia scalania, zatwierdzania lub naprawy.** Łączenie łańcucha migawek powoduje zapisanie wszystkich bloków delta wstecz na dysku nadrzędnym na miejscu. Jeśli scalanie nie powiedzie się w połowie z powodu uszkodzonego sektora dysku lub błędu pełnego magazynu danych, zarówno dysk nadrzędny, jak i podrzędny są uszkodzone, chyba że najpierw wykonano kopię nieprzetworzonego pliku.
  4. Jeśli hypervisor uległ awarii, ponieważ magazyn danych/wolumin hosta osiągnął 100% zapełnienia (No space left on device), NIGDY nie próbuj „usuwać/konsolidować migawek”, dopóki nie dodasz wolnego miejsca lub nie sklonujesz do większego magazynu danych. Konsolidacja łańcucha wielu migawek wymaga tymczasowej przestrzeni tymczasowej równej rozmiarowi największego dysku delta. Próba konsolidacji w oparciu o magazyn danych zapełniony w 99% spowoduje awarię hiperwizora w trakcie zatwierdzania.
  5. ** Zamapuj dokładny łańcuch zależności nadrzędny -> podrzędny za pomocą poleceń inspekcji tylko do odczytu (vmkfstools -e, Get-VHDlub qemu-img info --backing-chain) przed dotknięciem pojedynczego bajtu.** Każdy nagłówek pliku migawki wyraźnie określa dokładną nazwę pliku nadrzędnego i nadrzędny identyfikator kryptograficzny, który ma znajdować się bezpośrednio nad nim.
flowchart TD
    A["Maszyna wirtualna odmawia uruchomienia: uszkodzony łańcuch migawek, niezgodność identyfikatora CID elementu nadrzędnego lub uszkodzony plik VMDK/VHDX/QCOW2"] --> B["ZATRZYMAJ: NIE uruchamiaj bezpośrednio dysku podstawowego i NIE usuwaj żadnych plików -delta.vmdk lub .avhdx"]
    B --> C["Krok 1: Sprawdź magazyn danych hosta/wolne miejsce na woluminie („df -h” / „lista systemów plików pamięci esxcli”)"]
    C --> D["Krok 2: Przed modyfikacją skopiuj wszystkie pliki podstawowe i migawki na dodatkowy dysk zapasowy NAS/SAN/USB"]
    D --> E{"Którego formatu hypervisora/dysku wirtualnego dotyczy problem?"}
    E -->|"1. VMware ESXi / Stacja robocza (.vmdk / -flat.vmdk / -delta.vmdk / -sesparse.vmdk)"| F["Sprawdź deskryptory tekstowe (`cat *.vmdk`) i sprawdź łańcuch (`vmkfstools -e Server-000002.vmdk`)"]
    F --> G{"Jaka jest usterka VMware VMDK?"}
    G -->|"Niezgodność identyfikatora CID elementu nadrzędnego („parentCID .= CID elementu nadrzędnego”)"| H["Edytuj deskryptor tekstu podrzędnego `.vmdk`, tak aby `parentCID` pasował do `CID` rodzica LUB sklonuj dysk aktywnego liścia do nowego skonsolidowanego VMDK (`vmkfstools -i`)"]
    G -->|"Brakuje deskryptora tekstowego `.vmdk` o rozmiarze 1 KB (Istnieje tylko ogromny plik `-flat.vmdk`)"| I["Oblicz dokładny rozmiar bajtów / 512 sektorów i odtwórz zwykły deskryptor `.vmdk` za pomocą `vmkfstools -c`"]
    E -->|"2. Microsoft Hyper-V (łańcuch .vhdx i .avhdx)"| J["Sprawdź łańcuch od najnowszego `.avhdx` w górę: `Get-VHD -Path *.avhdx | Wybierz opcję Ścieżka, Ścieżka nadrzędna`"]
    J --> K["Połącz ponownie uszkodzony wskaźnik rodzica (`Set-VHD -Path child.avhdx -ParentPath parent.vhdx -IgnoreIdMismatch`) lub scalanie offline (`Merge-VHD`)"]
    E -->|"3. Proxmox / KVM / QEMU (.qcow2) lub VirtualBox (.vdi)"| L["Sprawdź `qemu-img info --backing-chain`; napraw tabele refcount/L2 (`qemu-img check -r all`) lub rebase (`qemu-img rebase -u`)"]
    H --> M["Awaryjne przywracanie plików poza pasmem: Zamontuj dowolny łańcuch bezpośrednio w trybie tylko do odczytu za pomocą `guestmount --ro` lub `7-Zip` / `UFS Explorer`"]
    I --> M
    K --> M
    L --> M

Zrozumienie, jak faktycznie działają łańcuchy migawek maszyn wirtualnych

Niezależnie od tego, czy korzystasz z VMware ESXi, Microsoft Hyper-V, Proxmox/KVM czy VirtualBox, każdy hypervisor implementuje migawki przy użyciu dokładnie tej samej podstawowej architektury: jednokierunkowo połączonej listy dysków nadrzędnych tylko do odczytu i dysku Delta podrzędnego liścia do odczytu i zapisu.

[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)
  • Kiedy maszyna wirtualna chce dzisiaj napisać nowy blok, zapisuje TYLKO do dolnego pliku liścia (Snapshot 2).
  • Kiedy maszyna wirtualna chce dzisiaj odczytać blok, hiperwizor sprawdza Snapshot 2 pierwszy. Jeśli ten blok został zmodyfikowany od 1 czerwca, odczytuje go z Snapshot 2. Jeśli nie, sprawdza łańcuch Snapshot 1. Jeśli tam również nie został zmodyfikowany, odczytuje oryginalny blok z pliku Base Disk.
  • Dlaczego łańcuchy się psują: Każda migawka podrzędna przechowuje w swoim nagłówku dwa ścisłe wskaźniki: (1) Ścieżka do pliku bezpośredniego elementu nadrzędnego oraz (2) 32-bitowy identyfikator treści (CID w VMware) lub 128-bitowy identyfikator GUID połączenia (ParentUniqueId w Hyper-V), który jest regenerowany za każdym razem, gdy dysk nadrzędny jest otwierany do zapisu. Jeśli ktoś przeniesie plik, zmieni nazwę folderu lub na krótko zamontuje dysk nadrzędny w trybie odczytu i zapisu, dysk rodzica CID / GUID zmiany, a hypervisor natychmiast odmawia zamontowania migawki podrzędnej, aby zapobiec uszkodzeniu cichego bloku.
Platforma Hypervisora Podstawowe pliki dyskowe Pliki migawek/delta Narzędzie CLI do kontroli łańcucha Narzędzie bezpiecznej konsolidacji/scalania CLI
VMware ESXi (VMFS-5 / VMFS-6) i stacja robocza VM.vmdk (500-bajtowy deskryptor w postaci zwykłego tekstu) + VM-flat.vmdk (surowe dane binarne dysku) VM-000001.vmdk (deskryptor tekstowy) + VM-000001-sesparse.vmdk (VMFS-6) lub VM-000001-delta.vmdk (VMFS-5) vmkfstools -e VM-000002.vmdk i cat VM*.vmdk vmkfstools -i VM-000002.vmdk /vmfs/volumes/NewDS/Merged.vmdk (Niedestrukcyjne klonowanie/łączenie poza miejscem)
Microsoft Hyper-V (Windows Server) VM.vhdx (lub dziedzictwo .vhd) VM_<GUID>.avhdx (lub .avhd) PowerShell: Get-VHD -Path *.avhdx \ | Wybierz opcję Ścieżka, Ścieżka nadrzędna, Typ Vhd PowerShell: Set-VHD -Path child.avhdx -ParentPath parent.vhdx i Merge-VHD -Path child.avhdx -DestinationPath parent.vhdx
Proxmox VE/QEMU/KVM (Linux) vm-100-disk-0.qcow2 (lub surowy wolumen LVM/ZFS) Nakładka zewnętrzna .qcow2 z nagłówkiem pliku kopii zapasowej (lub wewnętrzną tabelą migawek QCOW2) qemu-img info --backing-chain top_overlay.qcow2 qemu-img convert -O qcow2 top_overlay.qcow2 flattened_rescue.qcow2 (Najbezpieczniejsze spłaszczenie poza miejscem) lub qemu-img commit
Wirtualny Box Oracle Disk.vdi (wewnątrz folderu VM) {UUID}.vdi wewnątrz Snapshots/ podfolder + .vbox Rejestr multimediów XML VBoxManage showmediuminfo disk "{UUID}.vdi" VBoxManage clonemedium disk "{Newest_Snapshot_UUID}.vdi" Flattened_Rescue.vdi

Ścieżka 1: Ratowanie VMware ESXi i stacji roboczej .vmdk łańcuchy migawek

W VMware ESXi pojedynczy dysk wirtualny składa się w rzeczywistości z dwóch oddzielnych plików dla dysku podstawowego i dwóch oddzielnych plików dla każdej migawki: 1. ** Mały (około 500 bajtów) plik deskryptora w postaci zwykłego tekstu (Server.vmdk i Server-000001.vmdk)**, który zawiera CID, parentCID, geometrię dysku i dokładną nazwę pliku o zasięgu binarnym. (Uwaga: standardowy graficzny interfejs użytkownika przeglądarki ESXi Datastore Browser ukrywa sparowane pliki -flat.vmdk i -sesparse.vmdk binarnych i wyświetla tylko jedną połączoną ikonę, MUSISZ użyć sesji terminala SSH na hoście ESXi, aby zobaczyć prawdziwe pliki). 2. Wielogigabajtowy plik binarny o zakresie danych (Server-flat.vmdk dla dysku podstawowego i Server-000001-sesparse.vmdk lub Server-000001-delta.vmdk za każdą migawkę).

Scenariusz 1A: Naprawa "The parent virtual disk has been modified since the child was created (Parent CID mismatch)"

  1. SSH do hosta ESXi i przejdź do katalogu magazynu danych maszyny wirtualnej:
    cd /vmfs/volumes/<Datastore_Name>/<VM_Folder_Name>/
    ls -la *.vmdk
    
  2. Wydrukuj CID, parentCID, i parentFileNameHint we wszystkich deskryptorach tekstowych .vmdk pliki na raz: (Ważne: tylko uruchamiaj cat lub grep na małym 500-bajtowym deskryptorze tekstowym .vmdk pliki, a nie wielogigabajtowe -flat.vmdk lub -sesparse.vmdk pliki).
    grep -E "CID|parentFileNameHint|Extent description" -A 2 Server.vmdk Server-00000*.vmdk
    
  3. Porównaj CID każdego z rodziców przeciwko parentCID jego najbliższego dziecka: Spójrz na dane wyjściowe:
    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"
    
  4. ** Napraw zepsute parentCID w deskryptorze potomnym i sprawdź za pomocą vmkfstools -e:**
  5. Najpierw utwórz kopię zapasową plików deskryptorów tekstowych (cp Server-000001.vmdk Server-000001.vmdk.bak).
  6. Otwórz Server-000001.vmdk w vi i zmienić parentCID=55443322 do parentCID=1a2b3c4d (dopasowanie Server.vmdkaktualny CID).
  7. Przetestuj integralność łańcucha na podstawie najnowszego (o najwyższym numerze) migawki za pomocą vmkfstools -e:
    vmkfstools -e Server-000002.vmdk
    
  8. Jeśli łańcuch jest nienaruszony, ESXi generuje: Disk chain is consistent.
  9. NIENISZCZĄCA KONSOLIDACJA (vmkfstools -i Klon nie na miejscu):
  10. Jeśli Server.vmdk został nieco zmodyfikowany, zanim naprawiłeś błąd parentCID, nie konsoliduj na miejscu na jedynej kopii. Zamiast tego wskaż vmkfstools -i na najnowszym zdjęciu liścia (Server-000002.vmdk) i sklonuj cały łańcuch do zupełnie nowego, spłaszczonego pliku VMDK w magazynie danych z wolnym miejscem:
    vmkfstools -i Server-000002.vmdk /vmfs/volumes/<Target_Datastore>/Server_Rescue/Server_Merged.vmdk -d thin
    
  11. vmkfstools -i czyta każdy blok z Server-000002.vmdk w dół Server-000001.vmdk i Server-flat.vmdk w ścisłym trybie tylko do odczytu i zapisuje czysty plik bez migawki Server_Merged.vmdk bez dotykania oryginalnych plików.

Scenariusz 1B: Odtworzenie brakującego lub usuniętego 500 bajtów .vmdk deskryptor tekstowy kiedy Server-flat.vmdk jest nadal nienaruszony

Czasami administrator lub uszkodzony skrypt usuwa Server.vmdk (lub zostanie uszkodzony 0 bytes), powodując, że przeglądarka Datastore przestanie pokazywać dysk wirtualny, mimo że ogromny 500-gigabajtowy Server-flat.vmdk plik zawierający 100 procent rzeczywistych danych nadal znajduje się w SSH (ls -la *-flat.vmdk).

Możesz odtworzyć brakujący zwykły tekst Server.vmdk deskryptora w 60 sekund bez utraty ani jednego bajtu danych 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)

Scenariusz 1C: Odblokowanie a .vmdk zablokowane przez zawieszony host ESXi lub uszkodzony serwer proxy kopii zapasowych (Cannot open the disk: Failed to lock the file)

Jeśli maszyna wirtualna odmawia włączenia za pomocą Failed to lock the file lub Cannot open disk: Resource busy, inny host ESXi w klastrze (lub urządzenie Veeam/backup HotAdd, które uległo awarii podczas tworzenia kopii zapasowej) nadal utrzymuje włączoną blokadę pliku SCSI/VMFS -flat.vmdk lub -sesparse.vmdk: 1. Sprawdź, czy na uszkodzonej kopii zapasowej maszyny wirtualnej proxy nadal znajdują się Twoje produkcyjne maszyny wirtualne .vmdk podłączony do wirtualnego kontrolera SCSI: Edytuj ustawienia maszyn wirtualnych proxy Veeam/CommVault i usuń wszelkie podłączone nieaktualne dyski produkcyjne (wybierz „Usuń z maszyny wirtualnej”, NIGDY „Usuwaj pliki z magazynu danych”). 2. Sprawdź, który adres MAC hosta ESXi i proces światowy przechowują blokadę VMFS:

vmfsfilelockinfo -p /vmfs/volumes/<Datastore>/<VM_Folder>/Server-flat.vmdk
SSH do konkretnego hosta ESXi trzymającego blokadę, znajdź zawieszony vmx światowy identyfikator (esxcli vm process list) i zakończyć zawieszony świat (esxcli vm process kill --type=force --world-id=<WorldID>).

Ścieżka 2: Ratowanie Microsoft Hyper-V .vhdx i .avhdx łańcuchy migawek

W Microsoft Hyper-V każdy punkt kontrolny (migawka) tworzy odrębny wirtualny dysk twardy z rozszerzeniem .avhdx (lub .avhd w starszym formacie VHD) przypisano długą nazwę pliku GUID, np ProdSQL_A1B2C3D4-E5F6-7890-ABCD-1234567890AB.avhdx.

Krok 1: Zamapuj dokładnie chronologicznie .avhdx drzewo nadrzędne-podrzędne w PowerShell

Przed połączeniem lub ponownym połączeniem czegokolwiek w Menedżerze Hyper-V otwórz okno Elevated Administrator PowerShell na hoście Hyper-V, przejdź do folderu zawierającego Twoje .vhdx i .avhdx pliki i uruchom tę jednowierszową instrukcję, aby wyświetlić dokładny łańcuch rodzic-dziecko od najnowszego do najstarszego:

# 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

Spójrz na Path i ParentPath pola. Ujawnią dokładną kolejność łańcucha: - ProdSQL.vhdx -> ParentPath: (blank) (Dysk główny, najstarszy) - ProdSQL_1111.avhdx -> ParentPath: D:\VMs\ProdSQL.vhdx (Dziecko 1) - ProdSQL_2222.avhdx -> ParentPath: D:\VMs\ProdSQL_1111.avhdx (Dziecko 2) - ProdSQL_3333.avhdx -> ParentPath: D:\VMs\ProdSQL_2222.avhdx (Najnowszy dysk aktywnego liścia)

Krok 2: Naprawianie "The chain of virtual hard disks is broken" lub "Differencing disk parent ID mismatch" (Set-VHD -IgnoreIdMismatch)

Co się stanie, jeśli ktoś przeniesie folder VM z C:\VMs\ do E:\VMs\lub przypadkowo uruchomiony ProdSQL.vhdx przez 5 sekund, powodując ProdSQL_1111.avhdx nie udać się z: The chain of virtual hard disks is broken. The system cannot locate the parent virtual hard disk for the differencing disk lub There is a mismatch in the virtual disk identifiers?

Użyj oficjalnego polecenia cmdlet Hyper-V PowerShell Set-VHD z -IgnoreIdMismatch flaga (po uprzednim wykonaniu kopii zapasowej plików):

# 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

Krok 3: Ręczne łączenie osieroconych .avhdx łańcuch od najnowszego do najstarszego (Merge-VHD)

Kiedy agent rezerwowy zostawia 15 sierot .avhdx pliki w folderze, które nie pojawiają się już w drzewie „Punktów kontrolnych” interfejsu GUI Menedżera funkcji Hyper-V, musisz scalić je ręcznie w programie PowerShell, gdy maszyna wirtualna jest wyłączona.

Danger

Żelazna zasada Hyper-V .avhdx Łączenie: ZAWSZE musisz połączyć się z NAJNOWSZEGO (najmłodszego liścia) .avhdx do swojego bezpośredniego rodzica, postępując krok po kroku w górę łańcucha, aż do samej podstawy .vhdx pozostaje. Na przykład w łańcuchu Base.vhdx <- Child1.avhdx <- Child2.avhdx <- Child3_Newest.avhdx: 1. Połącz Child3_Newest.avhdx -> w Child2.avhdx. 2. Połącz Child2.avhdx -> w Child1.avhdx. 3. Połącz Child1.avhdx -> w Base.vhdx. 4. Wskaż ustawienia maszyny wirtualnej na Base.vhdx i rozruch.

Uruchom dokładnie te polecenia PowerShell na kopii roboczej folderu:

# 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"

Ścieżka 3: Ratowanie Proxmox VE / QEMU / KVM .qcow2 i VirtualBox .vdi łańcuchy

1. Sprawdzanie i naprawianie uszkodzonych tabel klastrów i przeliczeń QCOW2 L1/L2 (qemu-img check)

Kiedy host Linux KVM lub Proxmox ulegnie nagłej przerwie w zasilaniu bez pamięci podręcznej podtrzymywanej bateryjnie, a .qcow2 dysk wirtualny często nie uruchamia się qcow2: Marking image as corrupt: L2 table offset unaligned lub Refcount block corrupted. 1. ** Najpierw skopiuj plik .qcow2 plik (cp vm-100-disk-0.qcow2 vm-100-disk-0.qcow2.bak).** 2. Przeprowadź audyt łańcucha kopii zapasowych i wewnętrznej listy migawek:

qemu-img info --backing-chain vm-100-disk-0.qcow2
qemu-img snapshot -l vm-100-disk-0.qcow2
3. Napraw klastry, które wyciekły i uszkodzone tabele przeliczeń w kopii roboczej:
qemu-img check -r all vm-100-disk-0.qcow2

2. Naprawianie uszkodzonej ścieżki pliku kopii zapasowej QCOW2 (qemu-img rebase -u)

Jeśli zewnętrzna migawka QCOW2 (overlay.qcow2) nie otwiera się, ponieważ nadrzędny plik kopii zapasowej (base.qcow2) został przeniesiony do nowego katalogu lub puli pamięci, zaktualizuj wskaźnik pliku kopii zapasowej w unsafe (-u, tylko nagłówek) bez przepisywania bloków danych:

qemu-img rebase -u -b /new/path/to/base.qcow2 -F qcow2 overlay.qcow2

3. Spłaszczenie delikatnego łańcucha QCOW2, VMDK lub VHDX w zupełnie nowy, samodzielny obraz (qemu-img convert)

Jednym z najbardziej wszechstronnych narzędzi do ratowania maszyn wirtualnych jest qemu-img convert (co natywnie brzmi .qcow2, .vmdk, .vhdx, .vhd, i .vdi). Kiedy wskazujesz qemu-img convert przy najnowszej migawce liścia prawidłowego łańcucha odczytuje całą hierarchię rodzic-dziecko w ścisłym trybie tylko do odczytu i zapisuje zupełnie nowy, samodzielny dysk wirtualny wolny od migawek w pamięci ratunkowej:

# 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

Ścieżka 4: Odzyskiwanie plików poza pasmem (wyodrębnianie plików, gdy maszyna wirtualna nadal nie uruchamia się)

Co się stanie, jeśli nie można uruchomić systemu operacyjnego gościa znajdującego się na dysku wirtualnym lub środkowa migawka w łańcuchu jest częściowo uszkodzona i trzeba wyciągnąć bazy danych SQL (.mdf/.ldf), pliki QuickBooks, /var/lib/mysqllub dokumenty firmowe w ciągu najbliższych 30 minut?

Nie musisz uruchamiać maszyny wirtualnej, aby wyodrębnić pliki z jej wirtualnego dysku twardego. Skorzystaj z jednego z trzech nieniszczących narzędzi do montażu poza pasmem:

Metoda 1: Zamontuj dowolny .vmdk, .vhdx, .qcow2lub .vdi w trybie tylko do odczytu w systemie Linux przy użyciu libguestfs (guestmount / qemu-nbd)

Zainstaluj libguestfs-tools (sudo apt install libguestfs-tools qemu-utils na Ubuntu/Debian/Proxmox) i zamontuj najnowszą migawkę liścia w ścisłym trybie tylko do odczytu (--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

Metoda 2: Natychmiastowa ekstrakcja tylko do odczytu w systemie Windows przy użyciu 7-Zip lub Disk Management -> Attach VHD (Read-Only)

  • ** Używanie 7-Zip (działa na .vmdk, .vhdx, .vhd, .qcow2, i .vdi):** Kliknij prawym przyciskiem myszy samodzielny lub spłaszczony .vmdk, .vhdxlub .qcow2 plik w systemie Windows i wybierz 7-Zip -> Otwórz archiwum. 7-Zip natywnie analizuje tablice partycji GPT/MBR i systemy plików NTFS/ext4 na dyskach wirtualnych w trybie 100% tylko do odczytu, umożliwiając przeciąganie i upuszczanie folderów gości bezpośrednio na pulpit w ciągu kilku sekund.
  • ** Korzystanie z funkcji Zarządzanie dyskami w systemie Windows (np .vhdx / .avhdx):** Otwarte diskmgmt.msc -> Akcja -> Dołącz VHD -> Przejdź do najnowszego liścia .avhdx (lub .vhdx), ZAZNACZ POLE [X] Read-only (KRYTYCZNE: Nigdy nie zapomnij zaznaczyć opcji Tylko do odczytu, w przeciwnym razie system Windows zmodyfikuje nagłówek dysku) i kliknij OK. Dyski C: i D: Twojej maszyny wirtualnej natychmiast pojawią się w Eksploratorze plików systemu Windows.

Metoda 3: Rekonstrukcja poważnie uszkodzonych łańcuchów za pomocą UFS Explorer Professional Recovery

Jeśli dysk nadrzędny w łańcuchu VMDK lub VHDX został przypadkowo uruchomiony i zmodyfikowany lub jeśli uszkodzenie magazynu danych VMFS/NTFS spowodowało zniszczenie części -sesparse.vmdk lub .avhdx plik, aby narzędzia hypervisora go odrzuciły, UFS Explorer Professional Recovery (lub R-Studio Technician) umożliwia ręczne złożenie surowego dysku podstawowego i każdego podrzędnego obrazu delta w niestandardowy Virtual Delta Stack w programowej pamięci RAM, z pominięciem hypervisora CID/GUID sprawdza nagłówki, aby wyrzeźbić i wyodrębnić nienaruszone pliki gościa.

Ścieżka 5: Odzyskiwanie osieroconego pliku konfiguracyjnego maszyny wirtualnej (.vmx, .xmllub <vmid>.conf)

Czasami sam łańcuch wirtualnych dysków twardych (*.vmdk, *.vhdxlub *.qcow2) jest w 100% nienaruszony w macierzy pamięci masowej, ale mały plik konfiguracyjny, który definiuje układ sprzętowy maszyny wirtualnej (.vmx w VMware ESXi, <GUID>.vmcx / .xml w Hyper-V lub /etc/pve/qemu-server/<vmid>.conf w Proxmox VE) jest uszkodzony, przypadkowo usunięty lub wyzerowany podczas awarii hosta.

Jeśli odtworzysz zastępczą powłokę maszyny wirtualnej z niewłaściwym kontrolerem pamięci wirtualnej lub trybem oprogramowania układowego, system operacyjny gościa natychmiast ulegnie awarii podczas rozruchu z INACCESSIBLE_BOOT_DEVICE (Windows) lub przejdź do pliku dracut / initramfs powłoka awaryjna (Linux). Przed podłączeniem uratowanego dysku wirtualnego dopasuj te cztery ustawienia sprzętowe do oryginalnej konfiguracji gościa:

Ustawienie sprzętu wirtualnego Objaw w przypadku nieprawidłowego ustawienia na zastępczej maszynie wirtualnej Jak określić prawidłowe ustawienie bez starego .vmx / .vmcx
1. Tryb uruchamiania oprogramowania sprzętowego (UEFI / OVMF vs Legacy BIOS / SeaBIOS) Wyświetla maszynę wirtualną "Operating System Not Found" lub spada bezpośrednio do powłoki interaktywnej UEFI (Shell>). Sprawdź tablicę partycji dysku wirtualnego (fdisk -l lub virt-filesystems -a disk.vmdk --partitions --long). Jeśli dysk ma 100 MB do 512 MB partycji systemowej FAT32 EFI (ESP) i korzysta z tablicy partycji GPT, MUSISZ ustawić oprogramowanie sprzętowe maszyny wirtualnej na UEFI. Jeśli dysk korzysta z tablicy partycji MBR (dos) bez partycji EFI, ustaw oprogramowanie sprzętowe na Starszy BIOS.
2. Typ kontrolera pamięci wirtualnej (VMware Paravirtual SCSI - PVSCSI vs LSI Logic SAS vs NVMe vs VirtIO SCSI) Windows wyrzuca 0x0000007B / INACCESSIBLE_BOOT_DEVICE Niebieski ekran; Linux wpada do initramfs: /dev/mapper/root does not exist. W VMware ESXi sprawdź zwykły tekst .vmdk plik deskryptora linii ddb.adapterType = "lsilogic" lub "buslogic" lub sprawdź vmware.log w folderze VM (grep -i "scsi0.virtualDev" vmware.log), który drukuje dokładną wartość historyczną .vmx słownik z ostatniego pomyślnego rozruchu.
3. Adres MAC i sterownik wirtualnej karty sieciowej (VMXNET3 vs E1000e vs VirtIO-Net) System operacyjny gościa uruchamia się, ale traci statyczny adres IP lub blokadę licencji, ponieważ wykryje „nową” kartę sieciową (eth1 zamiast eth0). Szukaj starego vmware.log w katalogu magazynu danych maszyny wirtualnej (grep -i "ethernet0.generatedAddress" vmware.log), aby odzyskać dokładny 6-bajtowy adres MAC (00:50:56:xx:xx:xx) i wklej go do ustawień sieciowych zamiennej maszyny wirtualnej.
4. Wirtualny moduł TPM 2.0 (vTPM) i funkcja BitLocker / stan LUKS Funkcja Windows BitLocker monituje podczas uruchamiania o 48-cyfrowy klucz odzyskiwania, jeśli .nvram / vTPM brakuje stanu. W VMware ESXi zawsze zachowuj <VM_Name>.nvram i .vmsd pliki obok .vmdk pliki; w Hyper-V zachowaj plik Virtual Machines\<GUID>.vmgs (Stan gościa), aby wirtualne klucze TPM pozostały połączone.

Często zadawane pytania

Co się stanie, jeśli po prostu wskażę moją maszynę wirtualną z powrotem do oryginalnej bazy? `.vmdk` lub `.vhdx` plik i uruchom go, aby zobaczyć, co jest w środku?

NIGDY nie rób tego bez uprzedniego utworzenia kopii zapasowej plików i NIGDY nie uruchamiaj dysku podstawowego w trybie odczytu i zapisu podczas wykonywania migawek (`-000001.vmdk` lub `.avhdx`) istnieje. Po pierwsze, dysk podstawowy został zamrożony dokładnie w dniu i minucie utworzenia pierwszej migawki. Jeśli migawka działała przez 6 miesięcy, uruchomienie dysku podstawowego powoduje uruchomienie serwera w stanie, w jakim istniał 6 miesięcy temu, z pominięciem każdego pojedynczego pliku utworzonego w ciągu ostatniego półrocza. Po drugie, i znacznie gorzej, w chwili, gdy system operacyjny gościa uruchamia się z dysku podstawowego, zapisuje dzienniki rozruchu i dzienniki zmian na dysku podstawowym, modyfikując jego sektory i zmieniając jego identyfikator treści (`CID`) lub identyfikator GUID połączenia. To trwale psuje mapę bloków delta potrzebną dla wszystkich migawek podrzędnych.

Dlaczego mój magazyn danych VMware ESXi wyświetla komunikat `Server-000001.vmdk` ponieważ ma taki sam pełny rozmiar 500 GB jak `Server.vmdk` w przeglądarce internetowej?

Jest to dziwactwo związane z wyświetlaniem przeglądarki Datastore Browser VMware ESXi Web Client. W interfejsie przeglądarki internetowej ESXi ukrywa podstawowe elementy `-flat.vmdk`, `-delta.vmdk`, i `-sesparse.vmdk` binarnych i wyświetla *zapewnioną pojemność logiczną* dysku, a nie faktyczną przestrzeń fizyczną zajmowaną przez plik delta. Aby zobaczyć prawdziwe fizyczne nazwy plików, dokładne rozmiary bajtów i pliki deskryptorów tekstowych, włącz SSH na hoście ESXi, zaloguj się przez Terminal/PuTTY, przejdź do `/vmfs/volumes///`i biegnij `ls -lh *.vmdk`.

Jak mogę skonsolidować migawki VMware lub Hyper-V, gdy magazyn danych hosta jest zapełniony w 100% (wolne 0 bajtów)?

Gdy w magazynie danych będzie wolnych 0 bajtów, zwykłe lokalne polecenie „Usuń wszystkie migawki/konsoliduj” kończy się niepowodzeniem, ponieważ połączenie migawki 2 z migawką 1 tymczasowo zwiększa rozmiar migawki 1, zanim będzie można usunąć migawkę 2. Masz trzy bezpieczne wyjścia: (1) Znajdź i usuń lub przenieś *inne* nieważne pliki ISO, stare pliki dziennika lub wyłączone testowe maszyny wirtualne w tym samym magazynie danych, aby zwolnić 15-20% zapasu; (2) Jeśli macierzą pamięci masowej jest macierz SAN/NAS (iSCSI/NFS/FC), powiększ jednostkę LUN i zwiększ wolumen VMFS/NTFS online o 100 GB; lub (3) Podłącz zewnętrzny dysk USB lub udział NFS do hosta i używaj `vmkfstools -i Server-000002.vmdk /vmfs/volumes/New_NFS_Share/Merged.vmdk` (lub `qemu-img convert` / `Merge-VHD` na inną literę dysku), aby skonsolidować łańcuch *nie na miejscu* na drugim woluminie pamięci, wykorzystując zero bajtów miejsca do zapisu w pełnym magazynie danych.

Jak zapobiec pozostawianiu przez oprogramowanie do tworzenia kopii zapasowych, takie jak Veeam, CommVault czy Nakivo, ukrytych „osieroconych migawek”, które zapełniają mój serwer kilka miesięcy później?

Aplikacje do tworzenia kopii zapasowych tworzą tymczasową migawkę hypervisora ​​na początku każdego zadania nocnej kopii zapasowej, aby móc odczytać zamrożony dysk podstawowy, a następnie instruują ESXi lub Hyper-V, aby usunęły/skonsolidowały tę migawkę po zakończeniu tworzenia kopii zapasowej. Czasami przekroczenie limitu czasu przechowywania powoduje, że krok usuwania migawki kończy się niepowodzeniem w trybie cichym, pozostawiając plik ukryty `-000001.vmdk` lub `.avhdx` rośnie miesiącami, aż osiągnie 100 procent magazynu danych. Skonfiguruj dwa automatyczne zabezpieczenia: (1) Włącz wbudowany alarm vCenter / Hyper-V / Proxmox dla `"Virtual Machine Snapshot Size > 20 GB or Age > 72 Hours"`oraz (2) Zaplanuj cotygodniowy audyt PowerCLI lub PowerShell w trybie tylko do odczytu (`Get-VM | Get-Snapshot` lub `Get-ChildItem -Recurse -Filter *.avhdx`), który wysyła e-mail do zespołu administratorów, gdy w pamięci produkcyjnej znajduje się plik migawki starszy niż 3 dni.

Sprawdzono źródła

  • Baza wiedzy technicznej VMware firmy Broadcom: KB 1007969/316578 (rozwiązywanie błędów związanych z niezgodnością identyfikatora CID „Nadrzędny dysk wirtualny został zmodyfikowany od czasu utworzenia dziecka”), KB 1002511 (Odtwarzanie brakującego deskryptora dysku maszyny wirtualnej .vmdk File) i KB 10051 (Opis migawek maszyn wirtualnych w ESXi).
  • Dokumentacja inżynieryjna Microsoft Learn/Windows Server Hyper-V: Dokumentacja programu Hyper-V PowerShell dla Get-VHD, Set-VHD -IgnoreIdMismatch, i Merge-VHD Konsolidacja dysków różnicowych offline.
  • Dokumentacja projektu QEMU i wirtualizacji Red Hat Enterprise Linux: Oficjalna qemu-img Instrukcja (info --backing-chain, check -r all, rebase -u, convert) i libguestfs (guestmount --ro) Kontrola dysku wirtualnego tylko do odczytu.
  • Dokumentacja techniczna Oracle VirtualBox: VBoxManage showmediuminfo i clonemedium Różnicowanie architektury obrazu.
  • Narodowy Instytut Standardów i Technologii (NIST, Stany Zjednoczone): Publikacja specjalna NIST 800-86: Przewodnik po integracji technik kryminalistycznych z reagowaniem na incydenty (ochrona obrazu maszyny wirtualnej).

Powiązane przewodniki