標籤:磁碟管理工具 qemu safe cache back 磁碟空間 vmdk 扇區 客戶機
qemu-img是QEMU的磁碟管理工具,在qemu-kvm源碼編譯後就會預設編譯好qemu-img這個二進位檔案。qemu-img也是QEMU/KVM使用過程中一個比較重要的工具,本節對其用法和實踐使用方法進行介紹。
qemu-img工具的命令列基本用法如下:
qemu-img command [command options]
它支援的命令分為如下幾種:
(1)check [-f fmt] filename
對磁碟鏡像檔案進行一致性檢查,尋找鏡像檔案中的錯誤,目前僅支援對“qcow2”、“qed”、“vdi”格式檔案的檢查。其中,qcow2是QEMU 0.8.3版本引入的鏡像檔案格式,也是目前使用最廣泛的格式。qed(QEMU enhanced disk)是從QEMU 0.14版開始加入的增強磁碟檔案格式,為了避免qcow2格式的一些缺點,也為了提高效能,不過目前還不夠成熟。而vdi(Virtual Disk Image)是Oracle的VirtualBox虛擬機器中的儲存格式。參數-f fmt是指定檔案的格式,如果不指定格式qemu-img會自動檢測,filename是磁碟鏡像檔案的名稱(包括路徑)。
如下命令列示範了qemu-img的check命令的使用方法。
[[email protected] kvm_demo]# qemu-img check rhel6u3.qcow2
No errors were found on the image.
(2)create [-f fmt] [-o options] filename [size]
建立一個格式為fmt大小為size檔案名稱為filename的鏡像檔案。根據檔案格式fmt的不同,還可以添加一個或多個選項(options)來附加對該檔案的各種功能設定,可以使用“-o ?”來查詢某種格式檔案支援那些選項,在“-o”選項中各個選項用逗號來分隔。
如果“-o”選項中使用了backing_file這個選項來指定其後端鏡像檔案,那麼這個建立的鏡像檔案僅記錄與後端鏡像檔案的差異部分。後端鏡像檔案不會被修改,除非在QEMU monitor中使用“commit”命令或者使用“qemu-img commit”命令去手動提交這些改動。這種情況下,size參數不是必須需的,其值預設為後端鏡像檔案的大小。另外,直接使用“-b backfile”參數也與“-o backing_file=backfile”效果相同。
size選項用於指定鏡像檔案的大小,其預設單位是位元組(bytes),也可以支援k(?%x8?K)、M、G、T來分別表示KB、MB、GB、TB大小。另外,鏡像檔案的大小(size%F???%9並非必須寫在命令的最後,它也可以被寫在“-o”選項中作為其中一個選項。
對c2eate命令的示範如下所示,其中包?eAC查詢qcow2格式支援的選項、建立有backing_file的qcow2格式的鏡像檔案、創?%B沒?e89backing_file的10GB大小的qcow2格式的鏡像檔案。
[[email protected] kvm_demo]# qemu-img create -f qcow2 -o ? temp.qcow
Supported options:
size Virtual disk size
compat Compatibility level (0.10 or 1.1)
backing_file File name of a base image
backing_fmt Image format of the base image
encryption Encrypt the image
cluster_size qcow2 cluster size
preallocation Preallocation mode (allowed values: off, metadata)
[[email protected] kvm_demo]# qemu-img create -f qcow2 -b rhel6u3.img r(el6u3.qcow2
Formatting ‘rhel6u3.qcow2′, fmt=qcow2 size=8589934592 backing_file=’rhel6u3.img’ encryption=off cluster_size=6u536
[[email protected] kvm_demo]# qemu-img create -f qcow2 -o backing_file=rhel6u3.img rhel6u3-1.qcow2
Formatting ‘rhel6u3-1.qcow2′, fmt=qcow2 size=8589934592 backing_file=’rhel6u3.img’ encryption=off cluster_size=65536
[[email protected] kvm_demo]# qemu-img create -f qcow2 -o backing_file=rhel6u3.img,size=20G rhel6u3-2.qcow2
Formatting ‘rhel6u3-2.qcow2′, fmt=qcow2 size=21474836480 backing_file=’rhel6u3.img’ encryption=off cluster_size=65536
[[email protected] kvm_demo]# qemu-img create -f qcow2 ubuntu.qcow2 10G
Formatting ‘ubuntu.qcow2′, fmt=qcow2 size=10737418240 encryption=off cluster_size=65536
(3)commit [-f fmt] filename
提交filename檔案中的更改到後端支援鏡像檔案(建立時通過backing_file指定的)中去。
(4)convert [-c] [-f fmt] [-O output_fmt] [-o options] filenam% [filename2 [...]] output_filename
將fmt格式的filename鏡像檔案根據options選項轉換為格式為output_fmt的名為output_filename的鏡像檔案。它支援不同格式的鏡像檔案之間的轉換,比如可以用VMware用的vmdk格式檔案轉換為qcow2檔案,這對從其他虛擬化方案轉移到KVM上的使用者非常有用。一般來說,輸入檔案格式fmt由qemu-img工具自動檢測到,而輸出檔案格式output_fmt根據自己需要來指定,預設會被轉換為與raw檔案格式(且預設使用疏鬆檔案的方式儲存以節省儲存空間)。
其中,“-c”參數是對輸出的鏡像檔案進行壓縮,不過只有qcow2和qcow格式的鏡像檔案才支援壓縮,而且這種壓縮是唯讀,如果壓縮的扇區被重寫,則會被重寫為未壓縮的資料。同樣可以使用“-o options”來指定各種選項,如:後端鏡像、檔案大小、是否加密等等。使用backing_file選項來指定後端鏡像,讓產生的檔案是copy-on-write的增量檔案,這時必須讓轉換命令中指定的後端鏡像與輸入檔案的後端鏡像的內容是相同的,儘管它們各自後端鏡像的目錄、格式可能不同。
如果使用qcow2、qcow、cow等作為輸出檔案格式來轉換raw格式的鏡像檔案(非疏鬆檔案格式),鏡像轉換還可以起到將鏡像檔案轉化為更小的鏡像,因為它可以將空的扇區刪除使之在產生的輸出檔案中並不存在。
下面的命令列示範了兩個轉換:將VMware的vmdk格式鏡像轉換為KVM可以使用的qcow2鏡像,將一個raw鏡像檔案轉化為qcow2格式的鏡像。
[[email protected] kvm_demo]# qemu-img convert my-vmware.vmdk my-kvm.img
(此處並無實際存在vmdk檔案,僅示範其命令列操作)
[[email protected] kvm_demo]# qemu-img convert -O qcow2 rhel6u3.img rhel6u3-a.img
(5)info [-f fmt] filename
展示filename鏡像檔案的資訊。如果檔案是使用疏鬆檔案的儲存方式,也會顯示出它的本來分配的大小以及實際已佔用的磁碟空間大小。如果檔案中存放有客戶機快照,快照的資訊也會被顯示出來。下面的命令列示範了前面進行檔案轉換的輸入、輸出檔案的資訊。
[[email protected] kvm_demo]# qemu-img info rhel6u3.img
image: rhel6u3.img
file format: raw
virtual size: 8.0G (8589934592 bytes)
disk size: 8.0G
[[email protected] kvm_demo]# qemu-img info rhel6u3-a.img
image: rhel6u3-a.img
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 6.8G
cluster_size: 65536
(6)snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename
“-l” 選項是查詢並列出鏡像檔案中的所有快照,“-a snapshot”是讓鏡像檔案使用某個快照,“-c snapshot”是建立一個快照,“-d”是刪除一個快照。
(7)rebase [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmt] filename
改變鏡像檔案的後端鏡像檔案,只有qcow2和qed格式支援rebase命令。使用“-b backing_file”中指定的檔案作為後端鏡像,後端鏡像也被轉化為“-F backing_fmt”中指定的後端鏡像格式。
它可以工作於兩種模式之下,一種是安全模式(Safe Mode)也是預設的模式,qemu-img會去比較原來的後端鏡像與現在的後端鏡像的不同進行合理的處理;另一種是非安全模式(Unsafe Mode),是通過“-u”參數來指定的,這種模式主要用於將後端鏡像進行了重新命名或者移動了位置之後對前端鏡像檔案的修複處理,由使用者去保證後端鏡像的一致性。
(8)resize filename [+ | -]size
改變鏡像檔案的大小,使其不同於建立之時的大小。“+”和“-”分別表示增加和減少鏡像檔案的大小,而size也是支援K、M、G、T等單位的使用。縮小鏡像的大小之前,需要在客戶機中保證裡面的檔案系統有空餘空間,否則會資料丟失,另外,qcow2格式檔案不支援縮小鏡像的操作。在增加了鏡像檔案大小後,也需啟動客戶機到裡面去應用“fdisk”、“parted”等分區工具進行相應的操作才能真正讓客戶機使用到增加後的鏡像空間。不過使用resize命令時需要小心(最好做好備份),如果失敗的話,可能會導致鏡像檔案無法正常使用而造成資料丟失。
如下命令列示範了兩個鏡像的大小改變:將一個8GB的qcow2鏡像增加2GB的空間,也將一個8GB大小的raw鏡像減少1GB空間。
[[email protected] kvm_demo]# qemu-img resize rhel6u3-a.img +2G
Image resized.
[[email protected] kvm_demo]# qemu-img info rhel6u3-a.img
image: rhel6u3-a.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 6.8G
cluster_size: 65536
[[email protected] kvm_demo]# qemu-img resize rhel6u3-b.img -1G
Image resized.
[[email protected] kvm_demo]# qemu-img info rhel6u3-b.img
image: rhel6u3-b.img
file format: raw
virtual size: 7.0G (7516192768 bytes)
disk size: 6.5G
qemu-img 命令講解