虚拟机里删了文件,宿主机上的磁盘文件通常不会自动变小;只有触发TRIM/UNMAP、精简置备回收或删除虚拟磁盘文件,空间才可能真正回到宿主机可用容量。
很多人遇到过这种场景:虚拟机上df -h看根分区从90%降到30%,回到宿主机df -h一看,那个qcow2、vmdk或vhdx还是原来那么大,不是删除没生效,而是你删的是虚拟机文件系统里的逻辑块,宿主机看到的虚拟磁盘文件并没有同步瘦身,把这三层账本分开看,问题就清楚了。
虚拟机磁盘删除后宿主机空间会释放吗?先拆三层空间账
虚拟机文件系统、虚拟磁盘文件、宿主机存储池
- 第一层是虚拟机内部文件系统,你在Linux里执行
rm,在Windows里清空回收站,改的是文件系统元数据。 - 第二层是虚拟磁盘文件,KVM常见qcow2、raw,VMware是vmdk,Hyper-V是vhdx,这个文件住在宿主机上,虚拟机把它当硬盘用。
- 第三层是宿主机存储池,可能是本地ext4、XFS,也可能是LVM、LVM-Thin、ZFS、Btrfs,或者VMFS、NFS、iSCSI、Ceph。
业内专家指出,虚拟磁盘一旦被写满,文件系统层面的删除只是逻辑删除,宿主机不知道哪些块已经空闲,除非虚拟机主动告诉它。
为什么删了文件,宿主机df没变?
- qcow2、vmdk、vhdx这类文件增长后,默认不会因为内部文件删除而自动缩小。
- 快照会锁住旧数据块,你删了文件,快照里还留着旧块,空间自然回不来。
- 厚置备磁盘一开始就占满容量,删文件不影响宿主机占用。
- LVM、ZFS、Btrfs如果没有开启discard或autotrim,宿主机存储池也不会立即回收。
- 云盘多数按容量计费,删除文件不改变云盘容量,缩容还常有限制。
哪些情况能自动回收
- 虚拟机磁盘控制器支持discard,比如VirtIO-SCSI、VMware Paravirtual。
- 虚拟机内安装了VMware Tools、Hyper-V集成服务,并开启TRIM/UNMAP。
- 存储后端支持精简置备,且没有快照阻挡。
- ESXi较新版本可自动UNMAP,但仍受数据存储和快照影响。
行业共识认为,精简置备必须配合TRIM/UNMAP才有回收意义,否则只是“看起来省”,实际占用仍可能膨胀。
KVM虚拟机删除了磁盘空间没释放怎么办
检查qcow2、LVM与discard支持
先别急着删盘,按顺序查:
qemu-img info disk.qcow2看虚拟磁盘大小和实际占用。df -h看宿主机文件系统剩余空间。lvs、vgs、pvs看LVM和Thin Pool使用率。lsblk -D看队列是否支持discard。virsh domblklist vm-name确认磁盘路径。
如果qcow2是精简置备,但虚拟机里删除后宿主机文件仍不变,说明discard没传下去。
虚拟机内执行TRIM,再压缩qcow2
Linux虚拟机内执行:
fstrim -av- 或者对特定挂载点执行
fstrim -v /
Windows虚拟机可在“优化驱动器”里对磁盘执行优化,或使用defrag /L触发Retrim,确认虚拟机磁盘总线是VirtIO-SCSI或SCSI,且discard=unmap已启用。
更彻底的方式是关机压缩:
- 关闭虚拟机。
- 执行
qemu-img convert -O qcow2 -c disk.qcow2 disk-new.qcow2。 - 备份原盘后,用新盘替换旧盘。
- 启动虚拟机,检查
qemu-img info里的实际占用。
-c会压缩数据,但需要额外空间,生产环境先做快照或备份。
删除快照和孤立卷
快照是空间回收的常见拦路虎,执行:
virsh snapshot-list vm-namevirsh snapshot-delete vm-name snap-namelvs查看是否有孤立逻辑卷。lvremove删除确认无用的卷。
删快照会合并数据,耗时可能较长,不要在业务高峰期硬来。
VMware精简置备释放空间对比厚置备:谁更省宿主机容量
三种VMDK格式差异
| 磁盘格式 | 删除文件后宿主机空间 | 回收方式 | 主要限制 |
|---|---|---|---|
| 精简置备 | 可能自动或手动回收 | UNMAP、vmkfstools -K |
快照会阻止回收 |
| 厚置备延迟置零 | 不会自动缩小 | Storage vMotion到精简置备 | 需要额外空间 |
| 厚置备立即置零 | 不会自动缩小 | 迁移到精简置备 | 初始占用高 |
回收命令与快照陷阱
在ESXi主机上,可对精简磁盘执行:
vmkfstools -K /vmfs/volumes/datastore1/vm/disk.vmdkesxcli storage vmfs unmap -l datastore1
执行前确认虚拟机已关机,且没有未合并快照,快照链越长,回收越慢,把快照合并完,再谈空间释放。
厚置备转精简置备的条件
厚置备磁盘不会因为虚拟机内删文件而变小,想让空间回到数据存储,通常要用Storage vMotion迁移到精简置备格式,迁移过程中需要目标存储有足够空闲容量,若数据存储本身接近满,先扩容或清理无关快照。
Hyper-V、Proxmox与云主机场景:空间到底回没回
Hyper-V动态VHDX回收
Windows虚拟机内可以执行磁盘优化,宿主机侧关机后执行:
Optimize-VHD -Path D:VMsvmdisk.vhdx -Mode Full
该命令只适用于动态VHDX,且虚拟机需关机,固定VHDX不会缩小,若使用Hyper-V副本或检查点,先合并检查点。
Proxmox LVM-Thin与ZFS回收
Proxmox下常见LVM-Thin和ZFS:
- 虚拟机内执行
fstrim -av。 - 宿主机检查
lvs、zpool list。 - ZFS可执行
zpool trim pool-name。 - LVM-Thin确认
issue_discards和虚拟机discard设置。
如果用的是raw文件,删除文件后宿主机文件大小不变,除非底层文件系统支持稀疏文件和discard。
云服务器退订后本地磁盘空间去哪了
云服务器退订后,本地盘通常随实例释放,云盘则要看产品规则:有的需要手动删除,有的会保留一段时间,云盘价格按容量和类型计,删除文件不等于降低容量,多数云盘不支持在线缩容,想省钱只能新建小盘迁移数据。
据主流云厂商公开文档,云盘缩容往往需要停机、快照、新建盘、迁移数据,再释放旧盘。
华东地区企业虚拟化环境里的虚拟机迁移后磁盘空间回收
华东地区不少企业用VMware、KVM、Proxmox混合集群,迁移后旧卷残留、备份快照、存储阵列Thin Pool未回收,都会让宿主机磁盘占用高,可按下面清单查:
lvs、vgs、pvs看宿主机LVM是否残留。esxcli storage core device list看VMware设备状态。- 存储阵列侧检查Thin Pool、LUN和回收策略。
- 备份软件检查是否遗留快照或挂载点。
- 监控平台对比迁移前后容量曲线,别只看虚拟机内
df。
地域不是关键,存储层是否支持UNMAP、快照是否清理才是。
虚拟机空间释放后宿主机磁盘占用高怎么解决?Q&A
为什么虚拟机里删了文件,宿主机df还是满的?
因为删除发生在虚拟机文件系统层,宿主机看到的是虚拟磁盘文件,虚拟磁盘文件不会自动缩小,需要TRIM/UNMAP、压缩qcow2、合并快照,或把厚置备迁移为精简置备。
云服务器退订后本地磁盘空间去哪了?
本地盘随实例释放,云盘按产品规则处理,删除文件不会改变云盘容量,缩容通常受限制,要回收成本,先确认云盘是否支持缩容,再迁移到更小容量。
KVM和VMware回收空间哪个更快?
支持自动UNMAP的VMware环境通常更省心,但快照会拖慢回收,KVM更依赖虚拟机内fstrim和手动qemu-img convert,没有快照、磁盘支持discard时,两者都能把空间还给宿主机存储池。
空间回没回,不看虚拟机里的df,要看宿主机存储层是否收到discard/unmap,以及虚拟磁盘文件是否被压缩或删除。 把TRIM、快照、置备类型三件事查清,多数“空间消失”都能找到账本。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/737504.html





