Linux虚拟机清理后磁盘空间为什么没释放呢,怎么解决?

Linux虚拟机清理后宿主机磁盘空间没减少,核心原因是虚拟磁盘文件(qcow2、vmdk)在文件系统层删除数据时并不会自动返还底层块,你需要手动执行trim命令后用镜像工具重写文件,才能真正把空间还给宿主机。接下来这套流程我会按“为什么没释放怎么清guest内空间怎么压qcow2怎么验证常见疑问”的顺序讲完,全部是能直接照做的命令。

为什么Linux虚拟机删了文件,磁盘空间却不释放?

先理解根因,否则你会在错误的方向上反复折腾。

【虚拟机必看】三种方法教你轻松回收虚拟机磁盘空间,释放宝贵硬盘容量!
加载中
【虚拟机必看】三种方法教你轻松回收虚拟机磁盘空间,释放宝贵硬盘容量!

qcow2这类动态虚拟磁盘采用稀疏文件结构,guest里往盘上写数据时,宿主机的qcow2文件才逐渐变大;而guest里删除文件时,只是把文件系统里的索引标记清掉了,底层那些数据块依然留在qcow2文件里,也就是说,虚拟磁盘只会膨胀,不会自动收缩,你在guest里执行rm -rf,宿主机上的qcow2文件尺寸并不会因此减小。

另外一个常见误判是把ls -lh输出当成实际占用。ls -lh显示的是文件的逻辑大小(virtual size),而宿主机真正占用的磁盘空间要看du -h,例如一个虚拟磁盘配置了200G,ls -lh显示200G,但这并不代表它占用了宿主机200G,实际占用应以du和qemu-img info里的disk size为准。

已删除文件仍被进程占用,空间根本无法释放

还有一种和虚拟磁盘无关的情况:进程打开了某个文件并持续写入,而文件已被rm删除,此时df -h看到的空间占用始终不下降,因为文件句柄还活着,用lsof +L1可以查出这类被删除但未释放的文件:

lsof +L1 | grep deleted

有结果的话,重启对应服务或进程,空间就会立刻回来,这一步应该在所有清理动作之前做,因为后面讲到的trim指令对这类占用也无效。

Linux虚拟机磁盘空间不释放怎么办?三步根治法

在guest内部做三件事:发trim指令回收空闲块、清掉日志和缓存垃圾、杀掉占用已删文件的进程,这套操作不依赖宿主机工具,任何KVM、VirtualBox、VMware虚拟机都适用。

执行fstrim,让文件系统主动告知底层哪些块已空闲

ext4、xfs、btrfs都支持手动trim,命令是:

sudo fstrim -av

-a表示对所有已挂载文件系统执行,-v输出详细结果,执行后,文件系统会向块设备层发送discard指令,qcow2镜像内部未使用的块就会被标记为空洞,这为后续压缩打好了基础。

Linux虚拟机清理后磁盘空间为什么没释放呢,怎么解决?

先检查自己的文件系统是否支持trim:

lsblk -D

输出中DISC-GRAN和DISC-MAX两列不是0,说明设备支持discard,如果命令报错或提示不支持,说明后端磁盘类型(比如某些旧版virtio驱动)不支持在线trim,可以尝试更新虚拟机内核和驱动后再做,swap分区不支持fstrim,这个下面单独讲。

清掉日志、包缓存和容器镜像,避免垃圾数据继续占位

trim回收的是“已经释放但未归还”的块,如果垃圾文件本身还存在,trim并不能帮你减肥,先压缩这些常见占用源:

  • 系统日志:sudo journalctl --vacuum-size=200M,把journal日志控制在200M以内,也可以用--vacuum-time=7d只保留最近7天。
  • 包缓存:Debian系执行sudo apt clean,RedHat系执行sudo yum clean all。
  • 容器环境:如果你的虚拟机承担Docker职责,检查/var/lib/docker目录,多数情况下docker system prune -af --volumes能回收相当一部分镜像层和悬空卷。
  • 临时目录:/tmp、/var/tmp下的大文件按需手动清理。

