首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >装载VMDK磁盘映像

装载VMDK磁盘映像
EN

Stack Overflow用户
提问于 2014-03-11 21:51:06
回答 7查看 86.9K关注 0票数 29

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

我正在尝试挂载它并探索所有的分区(包括隐藏的分区)。

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

我可以使用vdfuse挂载映像

代码语言:javascript
复制
vdfuse -w -f windows.vmdk /mnt/

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

代码语言:javascript
复制
# 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

代码语言:javascript
复制
mount -o loop,ro /mnt/Partition1 mnt2/

但是这会给我一个错误'mount:你必须指定一个文件系统类型‘

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

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

所以我试着装成vfat,但这给了我

代码语言:javascript
复制
mount: wrong fs type, bad option, bad superblock ...etc

我做错了什么?

EN

回答 7

Stack Overflow用户

发布于 2015-05-13 04:49:40

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

代码语言:javascript
复制
guestmount -a xyz.vmdk -m /dev/sda3 --ro /mnt/vmdk

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

代码语言:javascript
复制
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

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
LIBGUESTFS_BACKEND=direct guestmount -a file.vmdk -i --ro /mnt/guest

fusermount: user has no write access to mountpoint

代码语言:javascript
复制
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,或更改装载点上的文件权限

票数 64
EN

Stack Overflow用户

发布于 2018-02-27 10:55:28

您也可以使用qemu:

对于.vdi磁盘

代码语言:javascript
复制
sudo modprobe nbd
sudo qemu-nbd -c /dev/nbd1 ./linux_box/VM/image.vdi

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

代码语言:javascript
复制
sudo apt install qemu-utils

然后使用以下命令挂载它:

代码语言:javascript
复制
mount /dev/nbd1p1 /mnt

对于.vmdk磁盘

代码语言:javascript
复制
sudo modprobe nbd
sudo qemu-nbd -r -c /dev/nbd1 ./linux_box/VM/image.vmdk

请注意,我使用了选项-r,这是因为qemu vmdkversion3必须是只读,才能由挂载

然后我将它挂载到

代码语言:javascript
复制
mount /dev/nbd1p1 /mnt

我使用nbd1,因为nbd0有时会给出:‘挂载:特殊设备/开发/nbd0p1不存在’

对于.ova磁盘

代码语言:javascript
复制
tar -tf image.ova
tar -xvf image.ova

上面的命令将解压.vmdk磁盘,然后挂载它。

票数 18
EN

Stack Overflow用户

发布于 2016-09-06 21:25:18

安装affuse,然后使用它挂载。

代码语言:javascript
复制
affuse /path/file.vmdk /mnt/vmdk

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
echo '2048*512' | bc
1048576

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

代码语言:javascript
复制
mount -o ro,loop,offset=1048576 /mnt/vmdk/file.raw /mnt/vmdisk

现在,该磁盘应已在/mnt/vmdisk上挂载并可读。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22327728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档