如何访问 vmdk 文件中的文件?

Chr*_*Gtz 2 debian vmware

我在使用虚拟机时遇到问题,我想知道是否有办法访问虚拟磁盘文件,我听说过 OSFMMount 但它不能让我访问我需要的文件夹

在主机上恢复虚拟机的备份,使系统运行,但我需要获取磁盘内部的数据,我将其放在外部磁盘上,将其移至Windows计算机,然后将其移至CentOS能够使用 vmware-mount 访问,但它向我发送错误“无法安装磁盘 'SERVER-04.Palmiss.local.vmdk':安装虚拟磁盘不安全。它可能正在使用中。”

kem*_*tep 5

有多种方法可以访问vmdk文件。

vmware 挂载

正如您已经尝试过的那样vmware-mount。确保在使用它时输入了所有正确的命令。我已参考此站点以获取有关vmware-mount. 此链接已过时,但它可能仍然适用于您。

在您的情况下,可能只需要挂载特定的分区或知道正确的分区号。

vmware-mount -p #list partitions
mkdir /mnt/vmdkfile #create a mountpoint for your file
vmware-mount /path/to/vmfile.vmdk 1 /mnt/vmdkfile
Run Code Online (Sandbox Code Playgroud)

请注意,这1vmware-mount -p命令中列出的正确分区号。这可能不起作用,因为您的情况vmware-mount是抱怨磁盘仍在使用中。如果可能,您可以使用 VMWare Player 或 Workstation 尝试使用您.vmdk的磁盘创建新的 VM 。或者,您可以尝试QEMU.

动车组

如果你只需要只读访问 QEMU 可以挂载.vmdk文件。对于这部分,我参考了这篇 Stack Exchange 帖子

验证您是否拥有nbd内核模块。

sudo modprobe nbd
Run Code Online (Sandbox Code Playgroud)

将 vmware 磁盘文件挂载到nbd.

sudo qemu-nbd -r -c /dev/nbd1 ./path/to/vmfile.vmdk
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令将其挂载到您的 Linux 主机:

mount /dev/nbd1p1 /mnt
Run Code Online (Sandbox Code Playgroud)

但是,这可能不是您可用的格式。在这种情况下,我建议您尝试使用7zip. 对于最后几个选项,我参考了这个站点

7zip

验证您是否可以使用 列出文件的内容7zip

7z l vmfile.vmdk
Run Code Online (Sandbox Code Playgroud)

如果可以并且确实看到了相关目录,那么您应该能够使用以下内容提取特定文件:

7z e vmfile.vmdk FILE
Run Code Online (Sandbox Code Playgroud)

这将从.vmdk. 如果需要,您可以grep通过.vmdk查找特定文件。如果您需要整个磁盘,只需使用7z e vmfile.vmdk应该提取整个存档。

/dev/loop 和来宾挂载

您可以使用循环设备,甚至guestmount还可以尝试安装映像。

fdisk -l | grep /dev/loop或列出当前循环设备df -h | grep /dev/loop

如果您的循环设备达到 20,则创建一个编号更高的循环设备并使用以下命令安装您的映像:

losetup /dev/loop30 /path/to/vmfile.vmdk
Run Code Online (Sandbox Code Playgroud)

我之前提到的链接谈到了进行偏移,但这应该只对特定的 Windows VM 是必要的。

还有一个名为guestmount. 了解更多关于它在这里它的手册页。在此处查看示例:

对于在第一个分区上有其主文件系统的典型 Windows 客户机:

guestmount -a windows.img -m /dev/sda1 --ro /mnt
Run Code Online (Sandbox Code Playgroud)

对于一个典型的 Linux 来宾,它在第一个分区上有一个 /boot 文件系统,在一个逻辑卷上有一个根文件系统:

guestmount -a linux.img -m /dev/VG/LV -m /dev/sda1:/boot --ro /mnt
Run Code Online (Sandbox Code Playgroud)

要让 libguestfs 为您检测来宾挂载点:

guestmount -a guest.img -i --ro /mnt
Run Code Online (Sandbox Code Playgroud)

结论

为了您的参考,我还将提供一个链接,指向有关.vmdk 安装限制的VMWare 文档。在尝试任何命令之前,请阅读我提供的所有链接。如果某个特定的最适合您,我可以限制这篇文章的范围。如果您有任何问题或我的帖子中有任何误解或问题,请发表评论,我可以根据需要进行编辑。

祝你好运!

  • 多么棒的答案啊!谢谢! (2认同)