raw 格式的镜像,不带matadata,就像一块空白的磁盘,读写效率比qcow2快近10~30%。
本文探讨下,在将这个镜像进行网络传输备份时,如何减少数据拷贝。如果一个近50G大小的文件在网络中进行传输的话,即占用带宽,拷贝花的时间也是比较漫长的。
1. 看看创建raw镜像的一些参数
root@test:~# qemu-img create -f raw a.img -o ?
Supported options:
size Virtual disk size
nocow Turn off copy-on-write (valid only on btrfs)
preallocation Preallocation mode (allowed values: off, falloc, full)
An image with preallocated metadata is initially larger but can improve performance when the image needs to grow. Full preallocation additionally writes zeros to the whole image in order to preallocate lower layers。
为了提高读写效率,通常会打开这个preallocation开关。
2. 创建raw镜像
1). 创建raw格式的镜像
qemu-img create -f raw a.img 10M
qemu-img create -f raw b.img -o size=10M -preallocation=full
2). qemu-img info查看信息
1). 创建raw格式的镜像
qemu-img create -f raw a.img 10M
qemu-img create -f raw b.img -o size=10M -preallocation=full
2). qemu-img info查看信息
image: a.img
file format: raw
virtual size: 10M (10485760 bytes)
disk size: 0
image: b.img
file format: raw
virtual size: 10M (10485760 bytes)
disk size: 10M
3). ls -l 和 du -sh 查看信息
ls -l
-rw-r--r--. 1 root root 10485760 Oct 17 10:59 a.img
-rw-r--r--. 1 root root 10485760 Oct 17 10:59 b.img
du -sh a.img du -sh b.imb
0 a.img 10M b.img
4). 通过ftp download分别下载a.img和b.img到本地
本地生成文件的文件都是10M
3. 通过将镜像raw格式转换成qcow2格式,将生成的qcow2通过ftp传输到本地,然后再重新将转换回raw格式
1). qemu-img转换成qcow格式
qemu-img convert -p -f raw -t writethrough -O qcow2 a.img a1.img
qemu-img convert -p -f raw -t writethrough -O qcow2 b.img b1.img
2). qemu-img info查看信息
image: a1.img
file format: qcow2
virtual size: 10M (10485760 bytes)
disk size: 196K
image: b1.img
file format: qcow2
virtual size: 10M (10485760 bytes)
disk size: 196K
3). ls -l 和 du -sh 查看信息
-rw-r--r--. 1 root root 197120 Oct 17 11:12 a1.img
-rw-r--r--. 1 root root 197120 Oct 17 11:12 b1.img
du -sh a1.img du -sh b1.imb
196k a1.img 196k b1.img
4). 通过ftp download分别下载a1.img和b1.img到本地
本地生成文件的文件都是196k
5). qemu-img重新转换成raw格式
qemu-img convert -p -f qcow2 -t writethrough -O raw a1.img a2.img
qemu-img convert -p -f qcow2 -t writethrough -O raw b1.img b2.img
6). qemu-img info查看信息
image: a2.img
file format: raw
virtual size: 10M (10485760 bytes)
disk size: 0
image: b2.img
file format: raw
virtual size: 10M (10485760 bytes)
disk size: 0
7). ls -l 和 du -sh 查看信息
ls -l
-rw-r--r--. 1 root root 10485760 Oct 17 10:59 a2.imgr
-rw-r--r--. 1 root root 10485760 Oct 17 10:59 b2.img
du -sh a.img du -sh b.imb
0 a.img 0 b.img
4. 结论:
raw格式的镜像文件,如果文件系统支持文件空洞,镜像文件里的空洞不占分配磁盘空间,
不过网络传输并不会这样处理,还是按照virtual的大小进行传输。
可以通过将raw格式转换成qcow格式,再通过网络传输这个qcow镜像,这样就避免了传输
这些空洞,最后再转换回raw格式即可。