问题描述
该笔记将记录:挂载 .vmdk 文件的方法(目的是从中提取文件),以及相关问题的解决办法;
解决方案
下面介绍的方法是类似的,只是使用的工具不同;
(推荐)通过 vmware-mount 命令
我们通常使用 VMware Workstation 软件(在 Linux 中),其自带 vmware-mount 命令,能够进行挂载 .vmdk 文件;
常规 VMKD 文件
针对常规的 VMKD 文件(常规,指内部安装操作系统,并具有多个分区):
# vmware-mount -p mydisk.vmdk Nr Start Size Type Id System 1 2024 947890173 BIOS 7 HPFS/NTFS # mkdir /mnt/myfiles # vmware-mount mydisk.vmdk 1 /mnt/myfiles // 其中 1 为 vmware-mount -p 输出中的 Nr 列
扁平 VMDK 文件
针对扁平的 VMDK 文件(扁平,flat,指没有分区,直接在虚拟机格式化使用):
# mkdir /mnt/vmdk /mnt/vmdk-fs # vmware-mount -f mydisk.vmdk /mnt/vmdk/ # mount /mnt/vmdk/flat /mnt/vmware-fs // 其 vmware-mount -f 将产生 flat 文件
带有 LVM 分区的 VMDK 文件
linux – How to mount an LVM volume from a dd/raw/vmdk image? – Super User
linux – Cannot delete device /dev/loop0 – Stack Overflow
LFCS: How to Manage and Create LVM Using vgcreate, lvcreate and lvextend Commands – Part 11
挂载文件系统:
vmware-mount -f mydisk.vmdk /mnt/vmdk/ apt-get install kpartx kpartx -a -v /mnt/vmdk/flat # 前个步骤 flat 已映射为快设备 # 其后续操作与 LVM 管理类似,不再赘述 lvscan ... vgrename ... # 如果 VG 出现重名,需要重命名处理
卸载文件系统:
umount ... # 卸载文件系统 vgchange --activate n '<vg name>' # 关闭 LVM 分区(否则 Ubuntu 22.04 LTS 会提示被 loop 占用) kpartx -d /mnt/vmdk/flat # 卸载 flat 所映射的快设备 umount /mnt/vmdk/ # 卸载 flat 文件
(废弃)通过 vmdkmount 命令
第一步、vmdkmount
安装 libvmdk 工具:
apt-get install libvmdk-utils
使用 vmdkmount 进行挂载:
vmdkmount Win7_64/Win7_64.vmdk /mnt/vmdk/
挂载后,在 /mnt/vmdk 下生成了 vmdk1 文件;
第二步、计算偏移量
使用 mmls 命令,该命令属于 sleuthkit 软件包;
对 vmdk1 文件执行如下操作,查看扇区分布:
mmls vmdk1
会得到类似下面的输出:
# DOS Partition Table # Offset Sector: 0 # Units are in 512-byte sectors # # Slot Start End Length Description # 000: Meta 0000000000 0000000000 0000000001 Primary Table (#0) # 001: ------- 0000000000 0000002047 0000002048 Unallocated # 002: 000:000 0000002048 0000206847 0000204800 NTFS / exFAT (0x07) # 003: 000:001 0000206848 0220198911 0219992064 NTFS / exFAT (0x07) # 004: ------- 0220198912 0220200959 0000002048 Unallocated
计算偏移量:
echo 512*206848 | bc # 输出:105906176 # 其实,用 fdisk 查看也是可以的;
第三步、mount
# 执行挂载操作; mount -o ro,offset=105906176 /mnt/vmdk/vmdk1 /mnt/vmdk1 # 到此挂在成功,移步到 /mnt/vmdk1 目录下查看内容;
error log
# 日期:02/27/2017
# VirtualBox + Debian8,我挂载时候出现了一个错误:“vmdk write access unavailable, cannot proceed”,其实我也不是很懂,下面命令解决了我的问题:
mount -t ext4 -o loop,ro,noexec,noload,offset=1048576 /mnt/vmdk/vmdk1 /mnt/vmdk1/
# 日期:03/01/2017
# 今天我挂载了 virtualbox + ubuntu 10.10 amd64 的 VMDK 文件,并没有出现上述错误;
# 从虚拟机里看文件系统是 Ext4 格式;
(废弃)通过 afflib-tools 工具
Install afflib-tools
apt-get install afflib-tools affuse /path/file.vmdk /mnt/vmdk
Check sector size
# fdisk -l /mnt/vmdk/file.vmdk.raw 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 Multiply sectorsize and startsector. In example it would be 2048*512
echo 2048*512 | bc # 输出 1048576
Mount using that offset
mount -o ro,loop,offset=1048576 /mnt/vmdk/file.raw /mnt/vmdisk