qemu-img命令詳解

qemu-img是QEMU的磁盤管理工具,在qemu-kvm源碼編譯後就會默認編譯好qemu-img這個二進制文件。qemu-img也是QEMU/KVM使用過程當中一個比較重要的工具,本節對其用法和實踐使用方法進行介紹。前端

qemu-img工具的命令行基本用法以下:linux

qemu-img command [command options]ubuntu

它支持的命令分爲以下幾種:後端

(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.spa

(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(或K)、M、G、T來分別表示KB、MB、GB、TB大小。另外,鏡像文件的大小(size)也並不是必須寫在命令的最後,它也能夠被寫在「-o」選項中做爲其中一個選項。

對create命令的演示以下所示,其中包括查詢qcow2格式支持的選項、建立有backing_file的qcow2格式的鏡像文件、建立沒有backing_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  rhel6u3.qcow2

Formatting ‘rhel6u3.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  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] filename [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的 增量文件,這時必須讓轉換命令中指定的後端鏡像與輸入文件的後端鏡像的內容是相同的,儘管它們各自後端鏡像的目錄、格式可能不一樣。

若是使用qcow二、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

相關文章
相關標籤/搜索