raw格式的鏡像,如何在網絡傳輸、備份時減少拷貝

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章