如何挂载 qcow2 镜像

onl*_*egg 16 qemu loop-device nbd

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

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

mal*_*loo 22

感谢 Gilles 指出guestmount。在 RHEL/Centos/Fedora 上挂载 qcow2 镜像非常简单:

  1. 首先安装guestmount(作为Centos6中libguestfs-tools的一部分)

    yum install libguestfs-tools libguestfs
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后你应该能够使用 -i 选项自动神奇地挂载你的 qcow2 图像

    guestmount -a path_to_image.qcow2 -i --ro /mount_point
    
    Run Code Online (Sandbox Code Playgroud)

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

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


eri*_*111 15

步骤 1 - 在主机上启用 NBD

modprobe nbd max_part=8
Run Code Online (Sandbox Code Playgroud)

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

qemu-nbd --connect=/dev/nbd0 /var/lib/vz/images/100/vm-100-disk-1.qcow2
Run Code Online (Sandbox Code Playgroud)

步骤 3 - 列出 QCOW2 内的分区

fdisk /dev/nbd0 -l
Run Code Online (Sandbox Code Playgroud)

步骤 4 - 从 VM 挂载分区

mount /dev/nbd0p1 /mnt/somepoint/
Run Code Online (Sandbox Code Playgroud)

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

mount /dev/nbd0p1 /mnt/somepoint -o uid=$UID,gid=$(id -g)
Run Code Online (Sandbox Code Playgroud)

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

umount /mnt/somepoint/
qemu-nbd --disconnect /dev/nbd0
rmmod nbd
Run Code Online (Sandbox Code Playgroud)

可耻地窃取自:https : //gist.github.com/shamil/62935d9b456a6f9877b5

  • :) 我是这个要点的作者。感谢分享... (3认同)

Pet*_*ter 11

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

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

qemu-img convert -p -O raw oldfile.qcow2 newfile.raw
Run Code Online (Sandbox Code Playgroud)

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

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

  • guestmount 是最简单的方法!它在引擎盖下安装了一个虚拟机,但它都被整齐地包裹起来。 (4认同)