问题:

硬盘显示被写满,但是用du -sh /*查看时占用硬盘空间之和还远小于硬盘大小,即找不到硬盘分区是怎么被写满的。
今天下午接到同事紧急求助,说生产线服务器硬盘满了。该删的日志都删掉了。可空间还是满的,情况危急啊。这个问题,在多年以前直接和间接的遇到过1-2次。以前太懒惰了,这次记录下来和大家分享。

相关日志如下:

█ 查看硬盘分区大小

  1. [root@www ~]# cat /etc/redhat-release
  2. CentOS release 6.4 (Final)
  3. [root@www ~]# df -h
  4. Filesystem Size Used Avail Use% Mounted on
  5. /dev/sda3 117G 111G % /
  6. /dev/sda1 145M 12M 126M % /boot
  7. tmpfs .0G .0G % /dev/shm

这是一台web服务器(apache+tomcat+mysql)
通过dh -h命令查看 总大小117G,使用了111G

  1. [root@www /]# fdisk -l
  2.  
  3. Disk /dev/sda: 146.8 GB, bytes
  4. heads, sectors/track, cylinders
  5. Units = cylinders of * = bytes
  6.  
  7. Device Boot Start End Blocks Id System
  8. /dev/sda1 * Linux
  9. /dev/sda2 + Linux swap / Solaris
  10. /dev/sda3 + Linux
  11. [root@www /]# fdisk -l /dev/sda3
  12.  
  13. Disk /dev/sda3: 129.4 GB, bytes
  14. heads, sectors/track, cylinders
  15. Units = cylinders of * = bytes
  16.  
  17. Disk /dev/sda3 doesn't contain a valid partition table

==========================================================================================
█ 使用du命令查看到底哪些目录占用了空间

  1. [root@www /]# du -sh /*
  2. 8.6M /bin
  3. 6.1M /boot
  4. 2.8G /data ===》这里是DB目录
  5. 124K /dev
  6. 60M /etc
  7. 1.6G /home ===》这里是日志目录
  8. 120M /lib
  9. 24M /lib64
  10. 16K /lost+found
  11. 8.0K /media
  12. 0 /misc
  13. 12K /mnt
  14. 0 /net
  15. 8.0K /opt
  16. 0 /proc
  17. 614M /root
  18. 35M /sbin
  19. 8.0K /selinux
  20. 24K /server
  21. 8.0K /srv
  22. 0 /sys
  23. 24K /tmp
  24. 2.5G /usr
  25. 29G /var ==》这里是www目录

可以看出,上面所有目录之和 远小于总的空间占用111G,是什么占用了硬盘,还查不到呢?

解答:

出现上面问题原因:
在apache/tomcat服务在运行状态下,清空了运行服务的日志,这里是清理了当天或正在写入的apache及tomcat的日志文件,从而导致了上面问题。(有关原理细节见下文)引申下:一般情况下,大多数服务(包括脚本)在运行时,是不能删除当前正在写入的日志文件的。这点请大家要记牢。

本文的解决办法:

查找机器自身的服务,然后重起apache和tomcat。
重起apache后:

  1. [root@www ]# df -h
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/sda3 117G 109G .3G % /
  4. /dev/sda1 145M 12M 126M % /boot
  5. tmpfs .0G .0G % /dev/shm

重起tomcat后:

  1. [root@www ~]# df -h
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/sda3 117G 38G 74G % /
  4. /dev/sda1 145M 12M 126M % /boot
  5. tmpfs .0G .0G % /dev/shm

上面问题原理分析:

  1. 1、这是一个文件系统层面的技术
  2.  
  3. 2、当前 access.log 日志正被 apache 进程占用。通过 rm 命令删除 access.log,实际只删除了文件名(该日志文件应用记数不 ,因此空间不会被释放)
  4.  
  5. 3rm 命令删除了 access.log apache 依然写日志到 access.log 中,当开启 apache 进程是,已经通过 access.log 定位到文件的 inode 了就是说再写日志是不通过 access.log,因此,即使删除了 access.logapache 依然写日志到 access.log 所在的 inode 节点,所以导致硬盘空间增加。
  6.  
  7. 4、因为删除了 access.log,所以,我们人类就看不到相关文件了,也就是说找不到该文件,du 也查不到。所以就会发现磁盘满而看不到什么文件撑满的硬盘,

Web服务器磁盘满故障的更多相关文章

  1. (转)Web服务器磁盘满故障深入解析

    Web服务器磁盘满故障深入解析 原文:http://blog.51cto.com/oldboy/612351 ############################################# ...

  2. Web服务器磁盘满故障深入解析

    问题:硬盘显示被写满,但是用du -sh /*查看时占用硬盘空间之和还远小于硬盘大小即找不到硬盘分区是怎么被写满的. 今天下午接到一学生紧急求助,说生产线服务器硬盘满了.该删的日志都删掉了.可空间还是 ...

  3. Web服务器磁盘满深入解析及解决

    ########################################################## 硬盘显示被写满但是用du -sh /*查看时占用硬盘空间之和还远#小于硬盘大小问的 ...

  4. 数据库服务器和web服务器磁盘占用查询

    对于Oracle数据库而言磁盘空间主要体现在表空间上,可使用sql语句进行查看Oracle 表空间的大小及使用情况: select sum(bytes)/1024/1024/1024 "Gb ...

  5. php 高级 多台web服务器共享session的方法

    解决多台web服务器共享session的问题,至少有以下三种方法:   一.将本该保存在web服务器磁盘上的session数据保存到cookie中 即用cookie会话机制替代session会话机制, ...

  6. [故障公告] 13:52-14:03,访问量突增,博客web服务器CPU 100%

    13:52-14:03,由于访问量突增,博客web服务器全线CPU 100%,造成博客站点不正常访问,由此给您带来麻烦,请您谅解. 为了迎接访问量的增长给web服务器CPU带来的巨大压力,上周我们已经 ...

  7. (转)Linux服务器磁盘空间占满问题

    转自:https://www.cnblogs.com/cindy-cindy/p/6796684.html 下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了),希望碰 ...

  8. 关于Linux服务器磁盘空间占满问题的解决方法

    下面给大家分享一篇关于Linux服务器磁盘占满问题解决方法(/dev/sda3 满了),需要的的朋友参考下吧   下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了), ...

  9. Linux服务器磁盘空间占满问题

    下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了),希望碰到此类问题的人能带来帮助.   今天下班某电商技术部leader发现个问题,说他们服务器硬盘满了.把日志文件 ...

随机推荐

  1. html基础总结版

    一.html版本 HTML    1991年 HTML+    1993年 HTML2.0    1995年 HTML3.2    1997年 HTML4.0.1    1999年 XHTML1.0  ...

  2. 续评《遇到一位ITer,一位出租车司机,必看》

    链接:<遇到一位ITer,一位出租车司机,必看> 续评:       我算不上严格意义上的共产主义者,但是算是坚定的共富主义者,切忌不能理解为平均主义者.就是说你开个大奔,我最起码也得能开 ...

  3. android camera setMeteringArea详解

    摘要: 本文为作者原创,未经允许不得转载:原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/5802814.html setMeteringArea() ...

  4. CF 371B Fox Dividing Cheese[数论]

    B. Fox Dividing Cheese time limit per test 1 second memory limit per test 256 megabytes input standa ...

  5. python中if __name__ == "__main__":用法解析

    __name__: __name__作为模块的内置属性,简单点说呢,就是.py文件的调用方式. __main__: 如果__name__等于"__main__"就表示是直接执行. ...

  6. 万能的 SQL编程

    简介:T-SQL语句创建库.创建表和听.和添加约束等.T-SQL是数据库结构化查询语言,常见的增加.删出.修改.查询.创建库和创建表的语句,还支持定义变量.输出语句.逻辑控制语句(IF.CASE.WH ...

  7. iOS中NSScanner 的用法

    NSScanner是一个类,用于在字符串中扫描指定的字符,尤其是把它们翻译/转换为数字和别的字符串.可以创建NSScanner时制定他的String属性,然后scanner会按照你的要求从头到尾扫描这 ...

  8. 怎样使用nat和桥接方式解决虚拟机联网问题

    对于很多的linux初学者来说,最开始学习linux时通常是在虚拟机上进行的,然而对于新手来说虚拟机联网会对他们来说是比较困难的.这里我根据自己的经验写了一篇文档分享给大家.下面对几种连接方式进行简单 ...

  9. C语言--scanf

    关于C语言的scanf,首先看个例子 int get_int(void){ int input; char ch; ){ printf("is not an integer,please e ...

  10. POJ 3259 Wormholes (判负环)

    Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 46123 Accepted: 17033 Descripti ...