Von Hyper-V zu VMware und umgekehrt: Konvertieren virtueller Festplatten



Hallo habr

Von Zeit zu Zeit höre ich von erfahrenen Ingenieuren etwas Merkwürdiges: VMDK, VHD und VHDX sind völlig unterschiedliche virtuelle Festplattenformate, fast geschlossen, und das Konvertieren von einer in eine andere ist ein langer und schmerzhafter Prozess. Heute werde ich zeigen, dass dies nicht der Fall ist. Ich werde herausfinden, wie diese Formate zueinander in Beziehung stehen und wie eine schnelle Konvertierung bei der Migration von Hyper-V zu VMware und umgekehrt durchgeführt wird.

Ein bisschen Theorie. Aus Sicht der Eigenschaften werden virtuelle Laufwerke in zwei Typen unterteilt:

  • dünne (dynamische Platte) und
  • dick (Festplatte). Alles andere - Unterschied, dickes Provisioned Lazy-Zeroed - nur Variationen zum Thema.

Ich werde nicht im Detail darauf eingehen. Ich kann nur sagen, dass wir weiter über dicke Festplatten sprechen werden.

Disc-Formate


RAW - "rohes" Image eines Laufwerks. Hierbei handelt es sich um einen regulären Container, der keine bestimmten Kopf- und Fußzeilen enthält und das Datenträgerabbild so darstellt, wie es ist. Wenn wir ein solches Bild mit einem HEX-Editor öffnen, sehen wir sofort die Überschriften des GPT / MBR und / oder des Dateisystems. Das gleiche Image erhalten Sie mit dem Befehl dd unter Linux. RAW ist diesbezüglich absolut ehrlich zu uns.


Der Anfang der RAW-Datei.


Ende der RAW-Datei.

VMDC. VMware ESXi ist eine gewöhnliche RAW, bei der die Festplattengeometrie in einem regulären Textdateideskriptor (Deskriptor) beschrieben wird. Dieser Name wird in vSphere Console angezeigt, wenn wir eine virtuelle Festplatte mit einer virtuellen Maschine verbinden oder den Inhalt eines Verzeichnisses im Datenspeicher durchsuchen. VMware ESXi macht nichts mit dem Image. Absolut. Die Festplatte ruht auf sich selbst und wird bei Bedarf erweitert. In der besten VMware-Tradition ist das Deskriptorformat sehr einfach:

# Disk DescriptorFile version=1 encoding="UTF-8" CID=fffffffe parentCID=ffffffff isNativeSnapshot="no" createType="vmfs"  # Extent description RW 15122560 VMFS "disk-example-flat.vmdk"  # The Disk Data Base #DDB ddb.adapterType = "lsilogic" ddb.geometry.cylinders = "941" ddb.geometry.heads = "255" ddb.geometry.sectors = "63" ddb.longContentID = "4f5dc83d0a5270bee54e2d85fffffffe" ddb.uuid = "60 00 C2 93 b4 38 ed dd-a3 85 88 48 68 40 2f c0" ddb.virtualHWVersion = "13" 

Und es ist nicht nur einfach, sondern auch funktional: Es reicht aus, Notizen in der Deskriptordatei zu machen, um die virtuelle Festplatte auf alle unterstützten Werte zu erweitern. Auf diese Weise können Sie Datenträger mit Nullen füllen oder dünn markieren, ohne Geometrieinformationen in den Datenträgerköpfen zu speichern.

Nachfolgend sind einige Standardwerte für alle Abschnitte des Deskriptors aufgeführt:

Abschnitt
Parameter
Beschreibung
Wert
Header (# Disk DescriptorFile)
version
Gibt die Versionsnummer des Deskriptors an. Normalerweise ändert sich nichts.
1 (Standard)
Cid
Inhalts-ID Eine zufällige 32-Bit-Festplattenkennung, die beim Erstellen eines Snapshot-Baums beteiligt ist. Ist die ParentCID für untergeordnete Delta-Festplatten.
Ein zufälliger 32-Bit-Wert, der zum Zeitpunkt der Erstellung generiert wurde.
parentCID
CID des übergeordneten Laufwerks. Wenn keine übergeordnete Festplatte vorhanden ist, wird das Flag CID_NOPARENT (ffffffff) gesetzt.
Ffffffff (CID_NOPARENT)
CID des übergeordneten Laufwerks.
createType
Zeiger auf den im Deskriptor beschriebenen Festplattentyp (es kann sich durchaus um eine physische Festplatte, Differenzfestplatten und sogar um ein Array von VMDK-Festplatten handeln). Für ESXi sind die Eigenschaften begrenzt.
Für ESXi vmfs (im Fall einer virtuellen Festplatte) oder vmfsRawDeviceMap und vmfsPassthroughRawDeviceMap (im Fall von RDM).
isNativeSnapshot
Markiert, mit welchen Mitteln der Snapshot erstellt wird: VMkernel oder Mittel zum Speichern (VAAI).
nein (VMkernel),
ja (VAAI)
Umfang (# Umfang Beschreibung)

Der Abschnitt enthält den Pfad zur Festplatte, die Art des Zugriffs und die Größe. Im Format:
<Zugriffstyp> <Größe> <Bereichstyp> <Pfad zur VMDK-Datei oder zum Gerät> <Versatz>.

Zugang
Art des Festplattenzugriffs.
RW (lesen / schreiben)
RO (schreibgeschützt)
NOACCESS (Zugriff verweigert).
Größe
Festplattengröße
Die Anzahl der logischen Sektoren einer virtuellen Festplatte wird angezeigt. Es wird nach der Formel berechnet:
<Größe in Bytes> / <Größe des logischen Sektors>
Weitere Informationen zum Berechnen der Scheibengeometrie finden Sie hier .
Art des Umfangs
Zeiger auf Festplattenmodus.
Kann an Wert gewinnen
FLAT, SPARSE, ZERO, VMFS, VMFSSPARSE, VMFSRDM, VMFSRAW.
Dateiname
Der Pfad zur VMDK-Datei.

Offset
Es wird verwendet, wenn Sie den Start-Offset der Daten des Gastbetriebssystems angeben müssen. Bei virtuellen Laufwerken ist dies normalerweise 0 (oder nicht angegeben). Für RDM kann ungleich Null sein.
Der Offset in Bytes relativ zum Beginn der Platte vor dem Beginn des Datenblocks.
Festplattendatenbank (# Die Festplattendatenbank)

Beschreibt die Geometrie einer virtuellen Festplatte.

ddb.adapterType
Typ des virtuellen VM-SCSI-Adapters.
Es werden nur 3 Typen unterstützt:
ide
Buslogik
lsilogisch.

Darüber hinaus ist der VMware Paravirtual-Adapter immer als lsilogic gekennzeichnet.
ddb.geometry.cylinders
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
Die Anzahl der Zylinder, Köpfe und Sektoren zur Beschreibung der Geometrie einer virtuellen Festplatte.
Details zur Berechnung der Scheibengeometrie finden Sie hier .
ddb.thinProvisioned
Thin-Disk-Flag.
1 - die Scheibe ist dünn,
0 oder nicht vorhanden - dicke Scheibe
ddb.uuid
Deskriptor-ID

ddb.virtualHWVersion
Version der virtuellen Hardware


Eine Beschreibung aller Werte finden Sie in der Formatspezifikation: VMware Virtual Disk Format 1.1

Vhd. Thick VHD ist das gleiche RAW, jedoch mit einer 512-Byte-Fußzeile, die die Geometrie der Festplatte beschreibt. Die virtuelle Microsoft Hyper-V-Maschine verfügt nicht über eine separate Deskriptordatei. Die Beschreibung der Plattengeometrie dauert 4 Byte. Eigentlich ab hier die Begrenzung der Festplattengröße auf 2 TB.


Fußzeile. Die letzten 512 Bytes der Festplatte.

Das Interessanteste ist, dass der VMware-Hypervisor diese Fußzeile ignoriert und VHD als systemeigene akzeptiert, wenn Sie eine Deskriptordatei erstellen und eine VHD-Festplatte mit einer Fußzeile in das ESXi einlegen.

Wenn Storage vMotion eine Festplatte in Thin konvertiert, schneidet es diese Fußzeile einfach ab, und am Ende erhalten wir dieselbe RAW ohne Nullen. Und beim Konvertieren auf eine dicke Festplatte - ehrliches RAW. Dies werde ich etwas später demonstrieren.

VHDX. Alle Informationen zur Festplattengeometrie werden in den ersten 4096 KB der virtuellen Festplatte gespeichert - im Header-Bereich.


Das allgemeine Schema der VHDX-Festplatte.

Wie ist diese Gegend? Es enthält zwei Kopien der Header mit ihren Protokollen, wobei der BAT- und der Metadatenbereich gemeinsam sind.


Die logische Struktur des Plattenheaders.

In einer Zeiteinheit ist nur eine Kopie des Headers aktiv. Dies bietet ein gewisses Maß an Header-Fehlertoleranz bei ungeplanten Unterbrechungen von Lese- / Schreibvorgängen. Nach jeder E / A-Operation wird die Kopie repliziert und ein Wechsel zu ihr vorgenommen.


Layout des Kopfbereichs.

Um VHDX in RAW zu konvertieren, müssen nur die ersten 4096 KB abgeschnitten werden.


Startdaten bei 5 MB.

Ein aufmerksamer Leser wird natürlich sagen: OK, Zhenya, aber RAW zu VHDX schwach konvertieren? Worauf ich antworten werde: Es hängt vom Dateisystem ab und davon, wie viel es Ihnen ermöglicht, Daten an den Anfang der Datei zu schreiben. Manuell auf dem NTFS-Dateisystem kann dies durchgeführt werden, indem der Anfang der Datei in der MFT um 4 MB nach vorne verschoben und der Header an diese Stelle angehängt wird.

Das Dienstprogramm vhdxtool.exe funktioniert nach demselben Prinzip . Bei dieser Konvertierung erhalten wir jedoch kein schönes Bild in Form eines 4-MB-Headers und RAW. Die Festplatte wird sichtbar sein und sogar korrekt als VHDX funktionieren, aber es wird auch eine Menge "Müll" von Nullen geben, die aufgrund von Manipulationen mit Offsets aufgetreten sind. Das Laufwerk wird nicht optimiert. Es wird empfohlen, VMs mit einer solchen Festplatte auf ein anderes Volume zu migrieren oder mit den Cmdlets Convert-VHD oder Optimize-VHD zu optimieren. Andernfalls nimmt der Datenträger mehr Speicherplatz ein als er sollte und arbeitet möglicherweise langsamer.

In Migrationsszenarien von VMware nach Hyper-V ist dieses Dienstprogramm jedoch unverzichtbar, da es eine direkte Konvertierung ermöglicht, ohne dass ein Byte zum Lesen des Quelldatenträgers und zum Erstellen einer Kopie in der Nähe erforderlich ist. Alle Unebenheiten werden bei der ersten Storage Live-Migration ausgeglichen.

Fazit: Thick Disks der Formate VMDK, VHD, VHDX unterscheiden sich eigentlich nicht wesentlich voneinander. Sie basieren auf RAW mit verschiedenen Additiven. Mit demselben HEX-Editor oder denselben Betriebssystemfunktionen für die Arbeit mit dem Dateisystem können wir 10 TB VMDK oder VHDX in wenigen Sekunden in die Zielhypervisor-Festplatte umwandeln.

Schauen wir uns an, wie VMware Exsi mit VHD umgeht.

  1. Als Beispiel habe ich mit Convert-WindowsImage ein Windows Server-Image mit einer Injektion von VMware-Treibern und -Parametern erstellt:

    • Betriebssystemversion: Windows Server 2019 Standard,
    • Festplattentyp: Fixed,
    • Festplattenlayout: GPT,
    • Festplattengröße: 30 GB.


    Beachten Sie die Parameter FileSize (tatsächliche Dateigröße) und Size (Festplattengröße in Bezug auf VM). Die Differenz zwischen den Werten beträgt genau 512 Bytes - die Größe der Footer-VHD.
  2. Benennen Sie das Laufwerk in Win2019-test2-flat.vmdk um, um es in den ESXi-Datenspeicher zu laden.
  3. Als Nächstes erstelle ich in VMware ESXi eine leere VM mit einer Thick-Festplatte (Eager Zeroed), sodass der VMDK-Deskriptor automatisch erstellt wird und die Zylinder nicht manuell berechnet werden müssen.

  4. Wir verbinden uns über WinSCP mit dem Host und ersetzen die vorhandene Datei:

    Alles ist fair: Die Fußzeile ist vorhanden.
  5. Schalten Sie die VM ein und stellen Sie sicher, dass das Betriebssystem ohne Probleme startet. Es bleibt nur die einfache Installation der VMware Tools, da wir mit Convert-WindowsImage Gerätetreiber installieren können.

  6. Verschieben Sie die Festplatte über Storage vMotion in einen anderen Datenspeicher und konvertieren Sie sie in eine dünne Festplatte.

  7. Überprüfen Sie die Größe - die Festplatte ist dünn geworden.

  8. Wenn wir wieder auf eine dicke Festplatte konvertieren oder die VM in den Dateispeicher migrieren, erhalten wir die reinste RAW ohne Header.


    Die Fußzeile schnappte.

Der gleiche Fokus gilt für RAWs, die mit dd erstellt wurden. Und auch in die entgegengesetzte Richtung. Auf diese Weise sehen Sie, dass VMware ESXi Fußzeilen oder RAW-Discs von Drittanbietern akzeptiert.

Wenn Sie keine Tricks wollen, können Sie die folgenden Tools verwenden.
Quellformat
Zielformat
Die Werkzeuge
Befehlsbeispiel
Vhd
Vhdx
vhdxtool.exe
vhdxtool upgrade -f <Dateiname> .vhd
VMDK (RAW)
Vhd
vhdtool.exe
vhdtool / convert <Dateiname flach> .vmdk
VMDK (RAW)
Vhdx
vhdtool.exe
vhdxtool.exe
vhdtool / convert <Dateiname flach> .vmdk

VHDX (RAW)
Vhdx
vhdxtool upgrade -f <Dateiname> .vhd

Um es zusammenzufassen. Die verschiedenen Formate von virtuellen Festplatten sind nicht so unterschiedlich. Im Herzen aller RAW mit verschiedenen "Zusatzstoffen".

Das Konvertieren von virtuellen Festplattenformaten ist nicht unheimlich, und wie ich gezeigt habe, können Sie manchmal darauf verzichten.

Der Hauptvorteil davon ist die Verkürzung der Migrationszeit von Hyper-V auf VMware und umgekehrt sowie der VM-Ausfallzeit während der Migration. In DataLine üben wir dies mit VM-Ausfallzeiten von weniger als 30 Minuten. Der Rekord liegt bei 40 Sekunden Ausfallzeit der VM während der Migration zwischen Hypervisoren.

Denken Sie daran, dass bei der Migration zwischen verschiedenen Hypervisoren eine Konvertierung nicht ausreicht. Sie müssen mindestens zuerst die Integrationskomponenten des Zielhypervisors installieren, den Start der Komponenten des Quellhypervisors entfernen oder deaktivieren, die virtuellen Geräte des Quellhypervisors entfernen usw. Aber das ist eine ganz andere Geschichte, von der ich auch erzählen kann.

Nützliche Links:

Source: https://habr.com/ru/post/de479894/


All Articles