qemu-img command [command options]
Command:
check [-f fmt] filename                       # 对磁盘镜像文件进行一致性检查,查找镜像文件中的错误

# 目前仅支持对"qcow2 "、"qed"、"vdi"格式文件的检查 
# 参数-f fmt是指定文件的格式,如果不指定格式,qemu-img会自动检测。
# filename是磁盘镜像文件的名称(包括路径)

qcow2是QEMU 0.8.3版本引入的镜像文件格式,也是目前使用最广泛的格式。
qed(QEMU enhance disk)是从QEMU 0.14版开始加入的增强磁盘文件格式,避免了qcow2格式的一些缺点,也提高了性能,不过目前还不够成熟。
vdi( Virtual Disk Image)是Oracle的Virtual Box虚拟机中的存储格式。

qemu 给分区扩容 qemu创建磁盘_预分配

create [-f fmt] [-o options ] filename [size]               
#创建一个格式为fmt , 大小为size, 文件名为filename 的镜像文件

注意:
1、使用-f指定不同的硬盘格式(qcow、qed、vid),-o选项支持的选项也不同可以添加一个或多个选项(options)来附加对该文件的各种功能设置

2、可以使用"-o ?"来查询某种格式文件支持哪些选项,在"-o" 选项中各个选项用逗号来分隔。

qemu 给分区扩容 qemu创建磁盘_openstack_02

3、如果在"-o"选项中使用了backing_file这个选项来指定其后端基础镜像文件,那么这个创建的镜像文件仅记录与后端镜像文件的差异部分

4、后端镜像文件不会被修改,除非在QEMU monitor中使用"commit"命令或使用"qemu-img commit"命令去手动提交这些改动

5、这种情况下,size参数不是必须需的,其值默认为后端镜像文件的大小。

6、另外,直接使用"-b backfile"参数也与"-o backing_file=backfile"效果相同!!!!

7、size选项用于像文件的大小,其默认单位是字节(bytes), 也可以支持k (即K )、M、G、T来分别表示KB 、MB 、GB 、TB 大小。

8、另外,镜像文件的大小(size)也并非必须写在命令的最后,也可以写在"-o" 选项中作为其中一个选项

使用示例:
不使用基础镜像:
qemu-img create -f qcow2 /application/kvm_data/cs-00.qcow2 10G

使用基础镜像(基础镜像必须事先存在):
qemu-img -f qcow2    -b /application/kvm_data/cs-00.qcow2    /application/kvm_data/cs-01.qcow2   #未指定size,使用基础镜像的size

qumu-img -f qcow2  -o backing_file='/application/kvm_data/cs-00.qcow2'   /application/kvm_data/cs-01.qcow2

使用-o选项指定基础镜像,同时指定size

qumu-img -f qcow2  -o backing_file='/application/kvm_data/cs-00.qcow2',size=15G   /application/kvm_data/cs-01.qcow2
commit [-f fmt] filename          #提交filename文件中的更改到后端支持镜像文件(创建时通过-o选项的backing_file参数指定的基础镜像或使用-b选项指定的基础镜像)中。
                    #最好不要这样操作,因为这样会更改基础镜像,除非要更改基础镜像 convert  [-c]   [-f fmt1]  [-O fmt2]   [-o options] filename [filename2 […]]     output_filename

#根据-o指定的选项,将格式为fmt1的名称为filename镜像文件    转换为    格式为fmt2的名称为output_filename的镜像

一般来说:

输入文件格式fmt1由qemu-img工具自动检测到(可以不使用-f指定),
输出文件格式fmt2根据自己需要来指定,默认会被转换为raw文件格式(且默认使用稀疏文件的方式存储以节省存储空间)

"-c "        #表示对输出的镜像文件进行压缩,只有qcow2和qcow格式的镜像文件才支持压缩,
        #并且这种压缩是只读的,如果压缩的扇区被重写,则会被重写为未压缩的数据

-f          #指定输入镜像文件的格式 ,可省略,指令能够自动检测
-O          #指定输出镜像文件的格式,如果省略,则使用默认的raw,若转换成其它格式必须明确指定

"-o options"        #和create中的-o选项相同,指定各种选项,如后端镜像、文件大小、是否加密等等。
-o支持的选项:

