两个月前,写了一篇“如何挂载一个镜像文件”,当时没有把qcow2的挂载方法写进入,刚好一个博友留言提到qcow2了,就再一小篇关于mount qcow2格式的客户机镜像吧。QCOW2是目前QEMU(qemu-kvm)推荐使用的guest镜像文件格式,在KVM、Xen虚拟化中的使用都是比较广泛的。
可以使用qemu自带的一个工具qemu-nbd来挂载一个客户机,具体步骤如下:
(qemu-nbd 在普通的QEMU编译和安装后也会得到qemu-nbd工具,在Fedora中好像在“qemu-common”这个RPM包中。)
1. 首先检查当前系统的kernel对NBD模块的支持(NBD:network block device),加载nbd这个module,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@jay-linux kvm_demo]# grep NBD /boot/config-3.5.0 CONFIG_BLK_DEV_NBD=m [root@jay-linux kvm_demo]# modinfo nbd filename: /lib/modules/3.5.0/kernel/drivers/block/nbd.ko license: GPL description: Network Block Device srcversion: 56F31584CC2EB73E6F1DA69 depends: intree: Y vermagic: 3.5.0 SMP mod_unload modversions parm: nbds_max:number of network block devices to initialize (default: 16) (int) parm: max_part:number of partitions per device (default: 0) (int) parm: debugflags:flags for controlling debug output (int) [root@jay-linux kvm_demo]# modprobe nbd max_part=16 [root@jay-linux kvm_demo]# lsmod | grep nbd nbd 7593 0 |
如果当前kernel没有编译好nbd模块,则需要重新编译该模块(或编译整个kernel),在编译kernel时,“make menuconfig”配置kernel时中选择"Device Drivers --> Block devices --> Network block device support".
2. 将qcow2镜像映射为网络块设备(nbd),命令如下:
1 2 3 4 5 |
[root@jay-linux kvm_demo]# qemu-nbd -c /dev/nbd0 rhel6u3.qcow2 [root@jay-linux kvm_demo]# ll /dev/nbd0* #这里查看一下 brw-rw---- 1 root disk 43, 0 Nov 1 20:51 /dev/nbd0 brw-rw---- 1 root disk 43, 1 Nov 1 20:51 /dev/nbd0p1 brw-rw---- 1 root disk 43, 2 Nov 1 20:51 /dev/nbd0p2 |
qemu-nbd工具是:QEMU Disk Network Block Device Server,可以用"qemu-nbd --help”命令查看其帮助信息。
3. 像普通block设备那样使用刚才映射好的网络块设备的分区即可,命令行如下:
1 2 3 4 5 6 7 |
[root@jay-linux kvm_demo]# mount /dev/nbd0p1 /mnt/ [root@jay-linux kvm_demo]# cd /mnt/ [root@jay-linux mnt]# ls bin cgroup etc lib lost+found misc net proc sbin srv tmp var boot dev home lib64 media mnt opt root selinux sys usr [root@jay-linux mnt]# cd root/ [root@jay-linux root]# touch nbd-test.txt #这里建立一个文件测试一下,若用这个qcow2 image作为guest启动后也可以看到改文件。 |
4. 使用完这个qcow2镜像后,卸载已挂载的nbd设备,解除qcow2镜像与nbd设备的关联。
1 2 3 |
[root@jay-linux kvm_demo]# umount /mnt/ [root@jay-linux kvm_demo]# qemu-nbd -d /dev/nbd0 /dev/nbd0 disconnected |
如果你的qcow2文件里面有LVM分区,请参考我如下博客文章的后半部分(关于LVM分区的挂载):
如果想了解Linux上NBD的基本知识,可以查看如下网页:
http://nbd.sourceforge.net/
如果镜像文件是一个 XP、win7 镜像盘,文件系统格式是 ntfs ,这时候mount /dev/nbd0p1 /mnt/这一步会失败
NTFS的mount,好像是需要额外的软件包,看下我的这个博客,能否解决你的问题:
http://smilejay.cn/2012/10/linux-mount-ntfs/
您好, 我是您的qemu这本书的忠实读者,在按您所说的进行操作,出现如下问题:
执行完这步骤, qemu-nbd -c /dev/nbd0 rhel6u3.qcow2
当我ls的时候,
[root@jay-linux kvm_demo]# ll /dev/nbd0*
brw-rw---- 1 root disk 43, 0 Nov 1 20:51 /dev/nbd0
只出现了一条,其他的没有挂上去。 不知道是怎么一回事。
谢谢!
你好,你这个qcow2文件是一个增量文件吗(就是你后台还有一个真是的imgage吗)? 我记得当时做的时候,就时qcow2的普通的imgage。 另外,你确认下 “modprobe nbd max_part=16” 是做成功了的。
没有这个模块啊
仔细我的这篇博客即可,估计时你的kernel没有配置这个module 或者 已经built-in了。
你好,我没有qemu-nbd这个命令,能否提供这样的一个RPM包,centos6.4
或者还有没有其他的挂载方式,感谢
qemu-kvm这个包中可能有;或者自己找qemu的源码来自己编译。