清理完成后再次执行sudo fstrim -av,这一步常在删除大量文件之后被遗漏。

处理占用已删除文件的进程

如果lsof +L1有输出,用kill重启对应进程,常见场景是日志服务持有一个被logrotate删除的文件句柄,重启rsyslog或journald后空间立即下降,不要用rm -rf硬删这种文件,正确做法是让服务自己轮转,或者直接重启服务。

qcow2镜像文件如何压缩?host端命令行实操

guest内的fstrim做完了,qcow2文件内部的空洞已经标记好,但宿主机上的qcow2文件体积仍是原样,因为trim只改元数据,不改变文件尺寸,真正的压缩要在宿主机上重写镜像。

转换前必须检查快照、挂载状态与容量

在宿主机上执行:

qemu-img snapshot -l /path/to/your.qcow2

如果列出了快照,convert过程会把快照扁平化,旧快照内的数据会合入新镜像,体积可能不减反增,有业务保留价值的快照建议先删除或单独备份,当前有虚拟机挂载该镜像时不能直接覆盖转换,最好关机后用宿主机维护窗口操作。

再确认宿主机剩余空间,转换会生成一个新文件,容量至少需要原镜像实际占用大小的1.2倍,压缩效果越好,需要空间越大,用

Linux虚拟机清理后磁盘空间为什么没释放呢,怎么解决?

qemu-img measure预估:

qemu-img measure -O qcow2 /path/to/your.qcow2

输出的required大小就是新镜像最少需要的空间,预留不足时先清理宿主机上的临时文件,或者把新镜像写到另一块磁盘上。

执行qemu-img convert,把稀疏空洞真正写出来

qemu-img convert -p -O qcow2 /path/to/your.qcow2 /path/to/your-new.qcow2

-p显示进度条,-O指定输出格式,执行完毕后,用qemu-img info看新镜像:

qemu-img info /path/to/your-new.qcow2

重点看disk size这一项,它应该明显小于原镜像,确认无误后,把旧镜像改名留作备份,将新镜像放到原路径,启动虚拟机做一次完整读写测试,虚拟机的轻量备份场景里,qcow2镜像文件如何压缩是一个高频需求,上面这套流程就是标准答案。

和virt-sparsify对比,谁更适合你?

libguestfs工具包里的virt-sparsify也能做类似工作,且对raw和部分分区结构处理更细,两者的差异如下:

对比项 qemu-img convert virt-sparsify
安装依赖 仅qemu-utils,极轻量 需安装libguestfs,依赖较重
支持的格式 qcow2、raw、vmdk等主流格式 raw、qcow2,vmdk支持有限
内部快照处理 扁平化合并,快照结构丢失 不支持带快照镜像,直接报错
零块识别 自动识别稀疏空洞 能识别更多类型的零块,压缩率更好
操作复杂度 简单直接 参数略多,但也能一条命令完成

我的建议是日常qcow2场景用convert足够,遇到raw镜像或者空洞识别不彻底时再换virt-sparsify,行业共识认为,越简单的工具越不容易在维护窗口出岔子。

隐藏的占用也别忘了:swap分区与btrfs快照

fstrim对swap分区无效,而swap在虚拟机里经常占据可观空间,清理方法如下:

sudo swapoff /dev/vg/swap-lv
sudo dd if=/dev/zero of=/dev/vg/swap-lv bs=1M status=progress
sudo mkswap /dev/vg/swap-lv
sudo swapon /dev/vg/swap-lv

用dd把整个swap设备填零,qcow2的稀疏结构才能把这块“全零区域”折叠掉,填零完成后,新镜像会比原来小不少。

对于btrfs文件系统的虚拟机,快照也占用实际存储,先看快照列表:

Linux虚拟机清理后磁盘空间为什么没释放呢,怎么解决?

btrfs subvolume list /
btrfs subvolume delete /path/to/@snapshot_name

删除快照后同样执行fstrim -av,让释放的块回归镜像空洞。

怎么确认空间真的释放了?四个指标对照

