De Hyper-V Ă  VMware et vice versa: conversion de disques virtuels



Bonjour, Habr!

De temps en temps, j'entends des ingénieurs pratiquants quelque chose d'étrange: VMDK, VHD et VHDX sont des formats de disques virtuels complÚtement différents, presque fermés, et la conversion de l'un à l'autre est un processus long et douloureux. Aujourd'hui, je vais démontrer que ce n'est pas le cas, je vais comprendre comment ces formats sont liés les uns aux autres et comment effectuer une conversion rapide lors de la migration d'Hyper-V vers VMware et vice versa.

Un peu de théorie. Du point de vue des propriétés, les disques virtuels sont divisés en deux types:

  • mince (disque dynamique) et
  • Ă©pais (disque fixe). Tout le reste - diffĂ©rence, Ă©pais paresseux mis Ă  zĂ©ro paresseux - seulement des variations sur le sujet.

Je ne m'attarderai pas là-dessus en détail. Je peux seulement dire que nous parlerons plus loin des disques épais.

Formats de disque


RAW - image "brute" de n'importe quel lecteur. Il s'agit d'un conteneur standard qui ne contient aucun en-tĂȘte ni pied de page spĂ©cifique et reprĂ©sente l'image disque «telle quelle». Si nous ouvrons une telle image avec un Ă©diteur HEX, nous verrons immĂ©diatement les en-tĂȘtes du GPT / MBR et / ou du systĂšme de fichiers. La mĂȘme image exacte est obtenue via la commande dd sous Linux. RAW Ă  cet Ă©gard est absolument honnĂȘte avec nous.


Le début du fichier RAW.


Fin du fichier RAW.

VMDC. VMware ESXi est un RAW ordinaire, oĂč la gĂ©omĂ©trie du disque est dĂ©crite dans un fichier descripteur de texte normal (descripteur). C'est son nom que nous voyons dans la console vSphere lorsque nous connectons un disque virtuel Ă  une machine virtuelle ou parcourons le contenu d'un rĂ©pertoire sur la banque de donnĂ©es. VMware ESXi ne fait rien avec l'image. Absolument. Le disque repose sur lui-mĂȘme et se dilate selon les besoins. Dans la meilleure tradition VMware, le format des descripteurs est trĂšs simple:

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

Et ce n'est pas seulement simple, mais aussi fonctionnel: il suffit de prendre des notes dans le fichier descripteur pour Ă©tendre le disque virtuel Ă  toutes les valeurs prises en charge. Cela vous permet de remplir des disques avec des zĂ©ros ou de les marquer comme minces, sans avoir Ă  conserver les informations de gĂ©omĂ©trie dans les en-tĂȘtes de disque.

Voici quelques valeurs standard pour toutes les sections du descripteur:

Section
ParamĂštre
La description
Valeur
En-tĂȘte (# Disk DescriptorFile)
version
Spécifie le numéro de version du descripteur. Ne change généralement pas.
1 (par défaut)
Cid
ID de contenu Un identifiant de disque aléatoire de 32 bits impliqué dans la construction d'une arborescence d'instantanés. Est le ParentCID pour les disques delta enfant.
Une valeur aléatoire de 32 bits générée au moment de la création.
parentCID
CID du lecteur parent. S'il n'y a pas de disque parent, l'indicateur CID_NOPARENT (ffffffff) est défini.
Ffffffff (CID_NOPARENT)
CID du lecteur parent.
createType
Pointeur vers le type de disque dĂ©crit dans le descripteur (il peut bien s'agir d'un disque physique, de disques diffĂ©rentiels et mĂȘme d'un tableau de disques VMDK). Pour ESXi, l'ensemble de propriĂ©tĂ©s est limitĂ©.
Pour ESXi, vmfs (dans le cas d'un disque virtuel) ou vmfsRawDeviceMap et vmfsPassthroughRawDeviceMap (dans le cas de RDM).
isNativeSnapshot
Marque par quel moyen l'instantané sera effectué: VMkernel ou moyen de stockage (VAAI).
non (VMkernel),
oui (VAAI)
Étendues (# Description de l'Ă©tendue)

La section contient le chemin d'accĂšs au disque, le type d'accĂšs et la taille. Au format:
<type d'accÚs> <taille> <type d'extension> <chemin d'accÚs au fichier VMDK ou au périphérique> <décalage>.

AccĂšs
Type d'accĂšs au disque.
RW (lecture / Ă©criture)
RO (lecture seule)
NOACCESS (accÚs refusé).
La taille
Taille du disque
Le nombre de secteurs logiques d'un disque virtuel est indiqué. Il est calculé par la formule:
<Taille en octets> / <taille du secteur logique>
En savoir plus sur le calcul de la géométrie du disque ici .
Type d'Ă©tendue
Pointeur en mode disque.
Peut prendre de la valeur
FLAT, SPARSE, ZERO, VMFS, VMFSSPARSE, VMFSRDM, VMFSRAW.
Nom de fichier
Chemin d'accĂšs au fichier VMDK.

DĂ©calage
Il est utilisĂ© si vous devez spĂ©cifier le dĂ©calage de dĂ©marrage des donnĂ©es du systĂšme d'exploitation invitĂ©. Pour les disques virtuels, il s'agit gĂ©nĂ©ralement de 0 (ou non spĂ©cifiĂ©). Pour RDM, la valeur peut ĂȘtre diffĂ©rente de zĂ©ro.
Décalage en octets par rapport au début du disque avant le début du bloc de données.
Base de données de disques (# The Disk Data Base)

Décrit la géométrie d'un disque virtuel.

ddb.adapterType
Type d'adaptateur virtuel VM SCSI.
Seuls 3 types sont pris en charge:
ide
buslogic
lsilogic.

De plus, l'adaptateur VMware Paravirtual est toujours marqué comme lsilogic.
ddb.geometry.cylinders
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
Le nombre de cylindres, de tĂȘtes et de secteurs pour dĂ©crire la gĂ©omĂ©trie d'un disque virtuel.
Les détails sur le calcul de la géométrie du disque sont ici .
ddb.thinProvisioned
Drapeau de disque mince.
1 - le disque est mince,
0 ou absent - disque Ă©pais
ddb.uuid
Identifiant du descripteur

ddb.virtualHWVersion
Version du matériel virtuel


Une description de toutes les valeurs peut ĂȘtre trouvĂ©e dans la spĂ©cification de format: VMware Virtual Disk Format 1.1

Vhd. VHD Ă©pais est le mĂȘme RAW, mais avec un pied de page de 512 octets, qui dĂ©crit la gĂ©omĂ©trie du disque. La machine virtuelle Microsoft Hyper-V n'a pas de fichier descripteur distinct. La description de la gĂ©omĂ©trie du disque prend 4 octets. En fait, d'ici la limitation de la taille du disque de 2 To.


Pied de page. Les 512 derniers octets du disque.

La chose la plus intéressante est que si vous créez un fichier descripteur et glissez un disque VHD avec un pied de page dans l'ESXi, l'hyperviseur VMware ignorera ce pied de page et acceptera le VHD comme natif.

Lorsque Storage vMotion convertit un disque en disque lĂ©ger, il coupe simplement ce pied de page et Ă  la sortie, nous obtenons le mĂȘme RAW sans zĂ©ros Ă  la fin. Et lors de la conversion en un disque Ă©pais - honnĂȘte RAW. C'est ce que je vais dĂ©montrer un peu plus tard.

VHDX. Toutes les informations sur la gĂ©omĂ©trie du disque sont stockĂ©es dans les 4096 premiers kilo-octets du disque virtuel - dans la zone d'en-tĂȘte.


Le schéma général du disque épais VHDX.

À quoi ressemble ce domaine? Il contient deux copies des en-tĂȘtes avec leurs journaux, le BAT et la zone de mĂ©tadonnĂ©es sont communs.


La structure logique de l'en-tĂȘte de disque.

Dans une unitĂ© de temps, une seule copie de l'en-tĂȘte est active. Cela fournit un certain niveau de tolĂ©rance aux pannes d'en-tĂȘte en cas d'interruptions imprĂ©vues des opĂ©rations de lecture / Ă©criture. AprĂšs chaque opĂ©ration d'E / S, la copie est rĂ©pliquĂ©e et un basculement y est effectuĂ©.


Disposition de la zone d'en-tĂȘte.

Pour convertir VHDX en RAW, il suffit de couper les premiers 4096 Ko.


Démarrer les données à 5 Mo.

Un lecteur attentif, bien sĂ»r, dira: ok, Zhenya, mais convertissez-vous RAW en VHDX faiblement? À quoi je rĂ©pondrai: cela dĂ©pend du systĂšme de fichiers et de la quantitĂ© de donnĂ©es qu'il permet d'Ă©crire au dĂ©but du fichier. Manuellement sur le systĂšme de fichiers NTFS, cela peut ĂȘtre fait en dĂ©calant le dĂ©but du fichier de 4 Mo dans la MFT et en ajoutant l'en-tĂȘte Ă  cet endroit.

L'utilitaire vhdxtool.exe fonctionne sur le mĂȘme principe . Cependant, avec cette conversion, nous n'obtiendrons pas une belle image sous la forme d'un en-tĂȘte de 4 Mo et RAW. Le disque sera visible et fonctionnera mĂȘme correctement en tant que VHDX, mais il y aura Ă©galement beaucoup de «dĂ©chets» de zĂ©ros qui sont apparus en raison de manipulations avec dĂ©calages. Le lecteur ne sera pas optimisĂ©. Il est recommandĂ© de migrer les machines virtuelles avec un tel disque vers un autre volume ou d'optimiser via les applets de commande Convert-VHD ou Optimize-VHD. Si cela n'est pas fait, le disque prendra plus d'espace qu'il ne devrait et peut fonctionner plus lentement.

Cependant, dans les scénarios de migration de VMware vers Hyper-V, cet utilitaire est indispensable, car il permet une conversion sur place sans avoir besoin d'un octet pour lire le disque source et créer une copie à proximité. Toute rugosité sera lissée lors de la premiÚre migration Live Storage.

Conclusion: les disques Ă©pais des formats VMDK, VHD, VHDX ne sont en rĂ©alitĂ© pas trĂšs diffĂ©rents les uns des autres. Ils sont basĂ©s sur RAW avec divers additifs. En utilisant le mĂȘme Ă©diteur HEX ou les mĂȘmes fonctions du systĂšme d'exploitation pour travailler avec le systĂšme de fichiers, nous pouvons transformer 10 To VMDK ou VHDX en disque d'hyperviseur cible en quelques secondes.

Voyons comment VMware Exsi gĂšre les disques durs virtuels.

  1. À titre d'exemple, j'ai crĂ©Ă© une image Windows Server Ă  l'aide de Convert-WindowsImage avec une injection de pilotes et de paramĂštres VMware:

    • Version du systĂšme d'exploitation: Windows Server 2019 Standard,
    • Type de disque: fixe,
    • Disposition du disque: GPT,
    • Taille du disque: 30 Go.


    Faites attention aux paramÚtres FileSize (taille réelle du fichier) et Size (taille du disque en termes de VM). La différence entre les valeurs est exactement 512 octets - la taille du pied de page VHD.
  2. Renommez le lecteur en Win2019-test2-flat.vmdk pour le charger dans la banque de données ESXi.
  3. Ensuite, je crée une machine virtuelle vide dans VMware ESXi avec un disque épais (mis à zéro) afin que le descripteur VMDK soit créé automatiquement et n'ait pas à calculer manuellement les cylindres.

  4. Nous nous connectons à l'hÎte via WinSCP et remplaçons le fichier existant:

    Tout est juste: le pied de page est en place.
  5. Allumez la machine virtuelle et vérifiez que le systÚme d'exploitation démarre sans aucun problÚme. Il ne reste plus qu'à installer VMware Tools, ce qui sera simple, puisque Convert-WindowsImage nous permet d'installer des pilotes de périphériques.

  6. Déplacez le disque vers une autre banque de données via Storage vMotion et convertissez-le en disque léger.

  7. VĂ©rifiez la taille - le disque est devenu mince.

  8. Si nous reconvertissons sur un disque Ă©pais ou migrons la machine virtuelle vers le stockage de fichiers, nous obtenons le RAW le plus pur sans en-tĂȘtes.


    Le pied de page claqua.

Le mĂȘme focus fonctionne pour les RAW crĂ©Ă©s via dd. Et mĂȘme dans la direction opposĂ©e. De cette façon, vous voyez que VMware ESXi accepte les pieds de page tiers ou les disques RAW.

Si vous ne voulez pas d'astuces, vous pouvez utiliser les outils ci-dessous.
Format source
Format cible
Les outils
Exemple de commande
Vhd
Vhdx
vhdxtool.exe
vhdxtool upgrade -f <nom de fichier> .vhd
VMDK (RAW)
Vhd
vhdtool.exe
vhdtool / convert <nom de fichier plat> .vmdk
VMDK (RAW)
Vhdx
vhdtool.exe
vhdxtool.exe
vhdtool / convert <nom de fichier plat> .vmdk

VHDX (RAW)
Vhdx
vhdxtool upgrade -f <nom de fichier> .vhd

Pour rĂ©sumer. Les diffĂ©rents formats de disques virtuels Ă©pais ne sont pas si diffĂ©rents. Au cƓur de tous les RAW avec diffĂ©rents "additifs".

La conversion de formats de disques virtuels n'est pas effrayante et, comme je l'ai montré, vous pouvez parfois vous en passer.

Le principal bĂ©nĂ©fice de tout cela est la rĂ©duction du temps de migration de Hyper-V vers VMware et vice versa et des temps d'arrĂȘt des VM pendant la migration. Dans DataLine, nous pratiquons cela avec un temps d'arrĂȘt de machine virtuelle pendant moins de 30 minutes. L'enregistrement reprĂ©sente 40 secondes de temps d'arrĂȘt de la machine virtuelle pendant la migration entre les hyperviseurs.

N'oubliez pas que lors de la migration entre différents hyperviseurs, une conversion n'est pas suffisante. Au minimum, vous devez d'abord installer les composants d'intégration de l'hyperviseur cible, supprimer ou désactiver le lancement des composants de l'hyperviseur source, supprimer les périphériques virtuels de l'hyperviseur source, etc. Mais c'est une histoire complÚtement différente, dont je peux aussi vous parler.

Liens utiles:

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


All Articles