
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:
Deskripsi semua nilai dapat ditemukan dalam spesifikasi format:
VMware Virtual Disk Format 1.1Vhd. 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.
- 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. - Ubah nama drive menjadi Win2019-test2-flat.vmdk untuk memuatnya ke ESXi Datastore.

- 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.

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

Semuanya adil: catatan kaki ada di tempatnya. - 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.

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

- Periksa ukuran - disk menjadi tipis.

- 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.
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: