挂载VMDK磁盘镜像

问题描述 投票:0回答:7

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

我做错了什么?

mount computer-forensics virtual-disk vmdk
7个回答
79
投票

对于较新的 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
,或更改挂载点上的文件权限


26
投票

您还可以使用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
有时会给出:'挂载:特殊设备/dev/nbd0p1不存在'

对于
.ova
磁盘

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

上面将提取

.vmdk
磁盘,然后挂载它。


7
投票

安装 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
上读取。


3
投票

这是来自 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>

删除分区映射。


2
投票

您可以查看本文,获取 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等等。疯狂的东西,慢得要命。


0
投票

我需要修改 VMware4 vmdk 文件的内容。现有解决方案存在问题:

  • guestmount 能够以只读方式挂载 vmdk,但我无法以读/写方式挂载磁盘(错误:“无法以只读方式挂载 /dev/sda4”)
  • kpartx 未找到任何分区(kpart -l 返回空白)。
  • VDDK 链接显然不再工作,并且最新的 VDDK 不提供 vmware-mount。

我的解决方案是使用另一个辅助虚拟机来挂载vmdk文件。此过程使用 VirtualBox 控制台。假设 $VM 指向辅助虚拟机,$VBOX_DISK 指向 vmdk 磁盘:

  1. 确保辅助虚拟机已停止,例如

    host # VBoxManage controlvm $VM poweroff

  2. 附加vmdk文件

    host # VBoxManage storageattach $VM --storagectl "IDE Controller" \
    --port 0 --device 1 --type hdd --medium "$VBOX_DISK"

  3. 启动辅助虚拟机

    host # VBoxManage startvm $VM --headless

  4. 通过 SSH 或 GUI 访问辅助虚拟机,然后检查并安装您需要的驱动器:

    vm # lsblk
    vm # mount /dev/sdb4 /mnt
    

  5. 对 vmdk 文件系统进行必要的更改后,卸载并退出虚拟机

    vm # unmount /mnt
    vm # exit
    

  6. 关闭虚拟机电源并分离驱动器

    host # VBoxManage controlvm $VM poweroff
    host # VBoxManage storageattach $VM --storagectl "IDE Controller" \
    --port 0 --device 1 --type hdd --medium none


-3
投票

你有ntfs的软件包吗?

尝试

apt-get install ntfs-3g

在基于 Debian 的系统上。

© www.soinside.com 2019 - 2024. All rights reserved.