#########################################################
# 硬盘显示被写满但是用du -sh /*查看时占用硬盘空间之和还远
#小于硬盘大小问的解决
#date:2010-06-09
#作者:老男孩---《老男孩linux就业培训中心 》
#QQ:31333741
#QQ交流群:385168604   
#blog: http://oldboy.blog.51cto.com
##########################################################

问题:硬盘显示被写满,但是用du -sh /*查看时占用硬盘空间之和还远小于硬盘大小
即找不到硬盘分区是怎么被写满的。

今天下午接到一学生紧急求助,说生产线服务器硬盘满了。该删的日志都删掉了。可空间还是满的,情况危急啊。这个问题,在多年以前直接和间接的遇到过3-4次。以前太懒惰了,这次记录下来和大家分享。

相关日志如下:

█ 查看硬盘分区大小
[root@www ~]# cat /etc/redhat-release 
CentOS release 5.3 (Final)
[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             117G  111G     0 100% /
/dev/sda1             145M   12M  126M   9% /boot
tmpfs                 3.0G     0  3.0G   0% /dev/shm
这是一台web服务器(apache+tomcat+mysql)
通过dh -h命令查看 总大小117G,使用了111G
[root@www /]# fdisk -l

Disk /dev/sda: 146.8 GB, 146815733760 bytes
255 heads, 63 sectors/track, 17849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          19      152586   83  Linux
/dev/sda2              20        2108    16779892+  82  Linux swap / Solaris
/dev/sda3            2109       17849   126439582+  83  Linux
[root@www /]# fdisk -l /dev/sda3

Disk /dev/sda3: 129.4 GB, 129474132480 bytes
255 heads, 63 sectors/track, 15741 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sda3 doesn't contain a valid partition table
==========================================================================================
█ 使用du命令查看到底哪些目录占用了空间
[root@www /]# du -sh /*
8.6M    /bin
6.1M    /boot
2.8G    /data ===》这里是DB目录
124K    /dev
60M     /etc
1.6G    /home ===》这里是日志目录
120M    /lib
24M     /lib64
16K     /lost+found
8.0K    /media
0       /misc
12K     /mnt
0       /net
8.0K    /opt
0       /proc
614M    /root
35M     /sbin
8.0K    /selinux
24K     /server
8.0K    /srv
0       /sys
24K     /tmp
2.5G    /usr
29G     /var  ==》这里是www目录

可以看出,上面所有目录之和 远小于总的空间占用111G,是什么占用了硬盘,还查不到呢?
---------------
解答:
出现上面问题原因:
在apache/tomcat服务在运行状态下,清空了运行服务的日志,这里是清理了当天或正在写入的apache及tomcat的日志文件,从而导致了上面问题。(有关原理细节见下文)

引申下:
一般情况下,大多数服务(包括脚本)在运行时,是不能删除当前正在写入的日志文件的。这点请大家要记牢。

本文的解决办法:
查找机器自身的服务,然后重起apache和tomcat。
重起apache后:
[root@www 07]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             117G  109G  2.3G  98% /
/dev/sda1             145M   12M  126M   9% /boot
tmpfs                 3.0G     0  3.0G   0% /dev/shm

重起tomcat后:
[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             117G   38G   74G  34% /
/dev/sda1             145M   12M  126M   9% /boot
tmpfs                 3.0G     0  3.0G   0% /dev/shm

删除文件原理图:

1
老男孩运维班28期上述案例实战模拟:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
(1)安装httpd web服务
  yum install httpd -y
  /etc/init.d/httpd start
  lsof -i :80
  /etc/init.d/iptables stop
  cd/etc/httpd/conf 编辑配置文件,让日志记录到/app/logs下面。
sed -i's@#CustomLog logs/access_log common@CustomLog /app/logs/access_logcommon@g' httpd.conf 
 (2)创建一个小的文件系统,用于存放上述access_log日志。
  dd if=/dev/zero of=/dev/sdc bs=8K  count=10
  ls -l /dev/sdc
  mkfs -t ext4 /dev/sdc
  tune2fs -c -1 /dev/sdc
  mount -o loop /dev/sdc /app/logs
  echo oldboy >/var/www/html/index.html
 (3)重启httpd服务,确保日志记录到了上述文件系统挂载的/app/log下面
  /etc/init.d/httpd restart
 (4)写个循环脚本访问httpd,使得httpd日志充满/app/logs整个空间。
 for in `seq 100000`;do curl -s 127.0.0.1>/dev/null;done
[root@C64log]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             7.2G  2.0G 4.9G  30% /
tmpfs                 244M     0 244M   0% /dev/shm
/dev/sda1             194M   54M 131M  30% /boot
/dev/sdc               73K   73K    0 100% /app/log
     (5)错误的删除方案
[root@oldboylogs]# rm -f /app/logs/access_log
[root@oldboylogs]# df -h
Filesystem      Size Used Avail Use% Mounted on
/dev/sda3       8.8G 1.6G  6.9G  19% /
tmpfs           491M     0 491M   0% /dev/shm
/dev/sda1       190M  36M  145M  20% /boot
/dev/sdc         73K  68K  1.0K  99% /app/logs
提示:此时空间并未被释放,你可知道原因?
    查看被删除的但仍由进程占用的文件名。
[root@oldboylogs]# lsof|grep del
httpd      6148     root    7w      REG   7,0    55260         12 /app/logs/access_log (deleted)
httpd     38178   apache    7w      REG   7,0    55260         12 /app/logs/access_log (deleted)
httpd     38483   apache    7w      REG   7,0    55260         12 /app/logs/access_log (deleted)
httpd     38484   apache    7w      REG   7,0    55260         12 /app/logs/access_log (deleted)
httpd     38752   apache    7w      REG   7,0    55260         12 /app/logs/access_log (deleted)
 (5)解决问题
1、请先停掉模拟访问测试脚本
forn in `seq 100000`;do curl -s 127.0.0.1 >/dev/null;done
2、重启Http服务
[root@C64log]# /etc/init.d/httpd restart
Stoppinghttpd:                                           [  OK  ]
Startinghttpd:                                          [ OK  ]
 (6)查看处理结果
[root@C64log]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             7.2G  2.0G 4.9G  30% /
tmpfs                 244M     0 244M   0% /dev/shm
/dev/sda1             194M   54M 131M  30% /boot
/dev/sdc               73K   14K  55K  21%/app/logs
(7)较好的处理方案
清空日志而不删除日志。
>/app/logs/access_log

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. 自己动手模拟开发一个简单的Web服务器

    开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...

  7. 无法在web服务器下启动调试

    VS2013 编译时异常 无法在web服务器下启动调试.该Web服务器未及时响应   VS2013 编译时错误 无法在web服务器上启动调试.该Web服务器未及时响应.无法在web服务器上启动调试.该 ...

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

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

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

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

随机推荐

  1. python中的% 是什么意思, 起到什么作用?

    %Y会被无世纪的年份所替代.%m会被01到12之间的一个十进制月份数替代,其他依次类推. 1.%在python的格式化输出,有转换字符的飞鲸作用: (1)%c 整数转成对应的 ASCII 字元: (2 ...

  2. Python诞生以来意义菜谱

    自Python诞生以来,它被誉为最简单的编程语言.进入人工智能时代后,它逐渐成为编程领域的主导语言. Python是一种快速.强大.高效和灵活的编程语言家常菜做法大全.学习后,无论您是想进入数据分析菜 ...

  3. JS-实现横向手风琴

    横向手风琴-- 鼠标悬浮某一张图片,图片显示,其他图片影藏. <div class="content"> <ul> <li class="c ...

  4. LCD1602 液晶

    它是一种专门用来显示字母.数字.符号的点阵型液晶模块 它是由若干个5x7或者5x10的点阵字符位组成 引脚 时序 操作步骤 初始化 写命令(RS=L)设置显示坐标 写数据(RS=H) 指令 清屏: 指 ...

  5. DX使用随记--GroupControl

    1. 创建按钮: (1)添加引用:Imports DevExpress.XtraEditors.ButtonsPanelControl (2)添加按钮语句:GroupControl1.CustomHe ...

  6. 7.Spring整合Hibernate_1

    Spring 整合 Hibernate 1.Spring指定 database,给下面创建的 SessionFactory用 <!-- !!!!!可以使用 @Resource 将 这个bean对 ...

  7. jumpserver跳板机docker安装小小趟坑

    最近日常运维的时候发现每次登陆服务器都要打开终端目录连接对应的服务器,闲暇的时候还好,运维任务很重的时候才发现这样的玩法很傻,浪费时间且一点儿都跟不上潮流,然后打开githup开始搞起来.docker ...

  8. 《设计模式之美》 <03>面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?

    面向对象 现在,主流的编程范式或者是编程风格有三种,它们分别是面向过程.面向对象和函数式编程.面向对象这种编程风格又是这其中最主流的.现在比较流行的编程语言大部分都是面向对象编程语言.大部分项目也都是 ...

  9. 十六, k8s集群资源需求和限制, 以及pod驱逐策略。

    目录 容器的资源需求和资源限制 QoS Classes分类 Guaranteed Burstable Best-Effort kubernetes之node资源紧缺时pod驱逐机制 Qos Class ...

  10. 一 :了解MVC

    介绍 1. ASP.NET WebForm和ASP.NET MVC是并行的关系.都是属于.NET框架下的子框架. 2. MVC项目常用模板 空模板 :   不包含MVC目录结构,需要自己添加. 基本模 ...