
哈Ha!
我不时从实践工程师那里听到一些奇怪的东西:VMDK,VHD和VHDX是完全不同的虚拟磁盘格式,几乎是封闭的,并且很难将它们相互转换。 今天,我将证明事实并非如此,我将弄清楚这些格式如何相互关联,以及从Hyper-V迁移到VMware时如何进行快速转换,反之亦然。
有点理论。 从属性的角度来看,虚拟磁盘分为两种类型:
- 薄(动态磁盘)和
- 厚(固定磁盘)。 其他所有内容-差异,厚置备的延迟清零-只是该主题的变体。
我不会在此详述。 我只能说,我们将进一步讨论厚磁盘。
光盘格式
RAW-任何驱动器的“原始”图像。 这是一个常规容器,不包含任何特定的页眉和页脚,并“按原样”表示磁盘映像。 如果使用HEX编辑器打开此类图像,我们将立即看到GPT / MBR和/或文件系统的标题。 完全相同的映像是通过Linux上的dd命令获得的。 RAW在这方面对我们绝对是诚实的。
RAW文件的开头。
RAW文件末尾。VMDC。 VMware ESXi是普通的RAW,其中磁盘几何形状在常规文本文件描述符(描述符)中描述。 当我们将虚拟磁盘连接到虚拟机或浏览数据存储上目录的内容时,便会在vSphere Console中看到他的名字。 VMware ESXi对映像不执行任何操作。 绝对是 磁盘自行放置并根据需要扩展。 按照VMware的最佳传统,描述符格式非常简单:
# 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"
它不仅简单,而且功能强大:足以在描述符文件中做注释,以将虚拟磁盘扩展为任何受支持的值。 这样,您就可以用零填充磁盘或将磁盘标记为薄磁盘,而不必在磁盘头中保留几何信息。
以下是描述符所有部分的一些标准值:
可以在格式规范中找到所有值的描述:
VMware Virtual Disk Format 1.1Vhd。 厚VHD是相同的RAW,但具有512字节的页脚,用于描述磁盘的几何形状。 Microsoft Hyper-V虚拟机没有单独的描述符文件。 磁盘几何形状的描述需要4个字节。 实际上,从这里开始,磁盘大小限制为2 TB。
页脚。 磁盘的最后512字节。最有趣的是,如果创建描述符文件并将带有页脚的VHD磁盘滑入ESXi,则VMware虚拟机管理程序将忽略此页脚并将VHD作为本机。
当Storage vMotion将磁盘转换为精简磁盘时,它仅切断该页脚,并且在输出端我们得到相同的RAW,但末尾没有零。 而当转换为厚磁盘时-诚实的RAW。 这是我稍后要演示的内容。
VHDX。 所有磁盘几何信息都存储在虚拟磁盘的前4096 KB中-头区域。
VHDX厚磁盘的一般方案。这个区域是什么样的? 它包含标头的两个副本及其日志,BAT和元数据区域很常见。
磁盘头的逻辑结构。在时间单位中,只有一个副本头处于活动状态。 如果在读/写操作中计划外中断,则可以提供一定程度的标题容错能力。 每次I / O操作之后,将复制副本并对其进行切换。
标头区域的布局。要将VHDX转换为RAW,我们只需要剪切前4096 KB。
从5 MB开始数据。细心的读者当然会说:好的,Zhenya,但是弱地将RAW转换为VHDX? 我将回答:取决于文件系统以及它允许您将数据写入文件开头的数量。 在NTFS文件系统上手动进行操作,可以通过将文件的开头在MFT中向前移4 MB并将标头附加到该位置来完成。
vhdxtool.exe实用程序的工作原理相同
。 但是,通过这种转换,我们将无法获得4 MB标头和RAW形式的精美图片。 该磁盘将可见,甚至可以作为VHDX正常工作,但是由于偏移操作,也会出现很多零的“垃圾”。 该驱动器将不会优化。 建议将具有此类磁盘的VM迁移到另一个卷,或通过Convert-VHD或Optimize-VHD cmdlet对其进行优化。 如果不这样做,磁盘将占用更多的空间,并且工作速度可能会更慢。
但是,在从VMware迁移到Hyper-V的情况下,此实用程序必不可少,因为它允许就地转换,而无需字节来读取源磁盘并创建附近的副本。 在首次存储实时迁移时,所有粗糙度将被消除。
结论: VMDK,VHD,VHDX格式的厚磁盘实际上彼此没有太大区别。 它们基于具有各种添加剂的RAW。 使用与文件系统相同的HEX编辑器或OS功能,我们可以在几秒钟内将10 Tb VMDK或VHDX转换为目标虚拟机监控程序磁盘。
让我们看一下VMware Exsi如何处理VHD。
- 作为示例,我使用Convert-WindowsImage创建了Windows Server映像,并注入了VMware驱动程序和参数:
- 操作系统版本:Windows Server 2019 Standard
- 磁盘类型:固定,
- 磁盘布局:GPT,
- 磁盘大小:30GB。

注意参数FileSize(实际文件大小)和Size(以VM表示的磁盘大小)。 值之间的差异恰好是512字节-页脚VHD的大小。 - 将驱动器重命名为Win2019-test2-flat.vmdk,以将其加载到ESXi数据存储中。

- 接下来,我在VMware ESXi中使用厚(急速归零)磁盘创建一个空VM,以便自动创建VMDK描述符,而不必手动计算柱面。

- 我们通过WinSCP连接到主机并替换现有文件:

一切都是公平的:页脚到位。 - 打开虚拟机,查看操作系统是否启动,没有任何问题。 仅需安装VMware Tools,这将很简单,因为Convert-WindowsImage允许我们安装设备驱动程序。

- 通过Storage vMotion将磁盘移动到另一个Datastore,并将其转换为精简磁盘。

- 检查大小-磁盘变薄。

- 如果我们将其转换回厚磁盘或将VM迁移到文件存储,则会得到最纯净的无标题的RAW。

页脚折断。
相同的焦点适用于通过dd创建的RAW。 甚至是相反的方向。 这样,您可以看到VMware ESXi接受第三方页脚或RAW光盘。
如果您不想要花样,则可以使用下面的工具。
总结一下。 厚虚拟磁盘的不同格式没有太大差异。 位于所有RAW核心的各种“添加剂”。
转换虚拟磁盘格式并不令人恐惧,而且正如我所显示的,有时您可以不用它。
所有这些的主要好处是减少了从Hyper-V到VMware的迁移时间(反之亦然),以及迁移期间VM的停机时间。 在DataLine中,我们将VM停机时间控制在30分钟以内。 记录是虚拟机管理程序之间迁移期间VM停机40秒。
只需记住,在不同的管理程序之间迁移时,仅进行一次转换是不够的。 至少,您必须首先安装目标管理程序的集成组件,删除或禁用源管理程序组件的启动,删除源管理程序的虚拟设备,等等。 但这是一个完全不同的故事,我也可以讲述。
有用的链接: