Dari Hyper-V ke VMware dan sebaliknya: mengubah disk virtual



Halo, Habr!

Dari waktu ke waktu, saya mendengar dari insinyur mempraktikkan sesuatu yang aneh: VMDK, VHD dan VHDX adalah format disk virtual yang benar-benar berbeda, hampir tertutup, dan sulit untuk mengkonversi dari satu ke yang lain. Hari ini saya akan menunjukkan bahwa ini tidak benar, saya akan mencari tahu bagaimana format ini berhubungan satu sama lain dan bagaimana melakukan konversi cepat ketika bermigrasi dari Hyper-V ke VMware dan sebaliknya.

Sedikit teori. Dari sudut pandang properti, disk virtual dibagi menjadi dua jenis:

  • tipis (disk dinamis) dan
  • tebal (disk tetap). Segala sesuatu yang lain - perbedaan, tebal disediakan malas-zeroed - hanya variasi pada topik.

Saya tidak akan membahas hal ini secara rinci. Saya hanya bisa mengatakan bahwa lebih lanjut kita akan berbicara tentang disk tebal.

Format cakram


RAW - gambar "mentah" dari sembarang drive. Ini adalah wadah reguler yang tidak mengandung header dan footer spesifik dan mewakili disk image "apa adanya". Jika kita membuka gambar seperti itu dengan editor HEX, kita akan segera melihat header GPT / MBR dan / atau sistem file. Gambar yang persis sama diperoleh melalui perintah dd di Linux. RAW dalam hal ini benar-benar jujur ​​kepada kami.


Awal file RAW.


Akhir file RAW.

VMDC. VMware ESXi adalah RAW biasa, di mana geometri disk dijelaskan dalam file deskriptor teks biasa (deskriptor). Ini adalah namanya yang kita lihat di vSphere Console ketika kita menghubungkan disk virtual ke mesin virtual atau menelusuri isi direktori pada Datastore. VMware ESXi tidak melakukan apa-apa dengan gambar. Tentu saja Disk bersandar pada dirinya sendiri dan mengembang sesuai kebutuhan. Dalam tradisi VMware terbaik, format deskriptor sangat sederhana:

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

Dan itu tidak hanya sederhana, tetapi juga fungsional: itu cukup untuk membuat catatan dalam file deskriptor untuk memperluas disk virtual ke nilai yang didukung. Ini memungkinkan Anda untuk mengisi disk dengan nol atau menipiskannya, tanpa harus menyimpan informasi geometri di header disk.

Di bawah ini adalah beberapa nilai standar untuk semua bagian deskriptor:

