我读过,使用 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
答案2
感谢吉尔斯的指出盖斯特蒙特。安装 qcow2 镜像非常简单:
首先安装 guestmount (作为 Fedora/Debian/Arch/etc 中 libguestfs-tools 或 libguestfs 的一部分)
yum install libguestfs-tools
然后你应该能够使用 -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 文件。
然后我就可以对文件系统进行读/写访问。复制速度超过 5 MB/s。sudo guestmount -a /path/to/some.qcow2 -i --rw /path/to/tempdir
- 卸载:
guestunmount /path/to/tempdir