qemu 磁盤格式cow、raw

在介紹cow與raw格式前,先看以下操做,經過ll -l與 du  查看一個磁盤鏡像的大小,結果以下node

[root@localhost d9907fa5-641b-4d52-80e6-c8c5262f6f94]# ll -l cbbb29b4-cd7f-4a12-ace7-ecfe39158cf8
-rw-rw----. 1 vdsm kvm 1073741824 Nov  2 09:18 cbbb29b4-cd7f-4a12-ace7-ecfe39158cf8
[root@localhost d9907fa5-641b-4d52-80e6-c8c5262f6f94]# du -s cbbb29b4-cd7f-4a12-ace7-ecfe39158cf8
0    cbbb29b4-cd7f-4a12-ace7-ecfe39158cf8

ll 顯示的是1G,而du顯示的是0。linux

            這與咱們一般的理解有點誤差,通常咱們會認爲ls的結果會比du的結果要小一點。由於佔用空間取決於文件系統的塊(block)的大小,linux通常默認是4k(4096),所以,一個大小爲1個字節的文件,最小也要佔用4k,若是你建立文件系統的時候制定塊大小是16K,那麼即使一個文件只有1個字節,佔用空間也是16K。而  du顯示的size是文件在硬盤上佔據了多少個block計算出來的。ls顯示文件的「邏輯上」的size,而du顯示文件「物理上」的size。不過注意的是 ls -s 執行的效果與du同樣,反應磁盤分配狀況,非實際文件大小,以block爲單位,ls  -s  == du。以下,ll 反應的大小爲"邏輯"佔用的大小, 而du反應的"物理"上的大小。工具

 寫一個字符到一個文件中,看其大小性能

[root@localhost d9907fa5-641b-4d52-80e6-c8c5262f6f94]# echo -n 1 > 1B.txt
[root@localhost d9907fa5-641b-4d52-80e6-c8c5262f6f94]# ll 1B.txt 
-rw-r--r--. 1 root root 1 Nov  2 09:47 1B.txt
[root@localhost d9907fa5-641b-4d52-80e6-c8c5262f6f94]# du -s 1B.txt 
4	1B.txt

          你們如今有點疑惑了,那究竟是怎麼一回事呢?  優化

          虛擬機鏡像文件保存了虛擬機硬盤的所有信息,按照數據存儲方式的不一樣,能夠分爲兩種模式:全鏡像模式(FlatMode)和稀疏模式(SparseMode)。全鏡像模式保存了虛擬硬盤中的全部字節數據,其中也包括對用戶而言無效的數據;raw格式就是全鏡像模式。稀疏模式只保存對用戶和文件系統有效的數據,只佔用必要的存儲空間,這種模式的鏡像文件在存放數據時使用的可能不是連續的物理磁盤空間;ui

           接着分析,上面圖1的結果,由於磁盤格式是raw的,可是其type是 sparse,也就是稀疏文件。稀疏文件指文件中有「洞」(hole)的文件。咱們經過qemu 中提供的工具查看該磁盤的信息。以下, ls看到就是 virtual size,而du看到的是磁盤的大小。加密

[root@localhost d9907fa5-641b-4d52-80e6-c8c5262f6f94]# qemu-img info cbbb29b4-cd7f-4a12-ace7-ecfe39158cf8

image: cbbb29b4-cd7f-4a12-ace7-ecfe39158cf8
file format: raw
virtual size: 1.0G (1073741824 bytes)
disk size: 0

一樣咱們對這個磁盤進行 cp 和scp 的操做是不同的,cp後的結果是原磁盤同樣。而scp 到另外一臺主機時,則目標大小du後也實際佔用1G。這就是背後的實現不同。看cp的源代碼,咱們發現每次read以後,cp會判斷讀到的內容是否是都是0,若是是就只lseek而不write。url

接下來 咱們分析下磁盤格式 raw與qcow2spa

raw

