Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198680
  • 博文数量: 44
  • 博客积分: 1326
  • 博客等级: 少尉
  • 技术积分: 392
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-08 10:14
文章分类
文章存档

2015年(3)

2013年(1)

2012年(38)

2011年(2)

分类: 系统运维

2015-02-15 11:24:10

1.问题
相信大家在linux系统使用时,使用df 和du命令会经常碰到磁盘空间差距很大,du统计的数据往往比df的统计结果小。
为何会有这种情况出现,首要要区分df和du的命令的区别。
命令分析:

2.处理案例
 使用df命令查看磁盘分区使用情况,根分区总大小9.7G,used% 7.9Guse% 86%;使用du命令显示(排除掉较大的/usr分区,只统计一层目录),根分区使用不到2G

    
原因在于du是以文件名、目录名为依据计算空间使用的,而df是以硬盘块使用情况来计算空间使用的。Linux系统当中,当一个应用程序在写一个文件时,此文件被删除,应用程序会占用句柄,并根据句柄所致磁盘位置直接写磁盘,而不会检查文件是否被删除。回到172.16.2.78机器,使用lsof查看是否存在此类情况,结果如下:

Lsof显示结果:

看到结果与分析一致,其中占用最多的是pid号为28200的java进程,句柄号786451。占用约6.8G空间。最后接的(deleted)表明该文件已被删除掉。这是为什么du和df显示差别如下大,df使用block来计算空间使用,(deleted)掉的文件因被程序调用,被认为还在使用过程中,在统计时df标记这些块还被占用,而du从inode到文件名,到目录名来计算,被删的文件已经不存在inode指向。
通过验证,可看到显示delete的文件,是不存在于系统之上的。

3.解决方案
检测到进程IP,如果是应用程序,可重新启动应用,以释放空间锁定。记住,是重新stop 再start,reload无法释放!

阅读(2515) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~