kvm虚拟机中需要选择磁盘镜像的格式,通常的选择有两种,一种是raw镜像格式,一种是qcow2格式。 raw格式是原始镜像,会直接当作一个块设备给虚拟机来使用,至于文件里面的空洞,则是由宿主机的文件系统来管理的,linux下的文件系统可以很好的支持空洞的特性,所以,如果你创建了一个100G的raw格式的文件,ls看的时候,可以看到这个文件是100G的,但是用du 来看,这个文件会很小。 qcow2是kvm支持的磁盘镜像格式,我们创建一个100G的qcow2磁盘之后,无论用ls来看,还是du来看,都是很小的。这说明了,qcow2本身会记录一些内部块分配的信息的。 无论哪种格式,磁盘的利用率来说,都是一样的,因为实际占用的块数量都是一样的。但是raw的虚拟机会比qcow2的虚拟机IO效率高一些,实际测试的时候会比qcow2高25%,这个性能的差异还是不小的,所以追求性能的同学建议选raw。 raw唯一的缺点在于,ls看起来很大,在scp的时候,这会消耗很多的网络IO,而tar这么大的文件,也是很耗时间跟CPU的,一个解决方法是,把raw转换成qcow2的格式,对空间压缩就很大了。而且速度很快。转换命令如下:
qemu-img convert -p -t directsync -O qcow2 test.raw test.qcow2 qemu-img convert -p -t directsync -O raw test.qcows test.raw
raw 原始的磁盘镜像格式,也是qemu-img命令默认的文件格式。 优点:非常简单且非常容易移植到其他模拟器(emulator,QEMU也是一个emulator)上使用。如果客户机文件系统(如Linux上的ext2/ext3/ext4、Windows的NTFS)支持“空洞”(hole),那么镜像文件只有在被写有数据的扇区才会真正占用磁盘空间,从而起到节省磁盘空间的作用,就如前面用”qemu-img info”命令查看镜像文件信息中看到的那样。qemu-img默认的raw格式的文件其实是稀疏文件(sparse file ),前面“安装客户机”中使用”dd”命令创建的镜像也是raw格式,不过那是一开始就让镜像实际占用了分配的空间,而没有使用稀疏文件的方式对待空洞来节省磁盘空间。
尽管一开始就实际占用磁盘空间的方式没有节省磁盘的效果,不过这种方式在写入新的数据时不需要宿主机从现有磁盘空间中分配,因此在第一次写入数据时,这种方式的性能会比稀疏文件的方式更好一点。
(3) qcow2
qcow2是QEMU目前推荐的镜像格式,它是功能最多的格式。 支持稀疏文件(即支持空洞)以节省存储空间, 支持可选的AES加密以提高镜像文件安全性, 支持基于zlib的压缩,支持在一个镜像文件中有多个虚拟机快照
raw格式是最简单,什么都没有,所以叫raw格式。连头文件都没有,就是一个直接给虚拟机进行读写的文件。raw不支持动态增长空间,必须一开始就指定空间大小。 raw镜像格式是虚拟机种I/O性能最好的一种格式,大家在使用时都会和raw进行参照,性能越接近raw的越好
qcow2是集各种技术为一体的超级镜像格式,支持内部快照,加密,压缩等一系列功能,访问性能也在不断提高
该格式是目前很多开源虚拟化软件的首选格式,原因很简单,因为其snapshot快照的支持。该格式具有如下特点:
更小的存储空间,即使是不支持holes的文件系统也可以(这下du -h和ls -lh看到的就一样了) Copy-on-write support, where the image only represents changes made to an underlying disk image(这个特性SUN ZFS表现的淋漓尽致) 支持多个snapshot,对历史snapshot进行管理 支持zlib的磁盘压缩 支持AES的加密
qcow2 格式的文件虽然在性能上比rRaw 格式的有一些损失(主要体现在对于文件增量上,qcow2 格式的文件为了分配 cluster 多花费了一些时间),但是 qcow2 格式的镜像比 Raw 格式文件更小,只有在虚拟机实际占用了磁盘空间时,其文件才会增长,能方便的减少迁移花费的流量,更适用于云计算系统,同时,它还具有加密,压缩,以及快照等 raw 格式不具有的功能。
raw不支持动态增长空间,必须一开始就指定空间大小。所以相当的耗费磁盘空间。但是对于支持稀疏文件的文件系统(如ext4)而言,这方面并不突出。