Openstack中虚拟机镜像格式的选择
声明:
本博客欢迎转发
内容系本人学习, 研究和总结,有些使摘抄自互联网,如有雷同,实属荣幸.
虚拟机硬盘格式比较
1. raw
raw格式是最简单,什么都没有,所以叫raw格式。连头文件都没有,就是一个直接给虚拟机进行读写的文件。raw不支持动态增长空间,必须一开始就指定空间大小。所以相当的耗费磁盘空间。但是对于支持稀疏文件的文件系统(如ext4)而言,这方面并不突出。ext4下默认创建的文件就是稀疏文件,所以不要做什么额外的工作。
raw镜像格式是虚拟机种I/O性能最好的一种格式,大家在使用时都会和raw进行参照,性能越接近raw的越好。但是raw没有任何其他功能。对于稀疏文件的出现,像qcow这一类的运行时分配空间的镜像就没有任何优势了。 Raw 的优势
- 简单,并能够到处为其他虚拟机虚拟硬盘格式
- 根据实际使用量来占用空间,而非设定的最大值(需要宿主支持hole)
- 能够被宿主机挂载, 不用开虚拟机即可在宿主和虚拟机间进行数据传输
2. qcow2
现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能. 与普通的raw格式的镜像相比,有以下的特性:
- 更小的空间占用,即使文件系统不支持空洞(holes);
- 支持写时拷贝(COW, copy-on-write),镜像文件只反映底层磁盘的变化;
- 支持快照(snapshot),镜像文件能够包含多个快照的历史;
- 可选择基于 zlib 的压缩方式
- 可以选择 AES 加密
3. raw格式和qcow2格式的转化
raw –> qcow2
1
# qemu-img convert -f raw -O qcow2 centos.raw centos.qcow2
qcow2 –> raw
1
# qemu-img convert -f qcow2 -O raw centos.qcow2 centos.raw
4. 总结
通过以上分析,我们很难分别出到底那种格式更好.
Openstack中的使用
实际使用分析
我们使用的Openstack环境后端配置Ceph作为统一的共享存储, Glance和Cinder都使用Ceph的RBD后端, 这个时候从image转化为volume的时候,如果使用raw格式,支持copy-on-write的克隆, volume的创建速度为秒级. 而如果镜像格式使用qcow2格式,需要先下载到local,然后转化为raw格式,在上传的cinder后端中,时间上慢了许多.
使用raw格式的镜像创建虚机的时候比qcow2格式的镜像也快了许多.
快照. 在Openstack对虚机进行快照是全量快照.创建后的快照格式也是raw格式的. 对云硬盘的快照使用的rbd的copy on write.
虚拟机创建过程中镜像格式的变化
内容参考 OpenStack虚拟机创建过程中镜像格式的的变化过程
总结
综上可以看出使用raw格式的镜像格式比qcow格式的在虚机创建, cinder convert image to volume方面要快许多,同时因为Ceph统一存储rbd clone特性,在创建虚机的过程中,虚机使用的存储空间也会小许多.有理由相信raw格式使更好的选择.