1. 程式人生 > >qemu-img 命令講解

qemu-img 命令講解

工作 檢測 實踐 monit creat 不同 轉移 port ase

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命令的使用方法。

[root@jay-linux 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格式的鏡像文件。

[root@jay-linux 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)

[root@jay-linux 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

[root@jay-linux 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

[root@jay-linux 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

[root@jay-linux 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格式的鏡像。

[root@jay-linux kvm_demo]# qemu-img convert my-vmware.vmdk my-kvm.img

(此處並無實際存在vmdk文件,僅演示其命令行操作)

[root@jay-linux kvm_demo]# qemu-img convert -O qcow2 rhel6u3.img rhel6u3-a.img

(5)info [-f fmt] filename

展示filename鏡像文件的信息。如果文件是使用稀疏文件的存儲方式,也會顯示出它的本來分配的大小以及實際已占用的磁盤空間大小。如果文件中存放有客戶機快照,快照的信息也會被顯示出來。下面的命令行演示了前面進行文件轉換的輸入、輸出文件的信息。

[root@jay-linux kvm_demo]# qemu-img info rhel6u3.img

image: rhel6u3.img

file format: raw

virtual size: 8.0G (8589934592 bytes)

disk size: 8.0G

[root@jay-linux 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空間。

[root@jay-linux kvm_demo]# qemu-img resize rhel6u3-a.img +2G

Image resized.

[root@jay-linux 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

[root@jay-linux kvm_demo]# qemu-img resize rhel6u3-b.img -1G

Image resized.

[root@jay-linux 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 命令講解