virt-sparsify compress可以用来压缩释放虚拟机磁盘空间
virt-sparsify –compress ${ori_img_path} ${dest_img_path} 告警(WARNING)tmp不足。

 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
... ...
/dev/sda5       1.6T   88G  1.5T   6% /data

~]# mkdir /data/tmp
~]# chmod 1777 /data/tmp/
~]# export TEMP=/data/tmp
~]# export TMPDIR=/data/tmp
如此可以解决virt-sparsify 压缩镜像tmp空间不足的告警,但是该配置变量只在当前terminal生效,如果需要永久生效可以将变量编辑到/etc/profile里。
~]# echo 'export TEMP=/data/tmp' >> /etc/profile
~]# echo 'export TMPDIR=/data/tmp' >> /etc/profile
~]# source /etc/profile
# 备注:该配置影响全局

virt-sparsify:回收 Empty 磁盘空间

virt-sparsify 命令行工具可用于生成虚拟机磁盘(或任何磁盘镜像)稀疏。这也被称为精简配置。磁盘镜像上的可用磁盘空间转换为主机上可用空间。
virt-sparsify 可以针对任何磁盘镜像操作,而不只是虚拟机磁盘镜像。
警告
使用 此命令之前,必须 关闭虚拟机。另外,不应同时编辑磁盘镜像。
命令也可用于在某些磁盘格式间进行转换。例如,virt-sparsify 可以将原始磁盘镜像转换为精简置备的 qcow2 镜像。
注意
如果虚拟机有多个磁盘并使用卷管理,virt-sparsify 将正常工作,但它不会非常有效。
如果输入是 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
请注意,du 命令可以正确地显示到 3.6M 的镜像大小。

重要限制

以下是一些重要限制列表:
  • 在使用 前必须关闭虚拟机。
  • 在最糟糕的情况中,virt-sparsify 可能需要最多 2 个源磁盘镜像的虚拟大小。用于临时复制,另一个用于目标镜像。
    如果您使用 --in-place 选项,则不需要大量的临时空间。
  • 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/device 的格式。
在格式间进行转换:
disk.qcow2
尝试在源磁盘镜像中找到的每个文件系统上归零并报出可用空间。
要防止特定文件系统上的零覆盖可用空间:
/dev/sda1 /dev/device
从磁盘镜像中的所有文件系统创建稳定的磁盘映像,而不会用零覆盖文件系统上的可用空间。
在不创建临时副本的情况下生成磁盘镜像稀疏:
disk.img
使指定的磁盘镜像稀疏,覆盖镜像文件。

virt-sparsify 选项

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

virt-sparsify 选项

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