当前glance镜像通过虚拟机安装好系统后,一般静态的放在glance的镜像服务器上。但是如果因为应用或者镜像制作有点小的偏差,比如修改/etc下软件的配置等,一般的方法是从新把镜像拷贝到openstack计算节点上,用该镜像文件创建虚拟机,修改完成后,再把镜像拷贝到镜像服务器上,如果镜像很大,整过过程会有很大的人力和资源开销。
现在提供一种非常简便的方法,因为一般在kvm环境中,glance的镜像格式一般为raw或者qcow2,qemu工具链中提供了qemu-nbd,qemu-nbd可以将镜像文件与内核nbd设备关联,这样把nbd设备mount,就可以看到镜像内部的全部信息,将需要修改的文件进行修改,完成后进行umount,然后用qemu-nbd将nbd设备与镜像文件解关联,省去了镜像拷贝,虚拟机启动等一系列操作。
环境说明:系统:CentOS-7.2,内核版本:3.10.0-327.el7.x86_64
1、内核nbd设备支持
当前在CentOS-7.2中,默认是没有nbd的内核模块,可以通过 modinfo nbd 查看一下,如果没有,可参考 http://purplepalmdash.github.io/blog/2015/08/13/build-nbd-kernel-module-on-centos7/ 进行手动编译nbd内核模块,这里就不在叙述.
2、qemu-nbd工具
查看一下系统中是否有qeme-nbd命令,如果有则跳过该步,因为qemu-nbd在qemu-img包中,可通过yum安装
# yum install qemu-img -y
3、设备关联
将镜像与nbd设备关联
# ls -al /var/lib/glance/images/
选取第一个镜像053ca6a0-8268-4a4a-84ab-5850b4dbaf13为例
# qemu-nbd --connect=/dev/nbd0 /var/lib/glance/images/053ca6a0-8268-4a4a-84ab-5850b4dbaf13
查看关联的设备,如果镜像中有存在分区,那么会出现/dev/nbd0p1的分区设备,如下图:
挂在分区
# mount /dev/nbd0p1 /mnt/
# ls -al /mnt
会发现/mnt目录下的内容均是镜像文件中的内容,接下来就是去修改想要修改的文件即可
完成后umount
# umount /mnt
解关联nbd设备与镜像文件
# qemu-nbd -d /dev/nbd0
整个过程操作完成,是不是很方便 :-)