backing_file      用于指定后端镜像文件。

backing_fmt       设置后端镜像的镜像格式。

cluster_size       设置镜像中簇的大小,取值在512B到2MB之间,默认值为64KB。
          较小的簇可以节省镜像文件的空间,而较大的簇可以带来更好的性能,需要根据实际情况来平衡,一般采用默认值即可。

preallocation    设置镜像文件空间的预分配模式,其值可为"off"、"metadata" 之一:

        "off"模式是默认值,设置了不为镜像文件预分配磁盘空间。
        "metadata" 模式用于设置为镜像文件预分配metadata的磁盘空间,所以这种方式生成的镜像文件稍大一点,不过在其真正分配空间写入数据时效率更高。

另外,一些版本的qemu-img (如RHEL6.3 自带的)还支持"full"模式的预分配,它表示在物理上预分配全部的磁盘空间,它将整个镜像的空间都填充零以占用空间,当然它所花费的时间较长,不过使用时性能更好。

encryption       用于设置加密, 当它等于"on"时,镜像被加密。

        它使用128位密钥的ASE加密算法,故其密码长度可达16个字符(每个字符8位),可以保证加密的安全性较高。
        在将"qemu-img convert"命令转化为qcow2格式时,加上"-o encryption",即可对镜像文件设置密码,
        而在使用镜像启动客户机时需要在QEMU monitor中输入"cont"或"c"(是continue的意思)
        命令来唤醒客户机输入密码后继续执行(否则客户机将不会真正启动)。

示例:

#将VMware的vmdk格式镜像转换为KVM可以使用的raw格式的镜像
 qernu-img convert    my-vmware.vrndk    my-kvm.img #将一个raw镜像文件转化为qcow2格式的镜像
 qemu-img  convert -O qcow2 rhel6u3.img rhel6u3-a.qcow2 info    [-f fmt]   filename          #展示filename镜像文件的信息
                     #如果文件使用的是稀疏文件的存储方式,也会显示出它本来分配的大小及实际已占用的磁盘空间大小
                     #如果文件中存放有客户机快照,快照的信息也会被显示出来

qemu 给分区扩容 qemu创建磁盘_openstack_03

snapshot [-l | -a snapshot | -c snapshot | -d snapshot]     filename
 "-l"                #选项表示查询并列出镜像文件中的所有快照,
 "-a snapshot"              #表示让镜像文件使用某个快照,
 "-c snapshot"             #表示创建一个快照,
 "-d snapshot"             #表示删除—个快照rebase    [-f fmt]     [-t cache]    [-p]    [-u]     -b backing_file [-F backingfmt]   filename        #改变镜像文件的后端基础镜像文件,只有qcow2和qed格式的镜像支持rebase命令!!!!
"-b backing_file"         指定后端镜像文件
 "-F backingfmt"          原后端镜像也被转化为这里指定的后端镜像格式
 -u                使用非安全模式
 -p                显示命令的执行过程

这个命令可以工作于两种模式之下:
一种是安全模式(Safe Mode),这是默认的模式,qemu-img会根据比较原来的后端镜像与现在的后端镜像的不同进行合理的处理;

一种是非安全模式(Unsafe Mode),是通过"-u"参数来指定的,这种模式主要用于将后端镜像重命名或移动位置后对前端镜像文件的修复处理,由用户去保证后端镜像的一致性

resize     filename    [+ | -]size        #改变镜像文件的大小,使其不同于创建之时的大小。"+"和"-"分别表示增加和减少镜像文件的大小,size 也支待K 、M 、G 、T 等单位的使用
                     qcow2格式文件不支持缩小镜像的操作!!!!

                     增加了镜像文件大小后,也需启动客户机在其中应用"fdisk"、"parted"、“resize”等分区工具进行相应的操作才能真正让客户机使用到增加后的镜像空间

示例:
如下命令行演示了两个镜像的大小改变:
将一个8GB 的qcow2 镜像增加2GB 的空间,
qemu-img resize rhel6u3-a.img +2G

将一个8GB 大小的raw 镜像减少1GB 空间。
qemu-img resize rhel6u3-b.img -1G