在Linux中使用qemu-img
在Linux中使用qemu-img:这是一份简短的qemu-img速查表,用于在支持qemu的Linux和Unix系统上使用qemu-img命令。
我制作了这份qemu-img速查表,以供我参考,并发现有必要与大家分享。
在使用qemu-img命令执行任何磁盘操作之前,最好先了解什么是qemu以及如何在Linux和Virtualization世界中使用它。
什么是Qemu?
根据关于Qemu的页面,QEMU被定义为通用的开源计算机仿真器和虚拟器。
这意味着Qemu可以用作计算机仿真器,以在另一台计算机上运行一台计算机的操作系统和程序。
一个示例是在x86 PC上运行ARM程序。
在这种情况下,QEMU可以将其他虚拟机管理程序(例如Xen或者KVM)用于CPU扩展,以实现通常所说的 Hardware Assisted Virtualization当QEMU用作虚拟器时,它将直接在主机CPU上执行访客代码,以实现接近叙事的性能。
大多数VPS云提供支持QEMU图像格式,例如Amazon,Digital Ocean,Linode,OVH等。
什么是qemu-img?
qemu-img是命令行实用程序,用于转换Xen,KVM,VMware,VirtualBox等管理程序使用的各种文件系统。
qemu-img用于格式化访客图像,添加其他存储设备和网络存储等可以将输出图像格式导入到VPS云提供商(如Openstack)和其他提供商(如Cloudstack)。
与qemu-img速查表一起使用时,将向我们展示几个示例。
如何在Linux中安装qemu-img?
默认情况下,qemu-img命令与libvirt堆栈一起安装:如何在RHEL/CentOS 8,Fedora,Arch Linux,CentOS,Ubuntu/Debian,SLES上安装KVM
常用的qemu-img命令选项
这 qemu-img使用以下常规语法:
qemu-img subcommand [options]
以下列表显示了使用qemu-img的常见子命令:
|||
| ---  -  | --- |
|create|用于在文件系统上创建新的磁盘镜像。 |
|check|用于检查现有的磁盘镜像是否错误。 |
|convert|用于将现有磁盘镜像从一种格式转换为另一个格式。 |
|info|用于显示有关磁盘镜像的信息。 |
|snapshot|用于管理现有磁盘镜像的快照。 |
|commit|使用此项将更改应用于现有磁盘镜像。 |
| rebase |用于基于现有磁盘镜像创建新的基础图像。 |
|resize|用于增加或者减少现有磁盘镜像的大小。 |
常用选项
| – O | 输出格式 | 
| -f | 指定磁盘格式 | 
支持的磁盘格式
支持以下图像格式:
| raw | 这是默认的镜像格式。可以导出到所有其他仿真器。 | 
| qcow2 | QEMU镜像格式是最通用的格式。 | 
| vmdk | VMware兼容镜像格式 | 
| cloop | 仅对重新使用例如Knoppix CD-ROM中存在的直接压缩的CD-ROM镜像有用。它是Linux压缩的Loop镜像。 | 
使用qemu-img:示例
以下是使用qemu-img的一些示例。
使用以下命令创建新的磁盘镜像 qemu-img create语法: qemu-img create -f fmt fname size创建大小的原始磁盘镜像 10GB:
$qemu-img create -f raw ubuntu.img 10G Formatting 'ubuntu.img', fmt=raw size=10737418240 $qemu-img info ubuntu.img image: ubuntu.img file format: raw virtual size: 10G (10737418240 bytes) disk size: 0
代替 raw和 qcow2, vdk, vmdk创建这样的格式。
看看下面的 vmdk:
$qemu-img create -f vmdk ubuntu.vmdk 10G
Formatting 'ubuntu.vmdk', fmt=vmdk size=10737418240 compat6=off hwversion=undefined
$qemu-img info ubuntu.vmdk            
image: ubuntu.vmdk
file format: vmdk
virtual size: 10G (10737418240 bytes)
disk size: 12K
cluster_size: 65536
Format specific information:
    cid: 1484281290
    parent cid: 4294967295
    create type: monolithicSparse
    extents:
        [0]:
            virtual size: 10737418240
            filename: ubuntu.vmdk
            cluster size: 65536
            format:
