我有两个磁盘作为
.vmdk
文件,四个磁盘作为 .vdi
文件。我可以使用 Sun xMV VirtualBox 在其上启动虚拟机,并且它们工作得很好。但是,我想将它们安装在本地计算机上,这样我就可以在不启动虚拟机的情况下读取其中的一些文件。我下载了 vmware-mount
实用程序,但收到此错误:
Unable to mount the virtual disk. The disk may be in use by a virtual
machine, may not have enough volumes or mounted under another drive
letter. If not, verify that the file is a valid virtual disk file.
认为这是该实用程序的问题,我下载了 SDK 并用 C 语言编写了自己的简单程序来尝试挂载磁盘。它只是初始化 API、连接到它,然后尝试打开磁盘。我收到此错误,再次声称它不是虚拟磁盘:
**LOG: DISKLIB-DSCPTR: descriptor above max size: I64u
**LOG: DISKLIB-LINK : "f:\programming\VMs\windowstrash.vdi" : failed to open (The file specified is not a virtual disk).
**LOG: DISKLIB-CHAIN : "f:\programming\VMs\windowstrash.vdi" : failed to open (The file specified is not a virtual disk).
**LOG: DISKLIB-LIB : Failed to open 'f:\programming\VMs\windowstrash.vdi' with flags 0x1e (The file specified is not a virtual disk).
** FAILURE ** : The file specified is not a virtual disk
不过,这些文件显然是虚拟磁盘,因为我实际上可以在虚拟机上安装和使用它们。我尝试将它们与任何虚拟机分离并重试,但得到了相同的结果。
有什么想法吗?也许“描述符高于最大大小”是一个提示?
.vdi
是 VirtualBox 支持的格式,但 VMWare 不支持。
.vmdk
文件是 VMWare 映像 - 您应该能够使用 vmware 工具很好地加载它们(VirtualBox 也支持这些,但反之则不然)。
如果您尝试仅挂载 VDI 映像,请尝试按照 http://bethesignal.org/blog/2011/01/05/how-to-mount-virtualbox-vdi-image/ 中所述的步骤进行操作:
成为超级用户,使用
sudo su
使用
modprobe nbd
加载 nbd 内核模块(网络块设备模块)
qemu-nbd
运行
qemu-nbd -c /dev/nbd0 <vdi-file>
。这是用于 QEMU 支持的磁盘映像的用户空间环回块设备服务器。基本上,它知道所有奇怪的磁盘映像格式,并通过 nbd 将它们呈现给内核,并最终呈现给系统的其余部分,就像它们是普通磁盘一样。
/dev/nbd0
的块设备,并将其中的分区公开为子设备。例如,图像中的第一个分区将显示为
/dev/nbd0p1
。例如,现在您可以在块设备上运行 cfdisk
,但您很可能希望挂载单个分区:
mount /dev/nbd0p1 /mnt
完成后,卸载文件系统并关闭 qemu-nbd 服务:
umount /mnt
qemu-nbd -d /dev/nbd0