从Hyper-V到VMware,反之亦然:转换虚拟磁盘



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

它不仅简单,而且功能强大:足以在描述符文件中做注释,以将虚拟磁盘扩展为任何受支持的值。 这样,您就可以用零填充磁盘或将磁盘标记为薄磁盘,而不必在磁盘头中保留几何信息。

以下是描述符所有部分的一些标准值:

部分
参量
内容描述
价值
标头(#磁盘描述符文件)
版本号
指定描述符的版本号。 通常不会改变。
1(默认)
Cid
内容编号 构建快照树涉及的随机32位磁盘标识符。 是子增量磁盘的ParentCID。
创建时生成的随机32位值。
parentCID
父驱动器的CID。 如果没有父磁盘,则设置CID_NOPARENT标志(ffffffff)。
Ffffffff(CID_NOPARENT)
父驱动器的CID。
createType
指向描述符中描述的磁盘类型的指针(它可能是物理磁盘,差异磁盘,甚至是VMDK磁盘阵列)。 对于ESXi,属性集受到限制。
对于ESXi,请使用vmfs(对于虚拟磁盘)或vmfsRawDeviceMap和vmfsPassthroughRawDeviceMap(对于RDM)。
isNativeSnapshot
标记完成快照的方式:VMkernel或存储方式(VAAI)。
否(VMkernel),
是的(VAAI)
范围(#范围描述)

该部分包含驱动器路径,访问类型和大小。 格式:
<访问类型> <大小> <扩展类型> <VMDK文件或设备的路径> <偏移>。

访问权限
磁盘访问类型。
RW(读/写)
RO(只读)
NOACCESS(访问被拒绝)。
尺码
磁碟大小
指示了虚拟磁盘的逻辑扇区数。 它由以下公式计算:
<以字节为单位的大小> / <逻辑扇区的大小>
在此处阅读有关计算磁盘几何形状的更多信息。
范围类型
指向磁盘模式的指针。
可能有价值
平,稀疏,零,VMFS,VMFSSPARSE,VMFSRDM,VMFSRAW。
档名
VMDK文件的路径。

偏移量
如果需要指定来宾OS数据的起始偏移量,则使用它。 对于虚拟磁盘,通常为0(或未指定)。 对于RDM可能为非零。
相对于数据块开始之前磁盘起始位置的字节偏移量。
磁盘数据库(#磁盘数据库)

描述虚拟磁盘的几何形状。

ddb.adapterType
VM虚拟SCSI适配器的类型。
仅支持3种类型:
ide
商业逻辑
逻辑学

此外,VMware Paravirtual适配器始终标记为lsilogic。
ddb.geometry.cylinders
ddb.geometry.heads =“ 255”
ddb.geometry.sectors =“ 63”
用于描述虚拟磁盘的几何结构的柱面数,磁头数和扇区数。
有关计算磁盘几何形状的详细信息在此处
ddb.thinProvisioned
精简磁盘标志。
1-磁盘很薄,
0或不存在-厚磁盘
ddb.uuid
描述符ID

ddb.virtualHWVersion
虚拟硬件版本


可以在格式规范中找到所有值的描述: VMware Virtual Disk Format 1.1

Vhd。 厚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。

  1. 作为示例,我使用Convert-WindowsImage创建了Windows Server映像,并注入了VMware驱动程序和参数:

    • 操作系统版本:Windows Server 2019 Standard
    • 磁盘类型:固定,
    • 磁盘布局:GPT,
    • 磁盘大小:30GB。


    注意参数FileSize(实际文件大小)和Size(以VM表示的磁盘大小)。 值之间的差异恰好是512字节-页脚VHD的大小。
  2. 将驱动器重命名为Win2019-test2-flat.vmdk,以将其加载到ESXi数据存储中。
  3. 接下来,我在VMware ESXi中使用厚(急速归零)磁盘创建一个空VM,以便自动创建VMDK描述符,而不必手动计算柱面。

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

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

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

  7. 检查大小-磁盘变薄。

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


    页脚折断。

相同的焦点适用于通过dd创建的RAW。 甚至是相反的方向。 这样,您可以看到VMware ESXi接受第三方页脚或RAW光盘。

如果您不想要花样,则可以使用下面的工具。
源格式
目标格式
工具
命令示例
甚高频
甚高频
vhdxtool.exe
vhdxtool upgrade -f <文件名> .vhd
VMDK(原始)
甚高频
vhdtool.exe
vhdtool /转换<文件名平面> .vmdk
VMDK(原始)
甚高频
vhdtool.exe
vhdxtool.exe
vhdtool /转换<文件名平面> .vmdk

VHDX(原始)
甚高频
vhdxtool upgrade -f <文件名> .vhd

总结一下。 厚虚拟磁盘的不同格式没有太大差异。 位于所有RAW核心的各种“添加剂”。

转换虚拟磁盘格式并不令人恐惧,而且正如我所显示的,有时您可以不用它。

所有这些的主要好处是减少了从Hyper-V到VMware的迁移时间(反之亦然),以及迁移期间VM的停机时间。 在DataLine中,我们将VM停机时间控制在30分钟以内。 记录是虚拟机管理程序之间迁移期间VM停机40秒。

只需记住,在不同的管理程序之间迁移时,仅进行一次转换是不够的。 至少,您必须首先安装目标管理程序的集成组件,删除或禁用源管理程序组件的启动,删除源管理程序的虚拟设备,等等。 但这是一个完全不同的故事,我也可以讲述。

有用的链接:

Source: https://habr.com/ru/post/zh-CN479894/


All Articles