压缩完成后别急着收工,用四个数字对照判断:

  • guest内df -h:看文件系统已用空间是否下降。
  • 宿主机ls -lh:看qcow2逻辑大小,这个值基本不变。
  • 宿主机du -h:看qcow2实际占用,压缩后这个值应明显下降。
  • qemu-img info:看virtual size与disk size的差值,差值越大说明稀疏化收益越明显。

这套指标组合的通吃场景很多,比如在珠海某单位的KVM机房排查空间告警时,就是靠du和qemu-img info的对比定位到大镜像文件的,少数情况下,fstrim执行成功但convert后体积无变化,多是由于虚拟机内做过大量覆盖写而非删除操作,覆盖写不会产生空洞,压缩空间自然有限,顺便提一句,市面上第三方运维对虚拟机空间瘦身的报价通常按回收容量计费,但自己掌握这套流程成本更低。

常见问题:Linux虚拟机释放磁盘空间的典型疑问

fstrim执行完毕后,qcow2文件大小为什么没变?

正常现象,因为fstrim只在guest内标记空闲块,并未修改qcow2文件本身,必须在宿主机上运行qemu-img convert或virt-sparsify重写镜像,宿主机上的文件才能真正收缩,另外注意检查fstrim运行结果中是否有报错,部分文件系统挂载参数未开启discard也不会影响手动fstrim,只有在设备根本不支持时才会失败。

qemu-img convert和virt-sparsify压缩原理一样吗?

不完全一样,convert是整体重写文件,保留稀疏空洞;virt-sparsify会额外扫描文件系统中的零块并忽略它们,压缩率通常更高,convert适合中小镜像,virt-sparsify适合大镜像或raw转qcow2场景,但virt-sparsify依赖libguestfs环境且不支持快照镜像,cine场景还是老老实实先用convert。

虚拟机运行中可以直接执行压缩吗?

fstrim可以在线执行,但qemu-img convert必须离线,在线状态下压缩qcow2需要对后端块设备做blockcommit或blockdev-mirror,操作复杂度高且容易损坏数据,我建议把压缩放进虚拟机维护窗口,如果无法停机,可以先对磁盘做在线快照,然后在另一个存储池上基于快照做convert,完成后在维护窗口切换磁盘文件。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/linux%e8%99%9a%e6%8b%9f%e6%9c%ba%e6%b8%85%e7%90%86%e5%90%8e%e7%a3%81%e7%9b%98%e7%a9%ba%e9%97%b4%e4%b8%ba%e4%bb%80%e4%b9%88%e6%b2%a1%e9%87%8a%e6%94%be%e5%91%a2%ef%bc%8c%e6%80%8e%e4%b9%88%e8%a7%a3/

赞 (0)
cloudatcost月付1美元512m内存够用吗,能干啥
上一篇 2026年9月8日 08:03
铁路局都配了什么服务器,具体有哪些用途?
下一篇 2026年9月8日 08:07

