文档首页/ 镜像服务 IMS/ 最佳实践/ 转换镜像格式/ 通过qemu-img-hw工具转换镜像格式
更新时间:2024-11-07 GMT+08:00

通过qemu-img-hw工具转换镜像格式

应用场景

华为云支持导入vhd、vmdk、qcow2、raw、vhdx、qcow、vdi、qed、zvhd或zvhd2格式镜像文件。其他镜像文件,需要使用开源qemu-img工具转换格式后再导入。但是,qemu-img工具不支持zvhd和zvhd2格式,而自研的qemu-img-hw工具弥补了该缺陷。本文介绍如何通过qemu-img-hw工具转换镜像文件格式为zvhd2。

资源和成本规划

表1 资源和成本规划

资源

资源说明

成本说明

qemu-img-hw

是一款转换镜像格式的工具。

获取方式:

https://cn-south-1-cloud-reset-pwd.obs.cn-south-1.myhuaweicloud.com/imageImportTools/qemu-img-hw.zip

免费

约束与限制

qemu-img-hw工具仅支持在Linux环境中操作,您可以使用本地Linux服务器,也可以使用云平台的Linux云服务器。本文以EulerOS云服务器作为操作环境进行演示。

操作步骤

  1. 上传待转换格式的镜像文件至云服务器。
    • 本地主机为Linux系统:

      通过scp命令将镜像文件上传至云服务器。以将“image01.qcow2”文件上传至云服务器的“/usr/”目录下为例。

      scp /var/image01.qcow2 root@xxx.xxx.xx.xxx:/usr/

      其中,xxx.xxx.xx.xxx为云服务器的弹性公网IP。

    • 本地主机为Windows系统:

      使用文件传输工具(例如WinSCP)将镜像文件上传至云服务器。

  2. 获取qemu-img-hw工具并上传至云服务器,然后解压工具包。
    表2 qemu-img-hw工具获取方式

    工具包

    下载地址

    qemu-img-hw.zip

    https://cn-south-1-cloud-reset-pwd.obs.cn-south-1.myhuaweicloud.com/imageImportTools/qemu-img-hw.zip

    当前工具仅限在x86架构的服务器下使用。

  3. 转换镜像格式。
    1. 进入qemu-img-hw存放目录,以存放在“/usr/qemu-img-hw”为例:

      cd /usr/qemu-img-hw

    2. 执行以下命令修改权限:

      chmod +x qemu-img-hw

    3. 执行qemu-img-hw命令将镜像文件转为zvhd2格式。

      qemu-img-hw命令格式:

      ./qemu-img-hw convert -p -O {目标镜像格式} {待转换镜像文件} {目标镜像文件}

      以将“image01.qcow2”格式文件转换成“image01.zvhd2”格式为例:

      ./qemu-img-hw convert -p -O zvhd2 image01.qcow2 image01.zvhd2

附1:qemu-img-hw常用命令

  • 镜像文件格式转换:qemu-img-hw convert -p -O {目标镜像格式} {待转换镜像文件} {目标镜像文件}

    上述命令中各参数对应的说明如下:

    -p:标识转换的进度条

    -O:(必须是大写)后面的参数为转换出来的镜像格式 + 源镜像文件名称 + 目标镜像文件名称

    示例:将qcow2格式转为zvhd2格式

    qemu-img-hw convert -p -O zvhd2 test.qcow2 test.zvhd2

  • 查询镜像文件信息:qemu-img-hw info {镜像文件}

    示例:qemu-img-hw info test.zvhd2

  • 查看帮助:qemu-img-hw -help

附2:执行qemu-img-hw常见报错

  • 问题描述:
    执行qemu-img-hw命令时回显信息如下:
    ./qemu-img-hw: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./qemu-img-hw)

    解决方法:

    执行strings /lib64/libc.so.6 | grep GLIBC查看GLIBC版本,若由于版本过低造成,可安装高版本即可。依次执行下述命令:

    wget http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz

    wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.15.tar.gz

    tar -xvf glibc-2.15.tar.gz

    tar -xvf glibc-ports-2.15.tar.gz

    mv glibc-ports-2.15 glibc-2.15/ports

    mkdir glibc-build-2.15

    cd glibc-build-2.15

    ../glibc-2.15/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

    此命令若报错“configure: error: no acceptable C compiler found in $PATH”,请先执行:yum -y install gcc

    make

    make install

  • 问题描述:

    执行qemu-img-hw命令时回显信息如下:

    ./qemu-img-hw: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

    解决方法:请先执行命令yum install libaio

  • 问题描述:

    执行qemu-img-hw命令时回显信息如下:

    ./qemu-img-hu: error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory

    解决方法:执行openssl version查看当前openssl版本是否大于1.0,若版本大于1.0,需要安装1.0版本。

    请依次执行下述命令:

    wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_0_2k/openssl-1.0.2k.tar.gz

    tar -xvf openssl-1.0.2k.tar.gz

    cd openssl-1.0.2k

    ./config -d shared --prefix=/tmp/openssl(安装目录,可自定义)

    make

    make install

    cp /tmp/openssl/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10

    使用完成后,如不需要/usr/lib64/libcrypto.so.10文件,可自行删除。

后续处理

镜像文件格式完成转换后,您可以通过obsutil工具将其上传至OBS桶,制作私有镜像时使用。使用obsutil工具上传镜像文件的操作指导,请参见上传对象