Skip to content

qemu-img support #49

@aiminickwong

Description

@aiminickwong

一、QEMU镜像创建与格式转换

1、创建RAW格式块磁盘镜像

qemu-img create -f raw rootfs.img 6G
Formatting 'rootfs.img', fmt=raw size=6442450944

2、格式化磁盘镜像

mkfs.ext4 rootfs.img 
mke2fs 1.46.5 (30-Dec-2021)
丢弃设备块: 完成                            
创建含有 1572864 个块(每块 4k)和 393216 个 inode 的文件系统
文件系统 UUID:2878cb67-8b35-484c-8cb5-75682ad4f370
超级块的备份存储于下列块: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736
正在分配组表: 完成                            
正在写入 inode表: 完成                            
创建日志(16384 个块): 完成
写入超级块和文件系统账户统计信息: 已完成

3、查看RAW格式磁盘镜像信息

qemu-img info rootfs.img 
image: rootfs.img
file format: raw
virtual size: 6 GiB (6442450944 bytes)
disk size: 67.2 MiB

4、查看RAW格式磁盘镜像大小

ls -alh rootfs.img 
-rw-r--r-- 1 root root 6.0G rootfs.img

5、将RAW格式磁盘镜像转换为qcow2稀疏格式最小镜像(带优化参数)

qemu-img convert -p -f raw -O qcow2 \
-o lazy_refcounts=on \
-o extended_l2=on \
rootfs.img rootfs.qcow2

5-1、优化现有的qcow2镜像

qemu-img convert -f qcow2 -O qcow2 \
-o lazy_refcounts=on \
-o extended_l2=on \
rootfs.qcow2 opt_rootfs.qcow2

6、查看qcow2格式磁盘镜像大小

ls -alh rootfs.qcow2 
-rw-r--r-- 1 root root 4.7M rootfs.qcow2

7、查看qcow2格式磁盘镜像大小

qemu-img info rootfs.qcow2 
image: rootfs.qcow2
file format: qcow2
virtual size: 6 GiB (6442450944 bytes)
disk size: 3.87 MiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
    extended l2: true

8、将qcow2格式磁盘镜像转换为预分配格式(最高性能)

qemu-img convert -f qcow2 -O qcow2 \
-o preallocation=full \
-o lazy_refcounts=on \
-o extended_l2=on \
rootfs.qcow2 pre_rootfs.qcow2

9、查看qcow2格式预分配磁盘镜像信息

qemu-img info pre_rootfs.qcow2 
image: pre_rootfs.qcow2
file format: qcow2
virtual size: 6 GiB (6442450944 bytes)
disk size: 6 GiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
    extended l2: true

10、查看qcow2格式预分配磁盘镜像大小

ls -alh pre_rootfs.qcow2
-rw-r--r-- 1 root root 6.1G pre_rootfs.qcow2

11、清理qcow2格式预分配磁盘镜像,并调整为qcow2稀疏格式最小镜像

qemu-img convert -f qcow2 -O qcow2 \
-o lazy_refcounts=on \
-o extended_l2=on \
pre_rootfs.qcow2 unpre_rootfs.qcow2

12、查看清理后的未预分配qcow2格式磁盘镜像的信息

qemu-img info unpre_rootfs.qcow2 
image: unpre_rootfs.qcow2
file format: qcow2
virtual size: 6 GiB (6442450944 bytes)
disk size: 3.87 MiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: true
    refcount bits: 16
    corrupt: false
    extended l2: true

13、查看清理后的未预分配qcow2格式磁盘镜像大小

ls -alh unpre_rootfs.qcow2 
-rw-r--r-- 1 root root 4.7M unpre_rootfs.qcow2

二、QEMU镜像的快照和管理

1、创建快照

这里示例创建了4个快照

注意:

  • (1)快照名称可以重复;
  • (2)因兼容性问题有时候不支持通过ID删除快照;
  • (3)所以创建快照时建议检查当前镜像已有的快照名称避免重名!
qemu-img snapshot -c snapshot_name1(快照名称) /path/rootfs.qcow2
qemu-img snapshot -c snapshot_name2 /path/rootfs.qcow2
qemu-img snapshot -c snapshot_name3 /path/rootfs.qcow2
qemu-img snapshot -c snapshot_name4 /path/rootfs.qcow2

2、查看快照

qemu-img snapshot -l /path/rootfs.qcow2
Snapshot list:
ID        TAG               VM SIZE                DATE     VM CLOCK     ICOUNT
1         snapshot_name1        0 B 2025-12-04 21:57:30 00:00:00.000          0
2         snapshot_name2        0 B 2025-12-04 21:57:34 00:00:00.000          0
3         snapshot_name3        0 B 2025-12-04 21:57:36 00:00:00.000          0
4         snapshot_name4        0 B 2025-12-04 22:02:26 00:00:00.000          0

3、还原快照

qemu-img snapshot -a snapshot_name2 /path/rootfs.qcow2

4、删除指定快照

qemu-img snapshot -d snapshot_name4 /path/rootfs.qcow2

5、说明

预分配格式的qcow2也支持同样的快照命令,RAW/raw格式磁盘镜像不支持快照。

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions