如何挂载qcow2磁盘镜像?

我有一个使用qcow2磁盘镜像的QEMU虚拟机。

如何在不启动虚拟机的情况下挂载其文件系统?

4个回答

通过快速的谷歌搜索,可以找到qemu-nbd 程序,这里提到了这里。 它是qemu-kvm 包的一部分,所以如果你还没有使用它,需要安装 KVM。不确定是否有任何直接的 GNOME/KDE 解决方案,如果那正是你寻找的。以下是一个使用它的示例:
sudo modprobe nbd
sudo qemu-nbd -c /dev/nbd0 --read-only /path/to/image.qcow2
udisksctl mount -b /dev/nbd0p1

3看起来 qemu-nbd 是最好的选择,只要我记得先运行 modprobe nbd。如果没有加载这个模块,qemu-nbd默默地失败! - ændrük
很不幸。无论如何,你应该能够将nbd添加到/etc/modules中。 - Tim Yates
1我写了一个小工具来处理这个:https://github.com/JonathonReinhart/qcow2-explore - Jonathon Reinhart
qemu-nbdqemu-utils软件包的一部分,所以无需安装KVM。 - myrdd
我必须赞赏这个非常好的、简单而又有力的回答。它帮助我在几分钟内解决了我的问题。谢谢Tim Yates。 - ivo

还有一个叫做libguestfs的工具,但它目前还没有在官方软件仓库中提供1。不过你可以在libguestfs.org找到相关的二进制文件。

2虽然libguestfs看起来很不错,但它非常庞大。它有大量的依赖项(推荐使用55个依赖项,并安装整个supermin应用程序。 - Stefan Lasiewski

xmount可以让一些虚拟机的磁盘镜像看起来像是原始磁盘(然后可以使用losetup对其进行分区,并挂载分区)。但我不知道它是否支持qcow2格式。

1xmount手册指出只能使用EWF和原始磁盘映像。 - ændrük

你可以像普通挂载一样直接挂载它

mount /dev/sdb1 /mount-point

但是如果你有n个设备,意味着你想要将它们重新挂载到另一个目录中,你可以按照以下步骤进行操作:
从原始镜像中挂载分区非常简单:
losetup /dev/loop0 image.img
kpartx -a /dev/loop0
mount /dev/mapper/loop0p1 /mnt/image

3一个qcow2镜像不是原始镜像,也不能通过这两种方法之一进行挂载。 - Twirrim