当前位置: 首页 > 知识库问答 >
问题:

装载 VMDK 磁盘映像

夏侯浩气
2023-03-14

我有一个扩展名为 vmdk 的 vmware 磁盘映像文件

我正试着安装这个并探索所有的分区(包括隐藏的)。

我试图遵循几个指南,例如:http://forums.opensuse.org/showthread.php/469942-mounting-virtual-box-machine-images-host

我可以使用vdfuse挂载图像

vdfuse -w -f windows.vmdk /mnt/

在这之后,我可以看到一个分区和整个磁盘暴露出来

# ll /mnt/
total 41942016
-r-------- 1 te users 21474836480 Feb 28 14:16 EntireDisk
-r-------- 1 te users  1569718272 Feb 28 14:16 Partition1

继续使用指南,我尝试使用

mount -o loop,ro /mnt/Partition1 mnt2/

但这给了我错误“挂载:您必须指定文件系统类型”

在尝试找到正确的类型时,我尝试了

dd if=/mnt/EntireDisk | file -
which outputs a ton of information but of note is:
/dev/stdin: x86 boot sector; partition 1: ....... FATs ....

所以我很想当一名vfat,但这给了我

mount: wrong fs type, bad option, bad superblock ...etc

我做错了什么?

共有3个答案

阴禄
2023-03-14

安装 affuse,然后使用它进行安装。

affuse /path/file.vmdk /mnt/vmdk

原始磁盘映像现在可以在/mnt/vmdk下找到。检查其扇区大小:

fdisk -l /mnt/vmdk/file.vmdk.raw

# example

Disk file.vmdk.raw: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000da525

Device       Boot Start      End  Sectors Size Id Type
/mnt/vmdk/file.vmdk.raw1 *     2048 41943039 41940992  20G 83 Linux

乘以扇区大小并开始扇区。在示例中,它将是 2048*512:

echo '2048*512' | bc
1048576

使用该偏移量挂载原始文件:

mount -o ro,loop,offset=1048576 /mnt/vmdk/file.raw /mnt/vmdisk

磁盘现在应该安装在/mnt/vmdisk上并可读。

公良俊楚
2023-03-14

您还可以使用qemu:

sudo modprobe nbd
sudo qemu-nbd -c /dev/nbd1 ./linux_box/VM/image.vdi

如果没有安装,您可以安装它们(在Ubuntu中发出此命令)

sudo apt install qemu-utils

然后安装它:

mount /dev/nbd1p1 /mnt
sudo modprobe nbd
sudo qemu-nbd -r -c /dev/nbd1 ./linux_box/VM/image.vmdk

请注意,我使用了选项-r,这是因为VMDK版本3必须只读才能被qemu挂载

然后我把它装在

mount /dev/nbd1p1 /mnt

我使用nbd1,因为nbd0有时会给出:“mount:special device/dev/nbd0p1不存在”

tar -tf image.ova
tar -xvf image.ova

上述操作将解压缩 .vmdk 磁盘,然后装载它。

公西宏峻
2023-03-14

对于较新的 Linux 系统,您可以使用客户机挂载来挂载 VMDK 映像中的第三个分区:

guestmount -a xyz.vmdk -m /dev/sda3 --ro /mnt/vmdk

或者,要自动检测和挂载图像(不太可靠),您可以尝试:

guestmount -a xyz.vmdk -i --ro /mnt/vmdk

请注意,标志--ro只是将图像挂载为只读;要将图像挂载为读写,只需将其替换为标志--rw

guestinstall包含在每个发行版的以下包中:

    < Li > Ubuntu:< code > libguestfs-tools < Li > OpenSuse:< code > guest fs-tools < Li > CentOS/Fedora:< code > libguestfs-tools-c
$ guestmount -a file.vmdk -i --ro /mnt/guest
libguestfs: error: could not create appliance through libvirt.

Try running qemu directly without libvirt using this environment variable:
export LIBGUESTFS_BACKEND=direct

Original error from libvirt: Cannot access backing file '/path/to/file.vmdk' of storage file '/tmp/libguestfssF6WKX/overlay1.qcow2' (as uid:107, gid:107): Permission denied [code=38 int1=13]

解决方案:使用LIBGUESTFS_BACKEND=Direct,建议:

LIBGUESTFS_BACKEND=direct guestmount -a file.vmdk -i --ro /mnt/guest
LIBGUESTFS_BACKEND=direct guestmount -a file.vmdk -i --ro /mnt/guest/
fusermount: user has no write access to mountpoint /mnt/guest
libguestfs: error: fuse_mount failed: /mnt/guest/, see error messages above

解决方案:使用 sudo,或更改挂载点上的文件权限

 类似资料:
  • 可引导的软盘一般被视为是最后一种方法用于在那些不能从光盘引导安装程序的硬件上引导安装程序, 也适用于其他类似的情况。 磁盘映像是一些装有原始的软盘文件内容的文件。 磁盘映像,比如 boot.img 则不能直接拷贝到软盘中。 一个特殊的程序负责向软盘中 安装原始模式写入磁盘映像文件 raw 。这是一个必须的步骤,因为这些映像 文件是一些原始的磁盘保存方式。所以需要把文件的数据 按扇区拷贝 放到软盘

  • 以下各节的脚本展示了如何监控磁盘和I/O活动。 统计磁盘读写状况 本节展示了如何找出磁盘读写最频繁的进程。 disktop.stp #!/usr/bin/env stap # # Copyright (C) 2007 Oracle Corp. # # Get the status of reading/writing disk every 5 seconds, # output top ten e

  • 每当我尝试在运行iOS8.1的iphone上运行应用程序时,我总是会遇到这个错误-- 用户的iPhone可能正在运行此版本的Xcode不支持的iOS版本。 我试着重新启动我的mac和xcode,但问题仍然存在。

  • 最近我收到了一个错误:“Could not find Developer Disk image”

  • 问题内容: 一位同事提到他听说过一个轻量级的收藏集,当内容太满时会自动分页到磁盘上-但是他不记得这个名字了。我想它看起来像这样: 然后将x = 0推到x = 500到磁盘。关键是能够在不将整个内容加载到内存的情况下对其进行迭代。 这是针对具有少量内存的胖客户端。 有人知道吗(或类似的东西)? 问题答案: 好吧,我所知道的唯一具有这种功能的工具是流行系统:prevayler和space4j。尽管它们

  • 问题内容: 我有一个数据结构,我希望能够在关闭程序之前写入文件,然后在下次应用程序启动时从文件中读取数据以重新填充该结构。 我的结构是。对象很简单;对于成员变量,它具有一个String和两个布尔类型的小型本机数组。这是一个真正简单的应用程序,我希望一次不会超过10-15 对。 我一直在尝试(不成功)对象输入/输出流。我需要使对象类可序列化吗? 您能给我一些最好的建议吗?我只需要向正确的方向推进即可