You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根分区隐藏存储占用异常:无法定位占用文件

根分区隐藏存储占用异常:无法定位占用文件

这种情况真的挺闹心的——明明手动排查下来根分区没存多少东西,但df就是显示快满了,我之前处理过类似的问题,给你补充几个可能没覆盖到的排查方向:

1. 检查被挂载点覆盖的隐藏文件

你已经排查了挂载点,但有可能原本根分区下的挂载目录(比如/var、/home)在挂载独立分区之前就有文件,挂载后这些文件被隐藏了,但df依然会统计它们的占用。可以用bind挂载的方式绕过挂载点查看真实内容:

  • 创建临时目录:mkdir /tmp/root_real
  • 把根分区绑定挂载到临时目录:mount --bind / /tmp/root_real
  • 现在去/tmp/root_real下查看各个挂载点目录(比如/tmp/root_real/var),里面的文件就是被挂载覆盖的内容,用du -hs /tmp/root_real/var就能看到它们的大小
  • 排查完成后卸载临时挂载:umount /tmp/root_real

2. 检查ext4的默认保留空间

ext4文件系统默认会给root用户保留5%的磁盘空间,用来防止磁盘满时root无法进行应急操作。如果你的根分区很大(比如100GB以上),5%的空间就有5GB甚至更多,这部分空间du是统计不到的,但df会算进去:

  • 查看当前保留空间设置:tune2fs -l /dev/your-root-partition | grep "Reserved block count"(把/dev/your-root-partition换成你的根分区设备,比如/dev/sda1)
  • 如果觉得保留空间过多,可以调整比例,比如改成1%:tune2fs -m 1 /dev/your-root-partition

3. 排查进程持有的未被正确识别的大文件

你已经用lsof查了已删除但被进程占用的文件,但可以再细化一下排查:

  • 列出所有已删除且被进程持有的文件,重点看大小列:lsof +L1 | awk '{print $1, $2, $7, $9}' | sort -k3 -nr
  • 如果看到某个进程持有几个GB的大文件,可以重启对应的进程释放空间;如果是系统进程,可能需要重启服务器(你已经重启过,但可以确认下是不是重启后还是存在)

4. 检查文件系统是否存在错误

有时候文件系统损坏会导致df的统计数据异常,这种情况需要离线检查修复:

  • 可以用Debian安装盘进入Live模式,或者进入单用户模式(确保根分区未被挂载为读写)
  • 执行文件系统检查:e2fsck -f /dev/your-root-partition(-f表示强制检查,即使系统认为文件系统正常)

5. 统计根目录顶级目录的真实占用

用du直接统计根目录下所有顶级目录的总大小,和df的已用空间对比,看差值在哪里:

  • 执行命令:du -sch /* | sort -h
  • 如果du统计的总大小远小于df显示的已用空间,那差值部分基本就是上面提到的挂载覆盖文件、保留空间或者文件系统异常导致的

备注:内容来源于stack exchange,提问作者nifu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:09:32