有时,能够在主机挂载映像会很有帮助。 例如,如果guest没有网络支持,则将文件传入和传出guest的唯一方法是通过它可以寻址的存储设备。还比如,如果/etc/default/grub文件的GRUB_TIMEOUT设为0,则不会进入到grub界面直接选择默认系统,要是默认系统损坏了不就没法进入系统了,那么可以挂载镜像然后直接修改 /etc/default/grub文件,设置GRUB_TIMEOUT为一定时长,从而允许选择其他系统。
raw格式镜像
Linux 和其他Unix-like主机可以使用回环设备挂载raw格式的映像。 从 root 登录(或使用 sudo),挂载带偏移量(offset)的回环设备。
mount -o loop,offset=32256 /path/to/image.img /mnt/mountpoint
注意:映像必须是raw格式的!
要确定正确的偏移量offset,您可以运行
fdisk -l /path/to/image.img
您需要的偏移量是分区的开始乘以扇区大小。 例如,如果 start 为 128,扇区大小为 512,则偏移量为 65536。
例如,要将一些文件复制到 FreeDOS 硬盘映像:
mkdir -p /mnt/freedos
mount -o loop,offset=32256 freedos-c.img /mnt/freedos
cp oldgames /mnt/freedos
umount /mnt/freedos
注意:不要在 QEMU 使用 QEMU 映像时挂载它(除非使用 -snapshot),否则您可能会损坏映像上的文件系统。
详见下面这篇文章
挂载虚拟机映像文件img_play maker的博客-CSDN博客
qcow2格式镜像
对于其他格式的 qemu 镜像,可以使用 qemu-nbd
#加载nbd模块
modprobe nbd max_part=16
#注意如果不添加max_part=16参数,在挂载镜像分区时可能会无法看到磁盘里面的实际分区,例如/dev/nbd0p1
#连接qemu镜像到nbd设备
qemu-nbd -c /dev/nbd0 image.qcow2
注记:猜测这个操作对nbd设备进行了分区操作,创建新分区nbd0p1,但是该分区操作没有跟内核通信,因此需要partprobe命令来更新。
partprobe /dev/nbd0
将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表。
#挂载nbd
mount /dev/nbd0p1 /mnt/image
成功挂载如下!进入到虚拟机的文件系统里了。
使用 fdisk 您可以获得有关 nbd0 中不同分区的信息。
LVM 类型的分区不能使用“mount”命令挂载。 在这种情况下,映像如下挂载:
$ vgscan
Reading all physical volumes. This may take a while...
Found volume group "ub1110server-qemu" using metadata type lvm2
$ vgchange -ay
2 logical volume(s) in volume group "ub1110server-qemu" now active
$ mount /dev/ub1110server-qemu/<LogicalVolumeName> /mnt/image
将 <LogicalVolumeName> 替换为卷组中存在的逻辑卷的名称。 最后,在使用后卸载映像并反转其他步骤(取决于映像的安装方式)很重要:
$ umount /mnt/image
$ qemu-nbd -d /dev/nbd0
$ vgchange -an VolGroupName
$ killall qemu-nbd
“nbd”代表“Network Block Device”。 这里我们在本地使用它们,但也可以导出映像供其他主机使用/挂载。 有关详细信息,请参阅 qemu-nbd(8)、nbd-client(8)。
对raw图像也可以这样做,但它的效率远低于上述使用回环设备的方法。
对vmdk 和raw映像的另一种替代方法是使用 vdfuse,它允许访问 VirtualBox 支持的任何映像。
virtualbox.org • View topic - HOWTO: Mount any VBox-compatible disk image on the host