如何挂载虚拟硬盘?

如何挂载虚拟硬盘?

是否可以在 Ubuntu 上安装虚拟硬盘(VHD、HDD、VDI、VMDK)?如何操作?

答案1

根据这篇 wikibooks 文章

Linux 和其他类 Unix 主机可以使用回送设备挂载使用 raw 格式类型创建的映像。从 root 登录(或使用 sudo)挂载偏移量为 32,256 的回送设备。

mount -o loop,offset=32256 /path/to/image.img /mnt/mountpoint

对于其他类型的 qemu 镜像,您可以使用 qemu-nbd

modprobe nbd max_part=16
qemu-nbd -c /dev/nbd0 image.qcow2
partprobe /dev/nbd0
mount /dev/nbd0p1 /mnt/image

另外,通常您可以将图像从一种格式转换为另一种格式。

raw - (default) the raw format is a plain binary image of the disc 
       image, and is very portable. 
       On filesystems that support sparse files, 
       images in this format only use the 
       space actually used by the data recorded in them.
cloop -     Compressed Loop format, mainly used for reading Knoppix 
       and similar live CD image formats
cow - copy-on-write format, supported for historical reasons only and
       not available to QEMU on Windows
qcow - the old QEMU copy-on-write format, supported for 
       historical reasons and superseded by qcow2
qcow2 - QEMU copy-on-write format with a range of special features, 
       including the ability to take multiple snapshots, smaller 
       images on filesystems that don't support sparse files, 
       optional AES encryption, and optional zlib compression
vmdk - VMware 3 & 4, or 6 image format, for exchanging images 
       with that product
vdi - VirtualBox 1.1 compatible image format, for exchanging 
       images with VirtualBox.

我在搜索时找到了 (VirtualBox) .VDI 的解决方案,本网站

modprobe nbd max_part=16
qemu-nbd -c /dev/nbd0 /path/to/some.vdi
mount -o loop /dev/nbd0p1 /mnt
# do stuff
umount /mnt
qemu-nbd -d /dev/nbd0
rmmod nbd

与“Qemu 方式”命令相同。无边界!

答案2

这是Ubuntu 16.04

安装和挂载使用affuse

sudo apt-get install afflib-tools
sudo affuse /path/file.vmdk /mnt/vmdk

检查扇区大小:

sudo 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

将 sectorsize 和 startsector 相乘。在本例中,它将是 2048*512:

$ echo 2048*512 | bc
1048576

使用该偏移量进行安装:

sudo mount -o ro,loop,offset=1048576 /mnt/vmdk/file.raw /mnt/vmdisk

磁盘现在应该已安装并可读取/mnt/vmdisk

答案3

您也可以使用 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磁盘然后挂载它。

答案4

对于vmdkvhd文件,我只能使用kpartx以下命令:

sudo kpartx -a -v <image-flat.vmdk>

检查输出losetup,它应该包含循环设备/dev/loop0;还要检查sudo blkid分区/dev/mapper/loop0p1,然后在 mount 命令中使用它:

sudo mount -o rw /dev/mapper/loop0p1 /mnt/vmdk

sudo mkdir /mnt/vmdk其中 /mnt/vmdk 是您的挂载点,如果不存在则创建。

源自 commandlinefu.com (kpartx 和 mount 命令)

使用以下方式卸载:

sudo umount /mnt/vmdk
sudo kpartx -d -v <image-flat.vmdk>

相关内容