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

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

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

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

答案1

有多种方法可以访问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

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

QEMU

如果您只需要只读访问,QEMU 可以挂载.vmdk文件。我正在参考这个堆栈交换帖子对于这部分。

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

sudo modprobe nbd

将 vmware 磁盘文件挂载到nbd.

sudo qemu-nbd -r -c /dev/nbd1 ./path/to/vmfile.vmdk

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

mount /dev/nbd1p1 /mnt

但是,这可能不是您可用的格式。在这种情况下,我建议您尝试使用 提取文件的内容7zip。对于我引用的最后几个选项这个网站

7zip

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

7z l vmfile.vmdk

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

7z e vmfile.vmdk FILE

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

/dev/loop 和 guestmount

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

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

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

losetup /dev/loop30 /path/to/vmfile.vmdk

关联我之前提到过有关进行偏移的讨论,但这仅对于特定的 Windows VM 是必要的。

还有一个名为 的 Linux 实用程序guestmount。了解更多相关信息这里在其联机帮助页上。在这里查看其中的示例:

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

guestmount -a windows.img -m /dev/sda1 --ro /mnt

对于第一个分区上有 /boot 文件系统、逻辑卷上有根文件系统的典型 Linux 客户机:

guestmount -a linux.img -m /dev/VG/LV -m /dev/sda1:/boot --ro /mnt

要让 libguestfs 为您检测来宾安装点:

guestmount -a guest.img -i --ro /mnt

结论

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

祝你好运!

相关内容