一、在虚拟机中

在虚拟机的使用过程中,虚拟机内的文件经过大量的增、删、改等操作后,会使得虚拟机磁盘的体积变大。即使删除了虚拟机内的文件,已经分配给虚拟磁盘的空间却并不会被回收。不过我们可以进行手动回收这些虚拟机没有使用的空间,只要用0字节数据写满磁盘再删了就可以了。

linux 中

dd if=/dev/zero of=/home/tmp
rm -rf /home/tmp

执行这个命令的目的,是把虚拟磁盘内部所有未被占用的空间用 0 字节填充
/home/tmp为在需要填充硬盘目录下的临时文件。

windows 中

windows中没有这样的命令,但是可以使用fsutil file遍历创建0字节文件。可以用下面bat脚本完成

@echo off
set "target=.DiskFill"  REM 目标路径(可根据需求修改)
set "minSize=1073741824" REM 最小文件大小,磁盘最后剩余空间不大于这个值(单位:GB)

REM 创建目标目录
if not exist "%target%" mkdir "%target%"
cd /d "%target%"

:loop
REM 生成唯一文件名并创建文件
set "fileName=file_%random%%random%.dat"
fsutil file createnew "%fileName%" %minSize% >nul 2>&1

REM 检查结果
if %errorlevel% equ 0 (
    echo 成功创建:%fileName% (%minSize% GB)
    goto loop
) else (
	cd ..
	rd /s /Q %target%
	echo 磁盘已被0字节填充完成!
    pause
)

二、在pve宿主机上

qemu-img convert -c -O qcow2 vm-100-disk-0.qcow2 vm-db-backup.qcow2

vm-100-disk-0.qcow2 为需要备份的磁盘文件

三、导入qcow2硬盘

qm importdisk  100 /home/vm-100-disk-0.qcow2 local  --format=qcow2 
  • 100:vm的id
  • /home/vm-100-disk-0.qcow2:磁盘镜像路径和文件名
  • local: 存储磁盘镜像的位置
  • qcow2 : 磁盘镜像格式

导入后能在虚拟机后台硬件页面看到一个未使用的磁盘,添加就可以了