qemu/kvm支持的一些磁盘映像格式
磁盘映像的格式有:
raw:raw磁盘格式(默认)。这种格式有简单并且易于移植到其他模拟器的优点。如果我们的文件系统支持holes(例如在Linux上的ext2或是ext3),然后只有写入的部分保持空白。使用qemu-img info来得到映像,使用的实际大小或是在unix/linux上使用ls -ls.
qcow:qemu映像格式,这是最通用的格式,使用它可以获得较小的映像(如果我们 的文件系统不支持holes,例如在Windows上,这是相当有用的),可以 选用AES加密或是基于zlib的压缩.
cow:在写映像格式上的用户模式的Linux拷贝.在QEMU中作为增长的映像 格式使用.这个选项只是为了与以前版本的兼容,并不能在Win32上使用.
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 -O qcow2 disk.raw disk.qcow2
qemu-img convert -O raw disk.qcow2 disk.raw
这样转换所消耗的时间远比tar.gz小。
应该是qemu-img会直接读取文件的元数据,而tar只会傻傻的跟操作系统要文件数据的关系吧^_^