linux磁盘无法清理问题
问题描述:
今天看到磁盘告警了,登录上服务器查看
df -h
,看到磁盘占用了80%多,然后就是使用du -sh
对根下每个目录进行统计大小,却发现所有目录加起来也不过50G,但是使用df
的时候总共占了快200G
问题比较奇怪,通过deepseek搜了一些答案,但通过答案并没有解决,但是也获得一些提示,大概率是因为某个文件删除了但是空间没有释放,然后通过业务侧排查,发现该节点上有个服务的日志打得非常频繁,故猜测可能是此服务的问题,然后在业务低峰期重启了该服务,问题顺利解决,磁盘变为20%占用,但其中的深层次原因目前还不知道是什么
下面是deepseek推荐的一些解决方法(是否可以使用需结合生产环境实际情况):
1. 已删除但未释放的文件(最常见原因)
-
现象:文件被删除后,若仍有进程正在使用它,该文件占用的磁盘空间不会立即释放。
-
检查方法:
sudo lsof +L1 | grep deleted # 查看被删除但仍被进程占用的文件
-
解决方案:
- 重启持有文件的进程(或直接终止进程)。
- 系统重启后空间会自动释放。
2. 文件系统元数据和保留空间
-
文件系统开销:
df
统计的已用空间包括:- 元数据(inode 表、日志等)。
- 保留块(root 用户预留的空间,默认为总容量的 5%)。
-
查看保留空间(ext4 文件系统示例):
sudo tune2fs -l /dev/sdXX | grep "Reserved block count"
3. 挂载点覆盖
-
现象:根目录 (
/
) 下的子目录(如/home
、/var
)可能是独立挂载的分区。 -
影响:
df -h /
显示根分区的总使用量(150G)。du -sh /
不统计其他挂载点下的文件(如/home
的数据不计入 50G)。
-
检查方法:
df -hT # 查看所有挂载点及对应的分区 mount | grep "^/" # 查看根目录下的挂载点
4. 隐藏文件或权限限制
-
du
可能遗漏:- 无权限访问的文件(需用
sudo du -sh /
)。 - 挂载点下的隐藏文件(如
/proc
、/sys
等虚拟文件系统)。
- 无权限访问的文件(需用
-
验证命令:
sudo du -sh --exclude=/proc --exclude=/sys / # 排除虚拟文件系统
5. 稀疏文件(Sparse Files)
-
现象:文件实际占用磁盘空间小于逻辑大小(如虚拟机磁盘文件)。
-
影响:
du
报告实际占用空间,df
反映文件系统级别的使用量。 -
检查稀疏文件:
sudo find / -type f -printf "%S\t%p\n" | grep -v "^1.000000" # 查找稀疏文件
6. 文件系统错误或日志
-
日志文件:如 ext4 的 journal 日志可能占用空间。
-
文件系统损坏:罕见情况下需检查文件系统:
sudo fsck -f /dev/sdXX # 卸载分区后执行
排查步骤总结
- 检查挂载点:确认
du
是否漏计其他分区的数据。 - 查找未释放文件:
sudo lsof +L1 | grep deleted
。 - 使用
sudo
运行du
:确保统计所有文件。 - 排除虚拟目录:
sudo du -sh --exclude=/proc --exclude=/sys /
。 - 分析保留空间:
tune2fs -l /dev/sdXX
。
💡 提示:若差异由未释放文件引起,重启系统是最直接的解决方法。