第 10 章 qemu-img 和 QEMU 客户机代理


本章包含将 qemu-img 软件包与客户机虚拟机搭配使用的有用提示和提示。如果您要查找有关 QEMU 跟踪事件和参数的信息,请参考此处的 README 文件: /usr/share/doc/qemu-*/README.systemtap

10.1. 使用 qemu-img

qemu-img 命令行工具用于格式化、修改和验证 KVM 使用的各种文件系统。下方列出了 QEMU-img 选项和用法。

检查

对磁盘映像 文件名 执行一致性检查。

#  qemu-img check -f qcow2 --output=qcow2 -r all filename-img.qcow2
注意
只有 qcow2vdi 格式支持一致性检查。
使用 -r 尝试修复在检查过程中发现的所有不一致问题,但在修复 -r leaks 集群泄漏时,会修复并处理 -r all 各种错误被修复。请注意,这存在选择错误的修复或隐藏可能已经发生崩溃问题的风险。

Commit(提交)

使用 qemu-img commit 命令将指定文件(文件名)中记录的任何更改提交到文件的基础镜像。(可选)指定文件格式类型(格式)。

 # qemu-img commit [-f format] [-t cache] filename

convert

convert 选项用于将一个可识别的镜像格式转换为另一个镜像格式。

命令格式:
# qemu-img convert [-c] [-p] [-f format] [-t cache] [-O output_format] [-o options] [-S sparse_size] filename output_filename
-p 参数显示命令的进度(可选而不是每个命令)和 -S 选项允许创建 稀疏文件,该文件包含 在磁盘镜像中。所有目的中的稀疏文件都类似标准文件,但物理块仅包含零(无)。当操作系统看到此文件时,它会将其视为存在,并占用实际磁盘空间,即使实际情况也不会采取任何情况。这在为客户机虚拟机创建磁盘时特别有用,因为这会造成磁盘所占用的磁盘空间比它多得多。例如,如果您在磁盘镜像上的 -S 设置为 50Gb,则您的 10Gb 磁盘空间的 10Gb 的大小将显示为 60Gb,即使实际使用了 10Gb。
使用格式 filename 将磁盘镜像 output_filename 转换为磁盘镜像 output_format。磁盘镜像可以选择使用 -c 选项压缩,或者通过设置 -o 来使用 -o encryption 选项加密。请注意,-o 参数可用的选项与所选格式不同。
只有 qcow2 格式支持加密或压缩。qcow2 加密使用 AES 格式,以及安全 128 位密钥。qcow2 压缩为只读模式,因此如果压缩的扇区从 qcow2 格式转换,它将被写成为未压缩数据的新格式。
在使用可增加的格式时(如 qcowcow )时,镜像转换也很有用。检测到空扇区并从目标镜像中禁止。

创建

创建新的磁盘大小 size 并格式化 format

# qemu-img create [-f format] [-o options] filename [size][preallocation]
如果使用 -o backing_file=filename 指定基础镜像,则镜像只记录自身和基础镜像之间的区别。除非您使用 commit 命令,否则不会修改后备文件。在这种情况下不需要指定大小。
预分配是一个只能用于创建 qcow2 镜像的选项。接受的值包括 -o preallocation=off|meta|full|falloc。预分配元数据的镜像大于镜像,无需.但是,在镜像大小增加的情况下,随着镜像的增长,性能会提高。
请注意,使用 完整 分配可能需要较长时间的大型镜像。如果您想要实现完全分配且时间为准,使用 falloc 将为您节省时间。

info

info 参数显示有关磁盘映像 文件名 的信息。info 选项的格式如下:

# qemu-img info [-f format] filename
此命令通常用于发现磁盘上保留的大小,其大小可以与显示的大小不同。如果快照存储在磁盘镜像中,也会显示它们。例如,该命令显示块设备上 qcow2 镜像采用的空间量。这可以通过运行 qemu-img 来完成。您可以使用 qemu-img check 命令来检查镜像是否为与 qemu-img info 命令的输出相符。请参阅 第 10.1 节 “使用 qemu-img”
# qemu-img info /dev/vg-90.100-sluo/lv-90-100-sluo
image: /dev/vg-90.100-sluo/lv-90-100-sluo
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 0
cluster_size: 65536

map

