Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

21.14. virt-sparsify:回收 Empty 磁盘空间

virt-sparsify 命令行工具可用于生成虚拟机磁盘(或任何磁盘镜像)稀疏。这也被称为精简配置。磁盘镜像上的可用磁盘空间转换为主机上可用空间。
virt-sparsify 命令可以处理大多数文件系统,如 ext2、ext3、ext4、btrfs、NTFS。它还可用于 LVM 物理卷。virt-sparsify 可以针对任何磁盘镜像操作,而不只是虚拟机磁盘镜像。
警告
使用 virt-sparsify on live 虚拟机或与其他磁盘编辑工具同时存在,可能会导致磁盘崩溃。在使用 此命令之前,必须 关闭虚拟机。另外,不应同时编辑磁盘镜像。
命令也可用于在某些磁盘格式间进行转换。例如,virt-sparsify 可以将原始磁盘镜像转换为精简置备的 qcow2 镜像。
注意
如果虚拟机有多个磁盘并使用卷管理,virt-sparsify 将正常工作,但它不会非常有效。
如果输入是 raw,则默认输出为 raw sparse。输出镜像的大小必须使用了解稀疏性的工具进行检查。
$ ls -lh test1.img
-rw-rw-r--. 1 rjones rjones 100M Aug  8 08:08 test1.img
$ du -sh test1.img
3.6M   test1.img
请注意,ls 命令将映像大小显示为 100M。但是,du 命令可以正确地显示到 3.6M 的镜像大小。

重要限制

以下是一些重要限制列表:
  • 在使用 virt-sparsify 前必须关闭虚拟机
  • 在最糟糕的情况中,virt-sparsify 可能需要最多 2 个源磁盘镜像的虚拟大小。用于临时复制,另一个用于目标镜像。
    如果您使用 --in-place 选项,则不需要大量的临时空间。
  • virt-sparsify 无法用于调整磁盘镜像大小。要重新定义磁盘镜像大小,请使用 virt-resize。有关 virt-resize 的详情请参考 第 21.8 节 “virt-resize:重新定义虚拟机大小”
  • virt-sparsify 无法使用加密磁盘,因为加密磁盘无法被解析。
  • virt-sparsify 无法对分区之间的空间进行解析。此空间通常用于引导加载程序等关键项目,因此这不是实际未使用的空间。
  • 复制 模式中,qcow2 内部快照不会复制到目的地镜像。

示例

要安装 virt-sparsify,请运行以下命令之一:
# yum install /usr/bin/virt-sparsify
# yum install libguestfs-tools-c
sparsify 一个磁盘:
# virt-sparsify /dev/sda1 /dev/device
/dev/sda1 的内容复制到 /dev/device,使输出稀疏。如果 /dev/device 已存在,它会被覆盖。已检测到 /dev/sda1 格式,并用作 /dev/device 的格式。
在格式间进行转换:
# virt-sparsify disk.raw --convert qcow2 disk.qcow2
尝试在源磁盘镜像中找到的每个文件系统上归零并报出可用空间。
要防止特定文件系统上的零覆盖可用空间:
# virt-sparsify --ignore /dev/device /dev/sda1 /dev/device
从磁盘镜像中的所有文件系统创建稳定的磁盘映像,而不会用零覆盖文件系统上的可用空间。
在不创建临时副本的情况下生成磁盘镜像稀疏:
# virt-sparsify --in-place disk.img
使指定的磁盘镜像稀疏,覆盖镜像文件。

virt-sparsify 选项

以下命令选项可用于 virt-sparsify:

表 21.4. virt-sparsify 选项

命令 描述 示例
--help 显示有关特定命令或 virt-sparsify 实用程序的简短帮助条目。详情请查看 virt-sparsify man page。 virt-sparsify --help
--check-tmpdir ignore|继续|warn|失败 估计,如果 tmpdir 有足够的空间来完成操作。如果没有足够的空间来完成操作,则指定选项将决定该行为。
  • 忽略 :该问题将被忽略,并且操作继续进行。
  • 继续 :报告错误,并且操作将继续。
  • warn:报告错误并等待用户按 Enter 键。
  • 失败 :报告错误并中止操作。
这个选项不能与 --in-place 选项一起使用。
virt-sparsify --check-tmpdir ignore /dev/sda1 /dev/device
virt-sparsify --check-tmpdir continue /dev/sda1 /dev/device
virt-sparsify --check-tmpdir warn /dev/sda1 /dev/device
virt-sparsify --check-tmpdir 失败 /dev/sda1 /dev/device
--compress 压缩输出文件。这只有在 输出格式是 qcow2 时有效。这个选项不能与 --in-place 选项一起使用。 virt-sparsify --compress /dev/sda1 /dev/device
--convert
使用指定格式创建稀疏镜像。如果没有指定格式,则使用输入格式。
支持以下输出格式并已知可以正常工作:raw、qcow、vdi
您可以使用 QEMU 模拟器支持的任何格式。
建议您使用 --convert 选项。这样,virt-sparsify 不需要猜测输入格式。
这个选项不能与 --in-place 选项一起使用。
virt-sparsify --convert raw /dev/sda1 /dev/device
virt-sparsify --convert qcow2 /dev/sda1 /dev/device
virt-sparsify --convert other_format indisk outdisk
--format 指定输入磁盘镜像的格式。如果没有指定,则会从镜像中检测到格式。在使用不受信任的原始格式客户机磁盘镜像时,请确保指定格式。
virt-sparsify --format raw /dev/sda1 /dev/device
virt-sparsify --format qcow2 /dev/sda1 /dev/device
--ignore
忽略指定的文件系统或卷组。
当指定文件系统且未指定 --in-place 选项时,文件系统的可用空间不会为零。但是,现有零块被 sparsified。当指定 --in-place 选项时,该文件系统将完全忽略。
当指定卷组时,卷组将被忽略。应该在没有 /dev/ 前缀的情况下使用卷组名称。例如: --ignore vg_foo
--ignore 选项可以多次包含在命令中。
virt-sparsify --ignore filesystem1 /dev/sda1 /dev/device
virt-sparsify --ignore volume_group/dev/sda1 /dev/device
--in-place
使镜像稀疏原位,而不是制作临时副本。虽然原位问题比复制问题更高效,但它不能像复制差异一样恢复太多的磁盘空间。使用丢弃(也称为 trim 或 unmap)支持进行原位升级。
要使用原位解析,请指定一个要进行替换的磁盘镜像。
当指定原位升级时,无法使用以下选项:
  • --convert--compress,因为它们需要批量磁盘格式更改。
    --check-tmpdir,因为不需要大量临时空间。
virt-sparsify --in-place disk.img
-x 启用 libguestfs API 调用追踪。 virt-sparsify -x filesystem1 /dev/sda1 /dev/device
如需更多信息,包括附加选项,请参阅 libguestfs.org