linux服务器磁盘空间du和df那些事

df 显示磁盘 100%,du 却没占多少空间?真正原因就这三种情况!

          今天分享一下df与du的本质区别,并列举几个相关的常见磁盘处理案例。

1 df 与 du 的本质区别

命令工作原理显示内容
df读取 文件系统元数据统计磁盘分区整体使用情况(包含“不可见”文件)
du遍历 实际目录树仅统计当前目录下用户可访问的文件大小

也就是说:du 是你能“看见”的,df 是磁盘系统“知道”的!

因为df与du都是为了查看磁盘使用情况,我画了个磁盘空间整体的排查流程图:
在这里插入图片描述
下面主要讲解du显示与df显示不一样可能潜在的三种常见原因

2 删除了文件但空间未释放

2.1 场景描述:

某个大日志文件被 rm 删除了;
但该文件仍被某个服务(如 Nginx、Java、Python 等)占用;
df 显示空间没释放,而 du 看不到这个文件了!

2.2 如何验证?
lsof | grep deleted
2.3 解决方案:

杀掉占用文件的进程

kill -9 进程ID

或者重启服务(推荐)

systemctl restart 服务名

3 挂载点覆盖了原数据

3.1 场景描述:

原本写入 /data 下的大文件;
后来你挂载了一个磁盘到 /data,把原来的内容“遮住”了;
du 只看到挂载后的目录内容,df 依然计算之前“被遮挡”的那部分。
在这里插入图片描述

3.2 如何验证?

检查当前挂载

mount | grep data

查看原始挂载点所在目录

umount /data
ls -lh /data  # 你可能会看到消失的大文件
3.3 解决方案:

1、临时卸载该目录;
2、删除原本隐藏的大文件;
3、或者创建一个新目录挂载点(避免覆盖):
4、重新挂载新挂载点上。
5、更新 fstab,设置永久挂载

4 inode 耗尽

4.1 场景描述:

df 显示还剩几 G;
但无法创建新文件,提示 No space left on device;
原因其实是 inode 用完了!

4.2 检查 inode 使用情况
df -i

Filesystem      Inodes   IUsed  IFree IUse% Mounted on
/dev/sda1       655360  655360      0  100% /
4.3 排查哪个目录有大量小文件
find /var -type f | wc -l
4.4 解决方案:

清理缓存目录,如:

rm -rf /var/cache/*

优化程序避免大量小文件;
考虑用 xfs 等 inode 更宽裕的文件系统。

看到这里了,有用的话就留个关注和赞吧~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值