暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

qemu-img

老柴杂货铺 2025-03-29
172

qemu-img是QEMU的磁盘管理工具,在qemu-kvm源码(https://download.qemu.org/)编译后就会默认编译好qemu-img这个二进制文件。qemu-img也是QEMU/KVM使用过程中一个比较重要的工具,用于创建、转换、修改和管理磁盘映像文件。以下是qemu-img的一些主要功能和用法:

一、qemu-img 支持的文件格式

qcow2:QEMU Copy-On-Write v2,支持快照和压缩。

    优点:

        支持快照:可以轻松创建和管理快照,适用于测试和开发环境。

        压缩:支持zlib压缩,可以减少磁盘占用空间。

        增量备份:只存储更改的数据,节省空间。

        支持稀疏文件:只在需要时分配磁盘空间,初始时占用较少空间。

        支持加密:支持AES加密

    缺点:

        性能:由于压缩和快照功能,读写性能可能较 raw 格式稍低。推荐生产环境使用。

raw:原始格式,没有任何附加信息,直接表示磁盘数据。

    优点:性能好

    缺点:空间占用大,不支持快照,不推荐生成环境使用

vmdk:VMware虚拟机磁盘格式。

vhdx:Hyper-V虚拟硬盘格式,支持大于2TB的虚拟磁盘。

vpc:Microsoft Virtual PC格式。

qcow:较旧的QEMU Copy-On-Write格式。

vdi:Oracle VirtualBox的虚拟磁盘格式。

rbd:Ceph RADOS块设备格式。

nbd:网络块设备格式。

二、qemu-img 命令详解

基本用法

    qemu-img command [command options]

    它支持的命令分为如下几种:

    1.check命令

      check [-f fmt] filename


      对磁盘镜像文件进行一致性检查,查找镜像文件中的错误,目前仅支持对“qcow2”、“qed”、“vdi”格式文件的检查。

      参数-f fmt是指定文件的格式,如果不指定格式qemu-img会自动检测,filename是磁盘镜像文件的名称(包括路径)。

      如下命令行演示了qemu-img的check命令的使用方法。

        qemu-img check rhel6u3.qcow2
        2.create命令
          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格式的镜像文件。

            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


            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


            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


            qemu-img create -f qcow2 ubuntu.qcow2 10G
            Formatting 'ubuntu.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536
            3.commit 命令
              commit [-f fmt] filename
              提交filename文件中的更改到后端支持镜像文件(创建时通过backing_file指定的)中去。
              4.convert 命令
                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的增量文件,这时必须让转换命令中指定的后端镜像与输入文件的后端镜像的内容是相同的,尽管它们各自后端镜像的目录、格式可能不同。

                如果使用qcow2、qcow、cow等作为输出文件格式来转换raw格式的镜像文件(非稀疏文件格式),镜像转换还可以起到将镜像文件转化为更小的镜像,因为它可以将空的扇区删除使之在生成的输出文件中并不存在。

                5.info 命令
                  info [-f fmt] filename
                  展示filename镜像文件的信息。如果文件是使用稀疏文件的存储方式,也会显示出它的本来分配的大小以及实际已占用的磁盘空间大小。如果文件中存放有客户机快照,快照的信息也会被显示出来。
                    qemu-img info rhel6u3.img
                    image: rhel6u3.img
                    file format: raw
                    virtual size: 8.0G (8589934592 bytes)
                    disk size: 8.0G
                    6.snapshot 命令
                      snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename
                      “-l” 选项是查询并列出镜像文件中的所有快照,“-a snapshot”是让镜像文件使用某个快照,“-c snapshot”是创建一个快照,“-d”是删除一个快照。
                      7.rebase 命令
                        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 命令
                          resize filename [+ | -]size

                          改变镜像文件的大小,使其不同于创建之时的大小。“+”和“-”分别表示增加和减少镜像文件的大小,而size也是支持K、M、G、T等单位的使用。缩小镜像的大小之前,需要在客户机中保证里面的文件系统有空余空间,否则会数据丢失,另外,qcow2格式文件不支持缩小镜像的操作。在增加了镜像文件大小后,也需启动客户机到里面去应用“fdisk”、“parted”等分区工具进行相应的操作才能真正让客户机使用到增加后的镜像空间。不过使用resize命令时需要小心(最好做好备份),如果失败的话,可能会导致镜像文件无法正常使用而造成数据丢失。

                          如下命令行演示了两个镜像的大小改变:将一个8GB的qcow2镜像增加2GB的空间,也将一个8GB大小的raw镜像减少1GB空间。

                            qemu-img resize rhel6u3-a.img +2G
                            qemu-img resize rhel6u3-b.img -1G
                            三、qemu-img 注意事项

                            在进行磁盘映像操作时,特别是在调整大小或转换格式时,建议备份重要数据,以防数据丢失。

                            使用qemu-img时,确保有足够的磁盘空间来存储生成的映像文件。

                            通过这些功能,qemu-img成为管理虚拟机磁盘映像的重要工具,广泛应用于虚拟化环境中。

                            文章转载自老柴杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论