如何挂载qcow2镜像

如何挂载qcow2镜像

我读过,使用 qemu-nbd 和网络块设备内核模块,我可以挂载 qcow2 映像。我还没有看到任何关于通过循环设备安装 qcow2 的教程。是否可以?如果没有,为什么?

我不太明白 qcow2 和 iso 之间的区别。

答案1

步骤 1 - 在主机上启用 NBD

modprobe nbd max_part=8

步骤 2 - 将 QCOW2 连接为网络块设备

qemu-nbd --connect=/dev/nbd0 /var/lib/vz/images/100/vm-100-disk-1.qcow2

步骤 3 - 列出 QCOW2 内的分区

fdisk /dev/nbd0 -l

第 4 步 - 从 VM 挂载分区

mount /dev/nbd0p1 /mnt/somepoint/

您还可以使用普通用户权限挂载文件系统,即。非根:

mount /dev/nbd0p1 /mnt/somepoint -o uid=$UID,gid=$(id -g)

第 5 步 - 完成后,卸载并断开连接

umount /mnt/somepoint/
qemu-nbd --disconnect /dev/nbd0
rmmod nbd

可耻地被盗:https://gist.github.com/shamil/62935d9b456a6f9877b5

答案2

感谢吉尔斯的指出盖斯特蒙特。安装 qcow2 镜像非常简单:

  1. 首先安装 guestmount (作为 Fedora/Debian/Arch/etc 中 libguestfs-tools 或 libguestfs 的一部分)

    yum install libguestfs-tools
    
  2. 然后你应该能够使用 -i 选项自动神奇地挂载你的 qcow2 镜像

    guestmount -a path_to_image.qcow2 -i --ro /mount_point
    

您可以使用 -m 选项手动指定安装点(在映像内)。
一如既往地阅读 guestmount 上的手册页以获取更多详细信息......

注意:这仅涉及问题标题。请参阅 Peter 的回答,了解 qcow2 和 ISO 之间的差异...

答案3

循环设备只是将文件转换为块设备。如果文件的块有一些特殊的内部映射,则循环设备将不会转换其中的任何一个。 qcow2 很特别......它内部有特殊的映射,可以处理存储在不同位置的相同块的不同快照。如果将其安装为循环设备,您只会得到一个不代表映像中实际数据的大块设备。

另一种选择是转换为原始并安装为循环设备:

qemu-img convert -p -O raw oldfile.qcow2 newfile.raw

但随后您必须将其转换回 qcow2 才能像以前一样再次使用它。

我认为使用 qemu-nbd 不是最高效的 IO,但很简单。将其安装到虚拟机中(就像使用实时 USB 启动的虚拟机一样)也很容易。转换没有多大意义......这只是它们不同之处的一个例子。

答案4

VirtualBox 内带有 QEMU 的 Debian 10。需要将一些大文件复制到 QEMU VM。网速太慢。

  • guestmount按照上面的建议安装libguestfs-tools
  • 停止模拟器以释放 qcow2 文件。
    sudo guestmount -a /path/to/some.qcow2 -i --rw /path/to/tempdir
    
    然后我就可以对文件系统进行读/写访问。复制速度超过 5 MB/s。
  • 卸载:
    guestunmount /path/to/tempdir
    

相关内容