Bagian
Parameter
Deskripsi
Nilai
Header (# Disk DescriptorFile)
versi
Menentukan nomor versi deskriptor. Biasanya tidak berubah.
1 (default)
Cid
ID Konten Pengidentifikasi disk 32-bit acak yang terlibat dalam membangun pohon snapshot. Apakah ParentCID untuk disk delta anak.
Nilai acak 32-bit yang dihasilkan pada saat pembuatan.
parentCID
CID dari drive induk. Jika tidak ada disk induk, bendera CID_NOPARENT (ffffffff) diatur.
Ffffffff (CID_NOPARENT)
CID dari drive induk.
createType
Pointer ke tipe disk yang dijelaskan dalam deskriptor (mungkin disk fisik, dan disk diferensial, dan bahkan array disk VMDK). Untuk ESXi, set properti terbatas.
Untuk ESXi, vmfs (dalam kasus disk virtual) atau vmfsRawDeviceMap dan vmfsPassthroughRawDeviceMap (dalam kasus RDM).
isNativeSnapshot
Marks dengan cara apa snapshot akan dilakukan: VMkernel atau sarana penyimpanan (VAAI).
tidak (VMkernel),
ya (VAAI)
Extents (# Extent description)

Bagian ini berisi jalur ke disk, jenis akses, dan ukuran. Dalam format:
<tipe akses> <ukuran> <tipe luas> <path ke file VMDK atau ke perangkat> <offset>.

Akses
Jenis akses disk.
RW (baca / tulis)
RO (hanya baca)
NOACCESS (akses ditolak).
Ukuran
Ukuran disk
Jumlah sektor logis dari disk virtual ditunjukkan. Itu dihitung dengan rumus:
<Ukuran dalam byte> / <ukuran sektor logis>
Baca lebih lanjut tentang menghitung geometri disk di sini .
Jenis tingkat
Pointer ke mode disk.
Dapat mengambil nilai
DATAR, SPARSE, NOL, VMFS, VMFSSPARSE, VMFSRDM, VMFSRAW.
Nama file
Path ke file VMDK.

Offset
Ini digunakan jika Anda perlu menentukan offset awal dari data OS tamu. Untuk disk virtual, biasanya 0 (atau tidak ditentukan). Untuk RDM mungkin bukan nol.
Offset dalam byte relatif terhadap awal disk sebelum dimulainya blok data.
Database Disk (# Basis Data Disk)

Menjelaskan geometri disk virtual.

ddb.adapterType
Jenis adaptor SCSI virtual VM.
Hanya 3 jenis yang didukung:
ide
buslogic
lilogi.

Selain itu, adaptor VMware Paravirtual selalu ditandai sebagai lsilogic.
ddb.geometry.cylinders
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
Jumlah silinder, kepala, dan sektor untuk menggambarkan geometri disk virtual.
Rincian tentang penghitungan geometri disk ada di sini .
ddb.thinProvisioned
Bendera disk yang tipis.
1 - disk tipis,
0 atau tidak ada - disk tebal
ddb.uuid
ID uraian

ddb.virtualHWVersion
Versi Perangkat Keras Virtual


Deskripsi semua nilai dapat ditemukan dalam spesifikasi format: VMware Virtual Disk Format 1.1

Vhd. VHD tebal adalah RAW yang sama, tetapi dengan footer 512 byte, yang menggambarkan geometri disk. Mesin virtual Microsoft Hyper-V tidak memiliki file deskriptor yang terpisah. Deskripsi disk geometri membutuhkan 4 byte. Sebenarnya, dari sini batasan ukuran disk 2 TB.


Footer. 512 byte terakhir dari disk.

Hal yang paling menarik adalah bahwa jika Anda membuat file deskriptor dan memasukkan disk VHD dengan footer ke ESXi, hypervisor VMware akan mengabaikan footer ini dan menerima VHD sebagai yang asli.

Ketika Storage vMotion mengubah disk menjadi tipis, itu hanya memotong catatan kaki ini, dan pada output kita mendapatkan RAW yang sama tanpa nol pada akhirnya. Dan ketika mengkonversi ke disk tebal - RAW jujur. Inilah yang akan saya tunjukkan sedikit nanti.

VHDX. Semua informasi geometri disk disimpan di 4096 Kbytes pertama dari disk virtual - di area header.


Skema umum disk tebal VHDX.

Seperti apa daerah ini? Ini berisi dua salinan header dengan log mereka, BAT dan area metadata adalah umum.


Struktur logis dari header disk.

Dalam satuan waktu, hanya satu salinan tajuk yang aktif. Ini memberikan tingkat toleransi kesalahan tajuk tertentu jika terjadi gangguan yang tidak direncanakan dalam operasi baca / tulis. Setelah setiap operasi I / O, salinan direplikasi dan saklar dibuat untuk itu.


Tata letak area tajuk.

Untuk mengkonversi VHDX ke RAW, kita hanya perlu memotong 4096 KB pertama.


Mulai data pada 5 MB.

Pembaca yang penuh perhatian, tentu saja, akan mengatakan: ok, Zhenya, tetapi konversi RAW ke VHDX lemah? Yang akan saya jawab: itu tergantung pada sistem file dan pada seberapa banyak itu memungkinkan Anda untuk menulis data ke awal file. Secara manual pada sistem file NTFS, ini dapat dilakukan dengan menggeser awal file 4 MB ke depan dalam MFT dan menambahkan header ke tempat ini.

Utilitas vhdxtool.exe bekerja dengan prinsip yang sama . Namun, dengan konversi ini, kami tidak akan mendapatkan gambar yang indah dalam bentuk tajuk 4 MB dan RAW. Disk akan terlihat dan bahkan akan berfungsi dengan benar sebagai VHDX, tetapi juga akan ada banyak "sampah" dari nol yang muncul karena manipulasi dengan offset. Drive tidak akan dioptimalkan. VM dengan disk semacam itu disarankan untuk dimigrasi ke volume lain atau dioptimalkan melalui cmdlet Convert-VHD atau Optimize-VHD. Jika ini tidak dilakukan, disk akan mengambil lebih banyak ruang daripada yang seharusnya, dan dapat bekerja lebih lambat.

Namun, dalam skenario migrasi dari VMware ke Hyper-V, utilitas ini sangat diperlukan, karena memungkinkan untuk konversi di tempat tanpa perlu satu byte untuk membaca disk sumber dan membuat salinan terdekat. Semua kekasaran akan dihilangkan pada Storage Live Migration pertama.

Kesimpulan: tebal disk format VMDK, VHD, VHDX sebenarnya tidak jauh berbeda satu sama lain. Mereka didasarkan pada RAW dengan berbagai aditif. Menggunakan editor HEX atau fungsi OS yang sama untuk bekerja dengan sistem file, kita dapat mengubah 10 Tb VMDK atau VHDX menjadi disk hypervisor target dalam beberapa detik.

Mari kita lihat bagaimana VMware Exsi berurusan dengan VHD.

  1. Sebagai contoh, saya membuat gambar Windows Server menggunakan Convert-WindowsImage dengan injeksi driver dan parameter VMware:

    • Versi OS: Windows Server 2019 Standard,
    • Tipe Disk: Diperbaiki,
    • Tata Letak Disk: GPT,
    • Ukuran Disk: 30GB.


    Perhatikan parameter FileSize (ukuran file aktual) dan Ukuran (ukuran disk dalam hal VM). Perbedaan antara nilai-nilai persis 512 byte - ukuran VHD footer.
  2. Ubah nama drive menjadi Win2019-test2-flat.vmdk untuk memuatnya ke ESXi Datastore.
  3. Selanjutnya, saya membuat VM kosong di VMware ESXi dengan disk Thick (Eager Zeroed) sehingga deskriptor VMDK dibuat secara otomatis dan tidak harus secara manual menghitung silinder.

  4. Kami terhubung ke host melalui WinSCP dan mengganti file yang ada:

    Semuanya adil: catatan kaki ada di tempatnya.
  5. Nyalakan VM dan lihat bahwa OS melakukan booting tanpa masalah. Tetap hanya menginstal VMware Tools, yang akan sederhana, karena Convert-WindowsImage memungkinkan kita untuk menginstal driver perangkat.

  6. Pindahkan disk ke Datastore lain melalui Storage vMotion dan mengubahnya menjadi disk tipis.

  7. Periksa ukuran - disk menjadi tipis.

  8. Jika kami mengkonversi kembali ke disk tebal atau memigrasi VM ke penyimpanan file, kami mendapatkan RAW murni tanpa header.


    Footer itu membentak.

Fokus yang sama berfungsi untuk RAW yang dibuat melalui dd. Dan bahkan di arah yang berlawanan. Dengan cara ini Anda melihat bahwa VMware ESXi menerima footer pihak ketiga atau cakram RAW.

Jika Anda tidak ingin trik, maka Anda dapat menggunakan alat di bawah ini.
Format sumber
Format target
Alat-alatnya
Contoh perintah
Vhd
Vhdx
vhdxtool.exe
pemutakhiran vhdxtool -f <nama file> .vhd
VMDK (RAW)
Vhd
vhdtool.exe
vhdtool / convert <file name flat> .vmdk
VMDK (RAW)
Vhdx
vhdtool.exe
vhdxtool.exe
vhdtool / convert <file name flat> .vmdk

VHDX (RAW)
Vhdx
pemutakhiran vhdxtool -f <nama file> .vhd

Untuk meringkas. Berbagai format disk virtual tebal tidak begitu berbeda. Di jantung semua RAW dengan berbagai "aditif".

Mengubah format disk virtual tidak menakutkan, dan, seperti yang saya tunjukkan, terkadang Anda dapat melakukannya tanpa itu.

Keuntungan utama dari semua ini adalah pengurangan waktu migrasi dari Hyper-V ke VMware dan sebaliknya downtime VM selama migrasi. Di DataLine, kami berlatih ini dengan downtime VM selama kurang dari 30 menit. Catatannya adalah 40 detik downtime VM selama migrasi antara hypervisors.

Ingatlah bahwa ketika bermigrasi di antara hypervisor yang berbeda, satu konversi saja tidak cukup. Minimal, Anda harus terlebih dahulu menginstal komponen integrasi hypervisor target, menghapus atau menonaktifkan peluncuran komponen hypervisor sumber, menghapus perangkat virtual hypervisor sumber, dll. Tetapi ini adalah kisah yang sama sekali berbeda, yang juga bisa saya ceritakan.

Tautan yang bermanfaat:

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


All Articles