onl*_*egg 16 qemu loop-device nbd
我读过 qemu-nbd 和网络块设备内核模块,我可以挂载 qcow2 映像。我还没有看到任何关于通过循环设备安装 qcow2 的教程。是否可以?如果不是,为什么?
我不太明白 qcow2 和 iso 之间的区别。
mal*_*loo 22
感谢 Gilles 指出guestmount。在 RHEL/Centos/Fedora 上挂载 qcow2 镜像非常简单:
首先安装guestmount(作为Centos6中libguestfs-tools的一部分)
yum install libguestfs-tools libguestfs
Run Code Online (Sandbox Code Playgroud)然后你应该能够使用 -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
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 启动一样,也很容易。转换没有多大意义……这只是它们不同之处的一个例子。