qcow2 与 raw镜像文件比较

qcow2 的基本原理

qcow2 镜像格式是 QEMU 模拟器支持的一种磁盘镜像。它也是可以用一个文件的形式来表示一块固定大小的块设备磁盘。与普通的 raw 格式的镜像相比,有以下特性:

  1. 更小的空间占用,即使文件系统不支持空洞(holes);
  2. 支持写时拷贝(COW, copy-on-write),镜像文件只反映底层磁盘的变化;
  3. 支持快照(snapshot),镜像文件能够包含多个快照的历史;
  4. 可选择基于 zlib 的压缩方式
  5. 可以选择 AES 加密

Copy-on-Write 镜像文件

qcow2 镜像可以用来保存另一个镜像文件的变化,它并不去修改原始镜像文件,只记录与原始镜像文件的不同即可,这种镜像文件就叫做 copy-on-write 镜像。虽然是一个单独的文件,但它的大部分的数据都来自原始镜像,只有跟原始镜像文件相比有变化的 cluster 才会被记录下来。
这很容易去实现,在头部信息中记录原始文件路径即可。当需要从一个 copy-on-write 镜像文件中读取一个 cluster 的时候,首先检查这块区域是否已经在该镜像文件中被分配,如果没有就从原始文件读取。

快照

快照有些类似 Copy-On-Write 文件,但区别是快照是一个可写的。快照就是原始文件本身(内部快照)。它既包含做快照之前的原始文件部分,它本身也包含可写的部分。


创建 qcow2 和 raw 文件以及两种镜像的对比

使用 QEMU 软件包自带的 qemu-img 软件创建 qcow2 文件。

$ qemu-img create -f qcow2 test.qcow2 10G
Formatting 'test.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off

$ qemu-img create -f raw test.raw 10G
Formatting 'test.raw', fmt=raw size=10737418240

对比两种格式的文件的实际大小以及占用空间大小如下:

$ls -hl
-rw-r--r-- 1 root root 193K 10月 13 11:13 test.qcow2
-rw-r--r-- 1 root root  10G 10月 13 11:14 test.raw
$ stat test.raw 
  文件:"test.raw"
  大小:10737418240	块:0          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:1517926     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)...
$ stat test.qcow2
  文件:"test.qcow2"
  大小:197120    	块:392        IO 块:4096   普通文件
设备:fd00h/64768d	Inode:2567962     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)  ...

从对比中可以看出 qcow 格式的镜像文件大小位 197120 字节,占用空间为 200K,占用了 200 块磁盘空间。而 raw 格式的文件则没有占用磁盘空间,它是一个空洞文件。

Raw 格式与 qcow2 转化

将 raw 格式转化为 qcow2 格式的文件命令如下:

$qemu-img convert -f raw -O qcow2 test.raw test.raw.qcow2

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
永久连接: http://www.nfvschool.cn/?p=315
标签:

发表评论