就是原始的,它直接將文件系統的存儲單元分配給虛擬機使用,採起直讀直寫的策略。在raw格式的文件中,虛擬出來的磁盤數據塊號的大小決定了該數據塊在raw文件中的偏移量,也就是說虛擬磁盤存放數據的順序和raw文件中存放數據的順序是一致的,因爲這個特性,VBA到IBA的轉換比較簡單,而IBA實際上就是PBA。在不少的實際應用中,模板鏡像採用raw格式,以提升模板鏡像的讀性能,而增量鏡像則使用其餘格式,方便支持其餘輔助特性。raw格式的優勢有:一是尋址簡單,訪問效率較高;二是能夠經過格式轉換工具方便地轉換爲其餘格式;三是能夠方便地被宿主機掛載,能夠在不啓動虛擬機的狀況下和宿主機進行數據傳輸。可是,因爲raw格式實現簡單,不支持諸如壓縮、快照、加密和CoW等特性,另外,raw格式文件在建立時指定大小以後,就佔用了宿主機指定大小的空間,而不像qcow2等稀疏模式的鏡像格式能夠從很小的文件按需地增加。code

        能夠經過 dd 或者qemu-img生成 raw格式的磁盤,可是type爲全鏡像模式的磁盤則佔據

[root@node c5cfe9f8-1560-4f3c-ba0c-02645267dc7c]# qemu-img create -f raw qemu.raw 10G
Formatting 'qemu.raw', fmt=raw size=10737418240 
[root@node c5cfe9f8-1560-4f3c-ba0c-02645267dc7c]# dd if=/dev/zero of=dd.img bs=1M seek=1000 count=0
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000244183 s, 0.0 kB/s
[root@node c5cfe9f8-1560-4f3c-ba0c-02645267dc7c]# qemu-img info dd.img 
image: dd.img
file format: raw
virtual size: 1.0G (1048576000 bytes)
disk size: 0
[root@node c5cfe9f8-1560-4f3c-ba0c-02645267dc7c]# 
[root@node c5cfe9f8-1560-4f3c-ba0c-02645267dc7c]# qemu-img info qemu.raw 
image: qemu.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 0

cow

       目前主流的一種虛擬化鏡像格式,通過qcow的優化,目前qcow2的性能上接近raw裸格式的性能。對於qcow2的格式,幾點仍是比較突出的,qcow2的snapshot,能夠在鏡像上作N多個快照: 更小的存儲空間,即便是不支持holes的文件系統也能夠(這下du -h和ls -lh看到的就同樣了)。支持多個snapshot,對歷史snapshot進行管理  支持zlib的磁盤壓縮  支持AES的加密。

        qcow2 鏡像能夠用來保存另外一個鏡像文件的變化,它並不去修改原始鏡像文件,只記錄與原始鏡像文件的不一樣便可,這種鏡像文件就叫作 copy-on-write 鏡像。雖然是一個單獨的文件,但它的大部分的數據都來自原始鏡像,只有跟原始鏡像文件相比有變化的 cluster 纔會被記錄下來。這很容易去實現,在頭部信息中記錄原始文件路徑便可。當須要從一個 copy-on-write 鏡像文件中讀取一個 cluster 的時候,首先檢查這塊區域是否已經在該鏡像文件中被分配,若是沒有就從原始文件讀取。

咱們對type爲sprase的raw格式的磁盤建立快照後,生成的磁盤就是qcow2格式的。

[root@localhost d9907fa5-641b-4d52-80e6-c8c5262f6f94]# qemu-img info 9db30237-d00c-4982-8eb2-f5d2430ca270

image: 9db30237-d00c-4982-8eb2-f5d2430ca270
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
backing file: ../d9907fa5-641b-4d52-80e6-c8c5262f6f94/cbbb29b4-cd7f-4a12-ace7-ecfe39158cf8
backing file format: raw
Format specific information:
    compat: 0.10

 

總結:

性能來講,raw的格式整體要好一些,可是不具有qcow2的一些輔助特性,如快照、加密等。


https://www.ibm.com/developerworks/cn/linux/1409_qiaoly_qemuimgages/  

http://czmmiao.iteye.com/blog/1748748 dd命令

http://smilejay.com/2012/08/qemu-img-details/  qemu-img詳解
http://wenku.baidu.com/link?url=9epNm6hWBArsIqtxSnMTtJ1-VNZBFK4vejjcFKTLly_N_ZJavW8jtOVmGndXmnH4VTBZuIzYtQ1npst09t8eVNOCXg4-ZMoRU3A4cDDkEpu

相關文章
相關標籤/搜索