服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-24 简米科技 3,441 字 8 分钟阅读

虚拟机缩盘后空间没释放怎么办,磁盘缩容空间未释放如何解决

导读虚拟机缩小磁盘后空间没释放,问题多半不在客户机系统,而在虚拟化层:文件系统里删掉的数据,在宿主机看来仍是"写过的块",只有把这些块真正归零,再让 vmdk、qcow2 或云盘做一次回收动作,容量才会掉下来,先弄清楚:空间到底卡在哪一层很多人的第一反应是"我明明删了几十 G 日志,怎么宿主机一点没变",原因很简单……

虚拟机缩小磁盘后空间没释放,问题多半不在客户机系统,而在虚拟化层:文件系统里删掉的数据,在宿主机看来仍是"写过的块",只有把这些块真正归零,再让 vmdk、qcow2 或云盘做一次回收动作,容量才会掉下来。

先弄清楚:空间到底卡在哪一层

很多人的第一反应是"我明明删了几十 G 日志,怎么宿主机一点没变",原因很简单,磁盘空间有三层账本,三层对不上是常态。

三层账本,别再混着看

  • 客户机文件系统层:df -h 变小了,说明系统里确实腾出了空间,但这只是"记账",不等于物理块被清零。
  • 虚拟磁盘文件层:vmdk、qcow2、vhdx 这些文件只会变大不会自动变小,里面的块被标记为未使用,宿主机依然认为它们被占用。
  • 存储后端层:本地磁盘、iSCSI、FC、分布式存储,各自的回收机制完全不同,精简置备的 LUN 和厚置备的 LUN,走的是两套逻辑。

简单说,客户机删文件 = 图书馆把书从书架上拿走,但书架还占着地方,要真正腾出房间,得把书架也搬走。

快照是最常见的拦路虎

删了快照,容量却没回来,这种情况在运维工单里出现频率很高,快照是写时复制,母盘被锁定后,所有新写入都进 delta 文件,删除快照只是提交操作,合并过程需要时间和额外空间,尤其层级多、快照老了之后,合并可能卡住甚至失败。

判断方法很直接:查看虚拟机的快照树,确认没有残留;查看数据存储里是否存在大量 -000001.vmdk 之类的增量盘,有,就先把合并做完,再谈回收。

厚置备和精简置备,回收策略不一样

磁盘类型 空间分配方式 能否回收 典型操作
厚置备(Thick) 创建时一次性占满 基本不能 只能迁移或重建
厚置备延迟置零 先占空间,写时置零 迁移时可转精简 Storage vMotion
精简置备(Thin) 按实际写入增长 可以 零块打洞、磁盘压缩

表格摆出来就清楚了:如果你的盘一开始就是厚置备,那再怎么清理客户机,宿主机空间都不会动,这是设计使然,不是故障。

虚拟机缩小磁盘后空间没释放怎么办:按场景对症下药

Linux 虚拟机删了日志,vmdk 反而更大

这是个经典误会,删文件的同时如果还有进程握着句柄,空间根本不会释放,先用 lsof | grep deleted 查出被占用的句柄,重启对应进程(常见是 nginx、java 应用、数据库日志),df -h 才会真正下降。

然后是两个动作,任选其一:

  • fstrim 路线:确认虚拟磁盘挂载时带了 discard 支持,执行 fstrim -av,它会告诉底层"这些块不要了",精简置备盘配合支持 UNMAP 的存储,能直接回收。
  • zero 填充路线:老环境更保险,先用 dd if=/dev/zero of=/zero.fill bs=1M 把剩余空间写满零,再 rm -f /zero.fill,这一步会把未使用块真正写成零,为后续宿主机识别做准备。

Linux 虚拟机磁盘空间不足怎么清理:清理和回收是两件事

里这句话是很多人的搜索原话,但答案要拆开:清理解决"系统报警",回收解决"宿主机容量",清理完不回收,宿主机账本照样难看。

清理时优先看这几处:/var/log 下的轮转日志、/var/lib/docker 的镜像层、/tmp 的临时文件、数据库的 binlog 和 WAL,用 du -sh / | sort -rh | head -20 快速定位大户,清理完,记得回到上面的 zero 填充或 fstrim。

Windows 缩卷失败,卡在不可移动文件

Windows 磁盘管理里的"压缩卷",只能缩到卷中最后一个不可移动文件之后,页面文件、休眠文件、MFT 预留区、系统还原点,都会挡住收缩,常见表现是明明有 50G 空闲,却只能缩 3G。

处理顺序:

  • 关闭系统保护,删除旧还原点
  • powercfg -h off 关掉休眠文件
  • 把页面文件临时移到别的盘或设为无
  • 用 defrag C: /X 做一次合并,再尝试压缩卷

