Openstack glance镜像格式

稀疏文件

稀疏文件特性就是文件系统会把分配的空字节文件记录在元数据中,而不会实际占用磁盘空间。因此如果你创建了一个100G的稀疏文件,ls看到的是分配的大小,可见是100G,但是用du看到的是实际使用的大小,可见文件会很小。

1
2
3
4
5
6
7
8
# dd if=/dev/zero of=100G.img bs=1G seek=100 count=0
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000193969 s, 0.0 kB/s
# ls -lh 100G.img
-rw-r--r-- 1 root root 100G Sep 29 10:57 100G.img
# du -sh 100G.img
0 100G.img

通过truncate命令可随意调整稀疏文件大小

1
2
3
4
5
# truncate -s 1T 100G.img
# ls -lh 100G.img
-rw-r--r-- 1 root root 1.0T Sep 29 11:00 100G.img
# du -sh 100G.img
0 100G.img

Qcow2

Qcow2 是 QEMU 目前推荐的镜像格式,它支持稀疏文件特性以节省存储空间,支持加密以提高镜像文件的安全性,支持基于zlib的压缩。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# qemu-img create -f qcow2 100G.qcow2 100G
Formatting '100G.qcow2', fmt=qcow2 size=107374182400 encryption=off cluster_size=65536 lazy_refcounts=off
# qemu-img info 100G.qcow2
image: 100G.qcow2
file format: qcow2
virtual size: 100G (107374182400 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
# ls -lh 100G.qcow2
-rw-r--r--. 1 root root 194K Sep 29 11:17 100G.qcow2
# du -sh 100G.qcow2
196K 100G.qcow2

Qcow2 镜像可以用来保存另一个镜像文件的变化,它并不去修改原始镜像文件,原始镜像文件也叫后端镜像(backing_file)。只记录与原始镜像文件的不同部分的镜像文件,这种镜像文件就叫做copy-on-write镜像,它虽然是一个单独的镜像文件,但它的大部分数据都来自原始镜像,只有基于原始镜像文件的增量部分才会被记录下来。

后端镜像(backing_file)

当指定boot from image创建了虚拟机时,nova-compute首先检查该image是否已经存在本地,没有则从glance中下载。如果image是qcow2格式则将它转化为raw格式作为backing_file,再创建一个qcow2文件作为instance disk。
而后续继续使用同一个image创建虚拟机时,将直接使用同一个backing_file,从而缩短了创建虚拟机的时间。其中_base目录下面的文件,就是后端镜像(backing_file),目录”3090e7b3-5808-4910-b1d5-a8e53d0b66f5”下面是虚拟机单独的增量镜像文件,它只记录和 backing_file文件不同的内容。

缺点多台使用同一后端镜像的实例同时启动的时候,IO压力大,尤其是第一次启动的时候

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# tree /var/lib/nova/instances
+-- 3090e7b3-5808-4910-b1d5-a8e53d0b66f5
| +-- console.log
| +-- disk
| +-- disk.info
| +-- libvirt.xml
+-- _base
+-- 068628d42926713f2a7bfa9430fd1bcbab7c12c4
+-- 20c23c3f213f4cbb34ef3e7cdc8253eddc7ad320
+-- 7844a85f91aaada34f8d0d62d5db6b6b08517a65
+-- aa1a1635e077584029833facc16e8ba2223f76d4
# qemu-img info /var/lib/nova/instances/3090e7b3-5808-4910-b1d5-a8e53d0b66f5/disk
image: /var/lib/nova/instances/3090e7b3-5808-4910-b1d5-a8e53d0b66f5/disk
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 3.0G
cluster_size: 65536
backing file: /var/lib/nova/instances/_base/bb8a4ff352b1f3261e0f5d4c056cf1b1fca9cb95
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
# qemu-img info /var/lib/nova/instances/_base/bb8a4ff352b1f3261e0f5d4c056cf1b1fca9cb95
image: /var/lib/nova/instances/_base/bb8a4ff352b1f3261e0f5d4c056cf1b1fca9cb95
file format: raw
virtual size: 40G (42949672960 bytes)
disk size: 9.3G

RAW

raw格式是原始镜像,一次性会把分配的磁盘空间占用,支持稀疏文件特性。

1
2
3
4
5
6
7
8
9
10
11
# qemu-img create -f raw 100G.raw 100G
Formatting '100G.raw', fmt=raw size=107374182400
# qemu-img info 100G.raw
image: 100G.raw
file format: raw
virtual size: 100G (107374182400 bytes)
disk size: 0
# ls -lh 100G.raw
-rw-r--r--. 1 root root 100G Sep 29 11:10 100G.raw
# du -sh 100G.raw
0 100G.raw

raw格式与qcow2转化

1
# qemu-img convert -f raw -O qcow2 centos75.img raw2 centos75.qcow2
坚持原创技术分享,您的支持将鼓励我继续创作!
0%