[英]Mounting VMDK disk image
我有一个带有 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
我究竟做错了什么?
对于较新的 Linux 系统,您可以使用guestmount
挂载 VMDK 映像中的第三个分区:
guestmount -a xyz.vmdk -m /dev/sda3 --ro /mnt/vmdk
或者,要自动检测和安装映像(不太可靠),您可以尝试:
guestmount -a xyz.vmdk -i --ro /mnt/vmdk
请注意,标志--ro
只是将图像挂载为只读; 要将图像挂载为读写,只需将其替换为标志--rw
。
guestmount
包含在每个发行版的以下软件包中:
libguestfs-tools
guestfs-tools
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
,或更改挂载点上的文件权限
你也可以使用 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:特殊设备 /dev/nbd0p1 不存在'
.ova
磁盘tar -tf image.ova
tar -xvf image.ova
以上将提取.vmdk
磁盘,然后挂载它。
安装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
上挂载和读取/mnt/vmdisk
。
这是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>
删除分区映射。
您可以在本文中查看 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 等等。 疯狂的东西,慢得像地狱。
你有ntfs的软件包吗?
尝试
apt-get install ntfs-3g
在基于 debian 的系统上。
不允许对@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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.