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

命令
工作原理
显示内容
df
读取 文件系统元数据
统计磁盘分区整体使用情况(包含“不可见”文件)
du
遍历 实际目录树
仅统计当前目录下用户可访问的文件大小
也就是说:du 是你能“看见”的,df 是占多正原磁盘系统“知道”的!
因为df与du都是云南idc服务商少空为了查看磁盘使用情况,我画了个磁盘空间整体的因种排查流程图:

下面主要讲解du显示与df显示不一样可能潜在的三种常见原因。
2. 删除了文件但空间未释放(1) 场景描述:
某个大日志文件被 rm 删除了;但该文件仍被某个服务(如 Nginx、显示Java、磁盘Python 等)占用;df 显示空间没释放,却没情况而 du 看不到这个文件了!占多正原(2) 如何验证?少空
复制lsof | grep deleted1.
(3) 解决方案:
复制# 杀掉占用文件的进程 kill -9 进程ID # 或者重启服务(推荐) systemctl restart 服务名1.2.3.4.5. 3. 挂载点覆盖了原数据(1) 场景描述:
原本写入 /data 下的大文件;后来你挂载了一个磁盘到 /data,把原来的因种内容“遮住”了;du 只看到挂载后的亿华云目录内容,df 依然计算之前“被遮挡”的显示那部分。
(2) 如何验证?磁盘
复制# 检查当前挂载 mount | grep data # 查看原始挂载点所在目录 umount /data ls -lh /data # 你可能会看到消失的大文件1.2.3.4.5.6.(3) 解决方案:
临时卸载该目录;删除原本隐藏的大文件;或者创建一个新目录挂载点(避免覆盖);重新挂载新挂载点上;更新 fstab,设置永久挂载4. inode 耗尽(1) 场景描述:
df 显示还剩几 G;但无法创建新文件,却没情况提示 No space left on device;原因其实是 inode 用完了!(2) 检查 inode 使用情况
复制df -i1. 复制Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 655360 655360 0 100% /1.2.(3) 排查哪个目录有大量小文件
复制find /var -type f | wc -l1.(4) 解决方案:
清理缓存目录,如:
复制rm -rf /var/cache/*1. 优化程序避免大量小文件;考虑用 xfs 等 inode 更宽裕的文件系统。亿华云计算(责任编辑:数据库)