相关推荐

  • 开发强度计算方法有哪些?开发强度计算公式详解

    开发强度计算的核心结论在于精准量化土地利用效率与生态承载力的平衡点,其数值直接决定了城市规划的科学性与可持续性,这一指标并非简单的数学运算,而是融合了容积率、建筑密度、绿地率等多维数据的综合评价体系,专业且精准的计算过程,是规避城市无序蔓延、保障人居环境质量的关键决策依据,也是落实国土空间规划“一张图”管理的技……

    2026年3月15日
    12300
  • 公司网络白名单怎么设置?如何配置企业上网白名单

    公司网络白名单在数字化转型的深水区,企业网络安全已从“被动防御”转向“主动管控”,公司网络白名单不仅是防火墙的一道防线,更是数据合规与业务连续性的基石,许多企业在部署服务器时,往往忽视了白名单机制对带宽利用率、访问延迟及潜在攻击面缩减的决定性影响,本文将深入剖析当前主流服务器架构下的白名单策略,结合真实环境下的……

    2026年6月24日
    3400
  • Ddos防护真的能防住所有攻击吗?Ddos防护原理是什么

    关于ddos防护的5大常见误解在云计算和服务器托管日益普及的今天,DDoS(分布式拒绝服务)攻击已成为威胁业务连续性的首要风险,市场上充斥着大量关于DDoS防护的误导性宣传,许多站长和运维人员因认知偏差而面临巨大的安全隐患,本文基于真实的服务器测评数据与行业实战经验,深度解析关于DDoS防护的五大常见误解,帮助……

    2026年6月15日
    3700
  • CMOS图像传感器技术全解析?CMOS传感器和CCD区别

    关于cmos图像的所有技术信息在服务器硬件架构与高性能计算领域,CMOS图像传感器(CMOS Image Sensor, CIS)的技术演进正以前所未有的速度重塑数据中心、边缘计算及自动驾驶集群的视觉处理能力,对于服务器架构师、AI算法工程师以及数据中心运维人员而言,深入理解CMOS底层技术不仅是优化视觉流水线……

    2026年6月15日
    5010
  • Java反射机制到底有什么用?Java反射机制详解

    关于Java反射的问题在服务器性能测评的语境下,探讨“Java反射”并非仅仅是一个编程语言特性的技术问题,而是直接影响企业级应用部署效率、运行时性能以及资源消耗的关键因素,对于正在寻找高性能、低延迟服务器解决方案的企业开发者而言,理解反射机制对服务器负载的影响,是评估服务器是否适合运行复杂Java应用(如Spr……

    2026年6月15日
    3100
  • 云服务器数据内部人员能窃取吗,云服务器数据安全如何保障

    云服务器上确实存在”数据内部人员”这个角色,但他们在严格的安全机制和多层权限管控下,能触碰你数据的概率极低,且每一次操作都会留下无法抹除的审计痕迹,真正需要盯防的风险,往往不在机房内部,而是你账号侧的安全习惯,云服务器数据内部人员到底是谁很多朋友一听”内部人员”这四个字,脑海里浮现的都是电影里那种抱着硬盘跑路的……

    2026年10月8日
    100
  • 数据库二次开发是什么,数据库二次开发怎么做

    数据库二次开发是企业在数字化转型后期释放数据潜能、解决标准化软件与个性化业务脱节问题的关键路径,其核心价值在于以最低的成本实现系统功能的深度适配与性能的极致优化,而非推倒重建,企业通过二次开发,能够将通用的数据库管理系统转化为贴合行业特性与内部流程的专属利器,从而在激烈的市场竞争中获得数据治理的主动权,核心结论……

    2026年3月28日
    9900
  • 公司智能建站怎么操作?智能建站系统哪家好

    公司智能建站在数字化转型的浪潮中,网站不仅是企业的线上名片,更是业务增长的核心引擎,许多企业在构建智能建站系统时,往往忽视了底层基础设施的稳定性与安全性,服务器作为网站的“心脏”,其性能直接决定了网站的加载速度、并发处理能力以及数据安全性,本文将深入测评几款主流云服务器,并结合2026年的最新市场动态,为企业选……

    2026年6月28日
    1800
  • 主流开发板有哪些?2026年最值得入手的开发板推荐

    在当前的嵌入式开发与物联网领域中,选择一款合适的硬件平台是项目成功的基石,核心结论在于:目前市场上的主流开发板已形成明显的梯队分化,开发者应依据“性能冗余度、生态成熟度、开发效率”三大维度进行决策,而非单纯追求高算力, 对于初学者,生态完善的入门级板卡是首选;对于工程落地,算力充足且支持实时系统的工业级板卡才是……

    2026年3月22日
    20500
  • mac终端怎么连接虚拟主机?mac终端连接虚拟主机详细教程

    关于使用mac终端连接虚拟主机在数字化转型的浪潮中,服务器稳定性与连接效率已成为企业建站的核心痛点,对于广大Mac用户而言,终端(Terminal)不仅是开发者的利器,更是直接管理云端资源的桥梁,许多用户在实际操作中发现,从macOS终端连接虚拟主机时常遇到延迟高、配置复杂或安全证书报错等问题,这不仅影响了开发……

    2026年6月2日
    3900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注