本文对qemu支持的镜像文件进行简单的介绍。
qemu-img支持非常多种的文件格式,可以通过“qemu-img -h”查看其命令帮助得到,它支持20多种格式:file,quorum,blkverify,luks,dmg,sheepdog,parallels,nbd,vpc,bochs,blkdebug,qcow2,vvfat,qed,host_cdrom,cloop,vmdk,host_device,qcow,vdi,null-aio,blkreplay,null-co,raw等。
下面对其中的几种文件格式做简单的介绍。
-
raw
原始的磁盘镜像格式,也是qemu-img命令默认的文件格式。这种格式的文件的优势在于它非常简单,且非常容易移植到其他模拟器(emulator,QEMU也是一个emulator)上去使用。如果客户机文件系统(如Linux的ext2/ext3/ext4、Windows的NTFS)支持“空洞”(hole),那么镜像文件只有在被写有数据的扇区才会真正占用磁盘空间,从而节省磁盘空间,就如前面用“qemu-img info”命令查看镜像文件信息中看到的那样。qemu-img默认的raw格式的文件其实是稀疏文件(sparse file),可以用preallocation参数=full来禁用稀疏文件方式而完全预分配空间。尽管一开始就实际占用磁盘空间的方式没有节省磁盘的效果,不过这种方式在写入新的数据时不需要宿主机从现有磁盘中分配空间,因此在第一次写入数据时,这种方式的性能会比稀疏文件的方式更好一点。
raw格式只有一个参数选项:preallocation。它有3个值:off,falloc,full。off就是禁止预分配空间,即采用稀疏文件方式,这是默认值。falloc是qemu-img创建镜像时候调用posix_fallocate()函数来预分配磁盘空间给镜像文件(但不往其中写入数据,所以也能瞬时完成)。full是除了实实在在地预分配空间以外,还逐字节地写0,所以很慢。 -
qcow2
qcow2是QEMU目前推荐的镜像格式,它是使用最广、功能最多的格式。它支持稀疏文件(即支持空洞)以节省存储空间,它支持可选的AES加密以提高镜像文件安全性,支持基于zlib的压缩,支持在一个镜像文件中有多个虚拟机快照。
在qemu-img命令中,qcow2支持如下几个选项:
- size,指定镜像文件的大小。等同于qemu-img create-f fmt<文件名>size。
- compat(兼容性水平,compatibility level),可以等于0.10或者1.1,表示适用于0.10版本以后的QEMU,或者是1.1版本以后的QEMU。
- backing_file,用于指定后端镜像文件。
- backing_fmt,设置后端镜像的镜像格式。
- cluster_size,设置镜像中簇的大小,取值为512B~2MB,默认值为64kB。较小的簇可以节省镜像文件的空间,而较大的簇可以带来更好的性能,需要根据实际情况来平衡。一般采用默认值即可。
- preallocation,设置镜像文件空间的预分配模式,其值可为off、falloc、full、metadata。前3种与raw格式的类似,metadata模式用于设置为镜像文件预分配metadata的磁盘空间,所以这种方式生成的镜像文件稍大一点,不过在其真正分配空间写入数据时效率更高。生成镜像文件的大小依次是off<metadata<falloc=full,性能上full最好,其他3种依次递减。
- encryption,用于设置加密,该选项将来会被废弃,不推荐使用。对于需要加密镜像的需求,推荐使用Linux本身的Linux dm-crypt/LUKS系统。
- lazy_refcounts,用于延迟引用计数(refcount)的更新,可以减少metadata的I/O操作,以达到提高performance的效果。适用于cache=writethrough这类不会自己组合metadata操作的情况。它的缺点是一旦客户机意外崩溃,下次启动时会隐含一次qemu-img check-rall的操作,需要额外花费点时间。它是当compact=1.1时才有的选项。
- refcount_bits,一个引用计数的比特宽度,默认为16。
- qcow
这是较旧的QEMU镜像格式,现在已经很少使用了,一般用于兼容比较老版本的
QEMU。它支持size、backing_file(后端镜像)和encryption(加密)3个选项。 - vdi
兼容Oracle(Sun)VirtualBox1.1的镜像文件格式(Virtual Disk Image)。 - vmdk
兼容VMware 4版本以上的镜像文件格式(Virtual Machine Disk Format)。 - vpc
兼容Microsoft的Virtual PC的镜像文件格式(Virtual Hard Disk format)。 - vhdx
兼容Microsoft Hyper-V的镜像文件格式。
参考
KVM实战:原理、进阶与性能调优