【问题标题】:Mounting VMDK disk image挂载 VMDK 磁盘映像
【发布时间】:2014-04-15 04:23:41
【问题描述】:

我有一个带有 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

继续本指南,我尝试使用安装 EntireDisk 或 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

我做错了什么?

【问题讨论】:

  • 你试过ntfs吗?您是否尝试过fdisk /mnt/EntireDiskgparted /mnt/EntireDisk 并查看那里的分区?它们是否正确显示?
  • fdisk 返回:“警告:在“...”上检测到 GPT。 util fdisk 不支持 GPT'。 gparted 能够告诉我有 4 个分区,但都无法初始化。它列出了我可能需要的几个 ntfs 和 fat32 所需的包,所以我会安装这些包,看看它是否能帮到我
  • 尝试安装ntfs-3g
  • 另外,您可能想将此问题移至serverfault.com,我敢打赌您会在那里获得更多帮助,因为这不是一个真正的软件开发或计算机科学问题。

标签: mount computer-forensics virtual-disk vmdk


【解决方案1】:

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

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

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

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

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

安装

guestmount 包含在每个发行版的以下软件包中:

  • Ubuntu:libguestfs-tools
  • OpenSuse:guestfs-tools
  • CentOS / Fedora:libguestfs-tools-c

疑难解答

error: could not create appliance through libvirt

$ 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

fusermount: user has no write access to mountpoint

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,或者更改挂载点的文件权限

【讨论】:

  • 这很有帮助。无论如何,我必须使用sudo 并以root 的身份进入目录才能完成这项工作。
  • 这对我有用,尽管-m 参数需要更多解释。来自guestmount man pageMount the named partition or logical volume on the given mountpoint in the guest (this has nothing to do with mountpoints in the host).。我发现用/dev/sda1 挂载第一个分区是有效的,即使主机有它自己的/dev/sda1
  • 对于 debian 和 proxmox 系统,它也是软件包 libguestfs-tools
  • 我不明白-m 选项,但-i 工作正常。为什么需要-m /dev/xxx
【解决方案2】:

你也可以使用qemu:

对于.vdi 磁盘

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

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

sudo apt install qemu-utils

然后安装它:

mount /dev/nbd1p1 /mnt

对于.vmdk 磁盘

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 doesn't exist'

对于.ova 磁盘

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

上面会提取.vmdk磁盘然后挂载它。

【讨论】:

【解决方案3】:

安装 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 上挂载并可读取。

【讨论】:

  • 无需手动计算:使用offset=$((2048*512))
  • 如果出现错误:mount: /mnt/vmdisk: cannot mount /dev/loop0 read-only.使用 norecovery 选项: mount -o ro,norecovery,loop,offset=1048576 /mnt/vmdk/file.raw /mnt/vmdisk
  • mount: /mnt/vmdkraw: failed to setup loop device for /mnt/vmdk/MSEdge - Win10-disk001.vmdk.raw 它的 HPFS/NTFS/exFAT,但不要认为这有什么不同。
【解决方案4】:

这是来自 commandlinefu.com 的对我有用的答案:

kpartx -av <image-flat.vmdk>; mount -o /dev/mapper/loop0p1 /mnt/vmdk

你也可以通过运行来激活镜像中的LVM卷

vgchange -a y

然后你就可以在镜像中挂载LV了。

要卸载映像,卸载分区/LV,停用映像的 VG

vgchange -a n <volume_group>

然后运行

kpartx -dv <image-flad.vmdk>

删除分区映射。

【讨论】:

  • @AntonioPetricca 如果您说某些东西不起作用,您还可以提供有关究竟是什么不起作用的详细信息。就像发布错误消息或解释究竟是什么错误。这将大大增加评论的价值。
  • 对不起! KPARTX 说 VMDK 文件格式无法识别。
  • 这适用于 ESX 的“someimage-flat.vmdk”格式,其工作方式如前所述。
【解决方案5】:

您可以在this article 中查看 VMware 虚拟磁盘开发工具包 (VDDK) 的下载链接。下载并安装后:

vmware-mount -p path_to_vmdk 将显示 VMDK 文件中的分区。例如:

Nr      Start       Size Type Id Sytem                   
-- ---------- ---------- ---- -- ------------------------
 1       2048  461371392 BIOS 83 Linux

那就这样吧:

sudo vmware-mount path_to_vmdk 1 /mnt/mount_point

我试过guestmount,但它非常非常慢。在它下面创建一个虚拟机,使用 KVM 等等。疯狂的东西,慢得要命。

【讨论】:

  • 优秀推荐。恕我直言,许多人在没有给出任何理由的情况下投了反对票。而这是挂载和使用 vmdk 的一种非常高速的方法。我在 9 分钟内复制了 204,803 个文件(甚至比本地文件系统复制还要快)。 @georgiptr 如果您已经拥有 vmware 播放器或工作站(可能还有任何其他 vmware 产品),则不需要整个 VDDK,因为 vmware-mount 已经安装。
【解决方案6】:

不允许对@Thomas 帖子发表评论(38 次赞成回答)我会通知下一个人在使用 qemu-img 如何解决问题时可能会遇到从 guestmount 生成的以下错误代码。

ERROR:  qemu-img: '' uses a vmdk feature which is not supported by this qemu version: VMDK version 

尝试使用 vmdkmount 生成 .vmdk 的原始版本

# vmdkmount {file}.vmdk  /ur/mount/path

在挂载的目录中有一个 vmdk1 文件(你的原始文件)

现在尝试使用 guestmount 加载 vmdk

# guestmount -a vmdk1 -i --ro /ur/mount/path

【讨论】:

    【解决方案7】:

    你有ntfs的软件包吗?

    试试

    apt-get install ntfs-3g
    

    在基于 debian 的系统上。

    【讨论】:

    • OP的问题和NFS有什么关系?你说的是ntfs吗? NTFS 包类似于ntfs-3g
    • @voidlogic 抱歉,您的问题理解错了,所以一直提示我read-only mode。有没有尝试通过vmware-mount挂载vmdk文件,可以从VMware-Workstation中解压出来。
    猜你喜欢
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多