将 Linux VM 的块设备映射到 vmware 数据存储上的 vmdk 文件

将 Linux VM 的块设备映射到 vmware 数据存储上的 vmdk 文件

出于开发和登台的目的,我必须经常创建各个虚拟硬盘(vmdk 容器)的克隆,并将它们移动/部署到其他系统中。

虽然我已经能够破解一个工作 POC,但我现在需要一种适用于许多我什至不想控制的虚拟机的通用方法。我在将块设备映射到 ESX 数据存储上的实际 vmdk 文件(每个虚拟机有许多虚拟 HDD)时遇到困难。

此 vmdk 解析旨在在各个虚拟机上执行,我可以通过 ssh 访问所有 ESXi 主机,这也是我创建和检索 vmdk 克隆的方式。 (是的,这是非常hacky和危险的。)

最终,例如,我会询问我的脚本what's the corresponding file of /dev/sdd?,它应该回复/vmfs/volumes/12345678-12345678-1234-123456789abc/foobar/filenamewithoutsemanticalinformation.vmdk

如何确定映射到虚拟机内给定块设备的 vmdk 文件的真实路径?

我有一个关于将 VM 内部的 SCSI 目标 ID 与 vmx 文件中的 vHDD 条目进行匹配的想法,但我不知道这是否是可靠的信息。

更新

经过一段时间的尝试,我相当确定 SCSI 控制器和目标 ID 的匹配是可靠的并且可以轻松控制。在这种情况下,可靠意味着静态;系统不会更改 ID,并且它们会按照 vmx 文件中的命名和编号完全暴露给来宾。使用lsscsi其中之一可以获得块设备的控制器和目标ID。然后可以<controller>:<target>.filename在 vmx 文件中进行 grep 查找并从结果中提取文件名。

找到正确的 vmx 文件是一个新问题。这可以通过find-grep在数据存储上的所有 vmx 文件中查找虚拟机的 MAC 地址来实现。这不是最漂亮的方法,也不推荐用于大型安装。

相关内容