# qemu-img map [-f format] [--output=output_format] filename 命令转储镜像文件名及其后备文件链的元数据。具体来说,此命令会转储指定文件的每个扇区的分配状态,以及在后备文件链中分配它的最顶层文件。例如,如果您有一个链,如 c.qcow2 b.qcow2 a.qcow2,则 a.qcow 是原始文件,b.qcow2 是对 a.qcow2 和 c.qcow2 的更改是来自 b.qcow2 的 delta 文件。创建此链时,镜像文件会存储普通镜像数据,以及关于什么文件中以及它们在文件所在的位置的信息。此信息称为镜像的元数据。f format 选项是指定镜像文件的格式。可以使用 raw、qcow2、vhdx 和 vmdk 等格式。可能有两个输出选项: human json

  • 为默认设置。它旨在更加易读的人类阅读,因此这种格式不应被解析。为了清晰和简单性,默认 格式仅转储文件的已知非零区域。文件的已知零部分将被完全省略,也同样适用于不在整个链中分配的部分。当执行命令时,qemu-img 输出将识别从其中读取数据的文件,以及 文件中的偏移。输出显示为包含四个列的表:前三个是十六进制数字。
    # qemu-img map -f qcow2 --output=human /tmp/test.qcow2
    Offset          Length          Mapped to       File
    0               0x20000         0x50000         /tmp/test.qcow2
    0x100000        0x80000         0x70000         /tmp/test.qcow2
    0x200000        0x1f0000        0xf0000         /tmp/test.qcow2
    0x3c00000       0x20000         0x2e0000        /tmp/test.qcow2
    0x3fd0000       0x10000         0x300000        /tmp/test.qcow2
    
  • JSON 或 JSON(JavaScript 对象表示法)可供人类读取,但由于编程语言,它也旨在解析。例如,要在解析器中解析 "qemu-img map" 的输出,则应使用 --output=json 选项。
    # qemu-img map -f qcow2 --output=json /tmp/test.qcow2
    [{ "start": 0, "length": 131072, "depth": 0, "zero": false, "data": true, "offset": 327680},
    { "start": 131072, "length": 917504, "depth": 0, "zero": true, "data": false},
    
    如需有关 JSON 格式的更多信息,请参阅 qemu-img(1)手册页。

rebase

更改镜像的后端文件。

# qemu-img rebase [-f format] [-t cache] [-p] [-u] -b backing_file [-F backing_format] filename
后备文件更改为 backing_file,并(如果 文件名 格式支持该功能),则后备文件格式更改为 backing_format
注意
只有 qcow2 格式支持更改后备文件(rebase)。
稳定可以操作的两种不同的模式: SafeUnsafe
默认使用 安全模式,并执行实际的 rebase 操作。新的后备文件可能与旧文件不同,qemu-img rebase 命令就会小心,确保 guest 虚拟机不可见 的文件名 内容保持不变。为实现此目的,在对 后备文件 和文件名的旧备份文件不同的集群都会合并到 文件名 中,然后对后备文件进行任何更改。
请注意,安全模式是一个昂贵操作,相当于转换镜像。需要旧后备文件才能成功完成。
如果将 -u 选项传递给 qemu-img rebase,则会使用不安全模式。在这个模式中,只更改 文件名 的后备文件名和格式,而不对文件内容进行任何检查。确保正确指定新后备文件,否则镜像可见的内容会损坏。
这个模式对重命名或移动后备文件很有用。它可以在不访问旧后备文件的情况下使用它。例如,它可以用于修复已移动或重命名后备文件的镜像。

调整大小

更改磁盘镜像 文件名,就像它创建 大小为。无论版本如何,只有采用原始格式的镜像才可以重新定义大小。Red Hat Enterprise Linux 6.1 及之后的版本添加了以 qcow2 格式增加(但不缩小)镜像的功能。

使用以下内容将磁盘镜像 文件名 的大小设置为 size 字节:
# qemu-img resize filename size
您还可以相对于磁盘镜像的当前大小来调整。要指定大小相对于当前大小,请为加上 + 的字节数加前缀,或 - 通过该字节数来减小磁盘镜像的大小。添加单元后缀允许您以千字节(K)、兆字节(M)、千兆字节(G)或 TB(T)为单位设置镜像大小。
# qemu-img resize filename [+|-]size[K|M|G|T]
警告
在使用此命令缩小磁盘镜像之前,您必须使用 虚拟机本身中的文件系统和分区工具来减少分配的文件系统和分区大小。否则会导致数据丢失。
在使用此命令增加磁盘镜像后,您必须使用虚拟机中的文件系统和分区工具实际开始使用该设备中的新空间。

Snapshot

列出、应用、创建或删除映像的现有快照(快照)(文件名)。

# qemu-img snapshot [ -l | -a snapshot | -c snapshot | -d snapshot ] filename
- L 列出与指定磁盘镜像关联的所有快照。apply 选项 -a 将磁盘镜像(文件名)恢复到之前保存 的快照 的状态。-c 可以创建映像的快照(快照)。-d 删除指定的快照。

支持的格式

QEMU-img 旨在将文件转换为以下格式之一:

raw
原始磁盘镜像格式(默认)。这可以是基于文件的最快格式。如果您的文件系统支持 holes(例如,在 Linux 上的 ext2 或 ext3 中,Windows 上的 NTFS),则只有写扇区将被保留空间。使用 qemu-img info 获取镜像或 ls -ls on Unix/Linux 上使用的实际大小。虽然 Raw 镜像提供了最佳性能,但只有 Raw 镜像具有非常基本的功能(例如,没有快照可用)。
qcow2
QEMU 镜像格式,包含最佳功能集的最通用格式。使用它来具有可选的 AES 加密,基于 zlib 的压缩,支持多个虚拟机快照和较小的镜像,这对于不支持 holes 的文件系统( Windows 中的非NTFS 文件系统)非常有用。请注意,这种广泛的功能集以性能为代价。
虽然只有上述格式可用于在客户机虚拟机或主机物理计算机中运行,qemu-img 还识别并支持以下格式,以便将其转换为 rawqcow2 格式。通常会自动检测到镜像的格式。除了将这些格式转换为 rawqcow2,也可将其从 rawqcow2 转换为原始格式。
Bochs
Bochs 磁盘镜像格式。
cloop
Linux 压缩的 Loop 镜像,仅适用于重复使用压缩的 CD-ROM 镜像,例如 Knoppix CD-ROM。
COW
user Mode Linux Copy On Write image format。cow 格式仅用于与之前版本兼容。它无法使用 Windows。
dmg
MAC 磁盘镜像格式。
nbd
网络块设备.
Parallels
并行虚拟化磁盘映像格式.
QCOW
旧的 QEMU 镜像格式。只适用于与旧版本兼容。
vdi
Oracle VM VirtualBox 硬盘映像格式.
vmdk
VMware 兼容镜像格式(对版本 1 和 2 的读写支持),对版本 3 具有只读访问权限。
vpc
Windows 虚拟 PC 磁盘映像格式.也称为 vhd 或 Microsoft 虚拟硬盘映像格式。
vvfat
虚拟 VFAT 磁盘镜像格式。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.