缩完之后还要做一步零填充,用 Sysinternals 的 sdelete64 -z C:,把空闲块写成零,否则宿主机依然看不到空间释放。

云服务器磁盘缩容价格怎么算,值不值得缩

云上的逻辑和本地不同,多数云厂商的系统盘不支持在线缩容,数据盘缩容通常要求先卸载、打快照、缩容、重新挂载,再扩容文件系统,价格方面,云盘一般按新容量重新计费,缩容后下一个计费周期生效,已支付的包年包月部分不一定退。

所以在云上,先算一笔账:缩容能省的钱,是否值得停机窗口和操作风险,如果只是几个 G 的差距,直接清理加换更小规格的盘,往往更省事,业内专家指出,云盘回收的瓶颈通常不在技术,而在变更窗口的审批成本。

北京地区自建机房托管的老机器

托管机房里的老设备,存储往往是厚置备 LUN,压根没有精简回收的概念,这种情况下,唯一可行的路径是把虚拟机迁到新存储,或者重建虚拟磁盘再把数据拷过去,北京地区不少机房仍在使用早期 SAN 架构,运维人员遇到这类问题,别在客户机里反复折腾,先确认后端存储是否支持 UNMAP。

VMware虚拟机磁盘扩容后怎么缩小:顺序反了会丢数据

扩容容易缩容难,难点在顺序,行业共识认为,缩容的风险远高于扩容,任何一步顺序错,都可能让文件系统直接损坏。

LVM 的正确收缩顺序

  1. 卸载文件系统,或至少切到单用户模式
  2. e2fsck -f /dev/vg/lv 强制检查
  3. resize2fs /dev/vg/lv 20G 先缩文件系统
  4. lvreduce -L 20G /dev/vg/lv 再缩逻辑卷
  5. pvresize /dev/sdb 最后缩物理卷
  6. 重新挂载,df -h 验证

顺序记住一句话:从内往外缩,从外往内扩,反过来就是数据灾难。

XFS 不能缩,只能备份重建

XFS 文件系统不支持缩小,这是硬限制,不是工具问题,遇到 XFS 需要缩容,只能新建一个更小的分区或逻辑卷,把数据同步过去,改 fstab,再删旧的,别信网上那些"XFS 缩容脚本",大概率是拿数据开玩笑。

宿主机侧的收尾动作

客户机处理完,回到虚拟化层:

  • 关机后执行 vmkfstools -K disk.vmdk,对零块打洞,只对精简置备有效
  • Workstation 环境用 vmware-vdiskmanager -k disk.vmdk
  • vSphere 环境可以直接 Storage vMotion 到另一个数据存储,迁移过程会自动丢弃零块
  • 迁移前务必确认没有快照,否则合并会拖慢整个流程

一次完整的回收流程清单

压缩成可执行步骤,照着走基本不会错:

  1. 确认虚拟磁盘是精简置备,厚置备直接跳到迁移方案
  2. 清理客户机无用文件,处理 deleted 句柄
  3. Linux 执行 fstrim 或 zero 填充;Windows 执行 sdelete -z
  4. 删除全部快照,等待合并完成
  5. 关机,执行 vmkfstools -K 或 vSphere 磁盘压缩
  6. 观察数据存储剩余容量,确认回收生效
  7. 需要缩分区时,按文件系统、逻辑卷、物理卷的顺序从内往外缩

近年来不少企业把回收动作写进了月度巡检,原因很实际:一台机器省几十 G,几十台就是几个 T,折算成存储采购预算并不小。

虚拟机磁盘空间回收常见问答

删了快照空间还是不回来,是坏了吗

不是坏了,是合并没完成,快照合并是后台任务,数据量大时可能持续数小时,可以去任务列表查看进度,也可以看数据存储里增量盘是否还在,如果增量盘长期不动,可能是底层存储空间不足导致合并卡住,需要先腾出空间再重试。

精简置备盘一定要关机才能回收吗

用 vmkfstools -K 必须关机,因为它直接操作磁盘文件,如果不方便停机,可以走 Storage vMotion,在线迁移过程中同样会丢弃零块,代价是需要额外的数据存储和迁移带宽。

为什么 Linux 执行了 fstrim,宿主机容量一点没变

三个常见原因:虚拟磁盘挂载时没启用 discard;后端存储不支持 UNMAP 或精简回收;磁盘本身是厚置备,前两个换 zero 填充可以绕过,第三个只能靠迁移或重建,判断顺序是先看挂载参数,再看存储类型,最后看磁盘格式。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