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格式即可。