使用转换磁盘镜像 qemu-img convert语法: qemu-img convert -O out_fmt fname out_fname示例:转换 vmdk图片到 qcow2
$qemu-img create -f vmdk ~/ubuntu.vmdk 10G
Formatting '/home/josepy/ubuntu.vmdk', fmt=vmdk size=10737418240 compat6=off hwversion=undefined
$qemu-img convert -O qcow2 ~/ubuntu.vmdk ~/ubuntu.qcow2
$qemu-img info ~/ubuntu.qcow2 
image: /home/josepy/ubuntu.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
检查磁盘 qemu-img check语法: qemu-img check -f fmt fname例子:
$qemu-img check ubuntu.vmdk No errors were found on the image.
调整磁盘镜像的大小 qemu-img resize
警告:使用此命令收缩磁盘镜像之前,必须在VM内使用文件系统和分区工具来相应地减少分配的文件系统和分区大小。
否则会导致数据丢失!语法: resize filename [+ | -]size示例:将磁盘镜像增加 3GB
$qemu-img create -f qcow2  ubuntu.qcow2 10G
Formatting 'ubuntu.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off refcount_bits=16
$qemu-img info ubuntu.qcow2 
image: ubuntu.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
$qemu-img info ubuntu.qcow2 
image: ubuntu.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
$qemu-img resize ubuntu.qcow2 +3G          
Image resized.
$qemu-img info ubuntu.qcow2                
image: ubuntu.qcow2
file format: qcow2
virtual size: 13G (13958643712 bytes)
disk size: 200K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
我们应该注意到,尺寸从 10GB到 13GB注意:放大磁盘镜像后,必须使用虚拟机内部的文件系统和分区工具才能真正开始使用新空间。
如何扩展/增加KVM虚拟机(VM)磁盘大小如何在Linux中使用LVM扩展根文件系统
使用管理快照 qemu-img snapshot快照通常用于将虚拟机保存为特定状态。
它是运行VM Guest的完整环境的快照。
快照通常包括以下状态:内存(RAM),处理器(CPU)设备和所有可写磁盘。
要使用快照,VM Guest必须至少包含一个qcow2格式的可写硬盘镜像。
该设备通常是第一个虚拟硬盘。
下面说明了如何使用qemu-img快照。
示例:使用名称创建VM的当前状态 ubuntu_fresh
$qemu-img snapshot -c ubuntu_fresh ubuntu.qcow2
要列出VM的快照,请使用:
$qemu-img snapshot -l ubuntu.qcow2 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 ubuntu_fresh 0 2016-03-06 18:41:21 00:00:00.000
如果虚拟机发生故障,并且我们需要恢复已保存快照的状态,请使用上面命令指定的ID:
$qemu-img snapshot -a 1 ubuntu.qcow2
删除快照:
$qemu-img snapshot -d 1 ubuntu.qcow2
重新生成镜像
$qemu-img rebase -b /new/ubuntu.raw ubuntu.qcow2
将操作系统安装到创建的磁盘镜像
要将操作系统安装到磁盘镜像中,需要安装介质,例如cdrom或者ISO镜像文件。
由于QEMU直接访问该介质,因此不应安装该安装介质。
$qemu-system-x86_64 \ -m 512\ -hda ~/Desktop/virt/arch.qcow2 \ -cdrom ~/iso/CentOS-7-x86_64-Everything-1611.iso \ -enable-kvm
我们可以指定多个镜像: -hda ubuntu.qcow2 -hdb files.img -hdc container.qcow2。
ISO镜像位置可以是cdrom设备, -cdrom dev/cdrom

