Debian系统根分区df与du显示不一致,排查磁盘占用异常
Debian根分区df显示已满但du无大文件的排查方案
以下是针对这类问题的核心排查步骤,覆盖最常见的原因:
1. 排查被进程占用的已删除文件
Linux中,文件被删除但仍有进程持有打开句柄时,磁盘空间不会被释放,df会统计这部分占用,但du无法找到对应的目录项。
- 执行命令列出所有已删除但未释放的文件:
sudo lsof | grep deleted - 若要按占用大小排序,快速定位大文件:
sudo lsof | grep deleted | awk '{print $7, $9}' | sort -n -r - 处理方式:找到对应的进程(
lsof输出的第2列是PID),可以重启进程或发送SIGTERM信号终止(注意:核心服务如数据库需谨慎操作,建议先备份或切换到单用户模式)。
2. 检查挂载点下被覆盖的文件
如果根分区下的某个目录被挂载了其他文件系统(如/var、/home),挂载前该目录下的大文件会被隐藏,df会统计这部分空间,但du遍历会进入挂载的外部分区,无法统计原目录内容。
- 临时卸载挂载点(需确保该挂载点无正在运行的服务):
sudo umount /var # 替换为可疑的挂载点路径 - 检查原目录的空间占用:
sudo du -hs /var - 处理完成后重新挂载:
sudo mount /var - 注意:若挂载点正在被核心服务使用,建议进入单用户模式(启动时按
e编辑GRUB参数,添加init=/bin/bash)后操作。
3. 仅统计根分区本身的空间(排除其他挂载的文件系统)
默认du会遍历所有挂载的文件系统,可能导致统计结果混淆,使用-x参数限制仅统计当前文件系统:
sudo du -x / -h --max-depth=1
该命令会列出根分区下一级目录的实际占用,快速定位可疑目录。
4. 检查稀疏文件或特殊文件
稀疏文件(如虚拟机磁盘镜像)的ls显示大小远大于实际占用空间,但极端情况下可能导致df和du的差异。另外,需排除虚拟文件系统(如/proc、/sys)的干扰:
- 查找根分区下的大文件(排除虚拟文件系统):
sudo find / -xdev -type f -size +1G -exec ls -lh {} \; - 对比文件的实际占用与显示大小:
sudo du -h /path/to/suspicious/file
5. 补充:检查RAID状态(针对你的/dev/md2 RAID分区)
由于根分区是RAID设备,需确认RAID阵列状态正常,无异常占用:
- 查看RAID状态:
cat /proc/mdstat - 若阵列正在同步或存在故障,可能导致空间占用异常,需修复RAID后再排查。
内容的提问来源于stack exchange,提问作者Daphoque
相关产品推荐
相关产品推荐

