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


    问题:硬盘显示被写满,但是用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
     

    删除文件原理图:

    本文出自 “老男孩linux运维” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/612351

    可以转载,转载请注明出处:http://www.cnblogs.com/billy98/ 以上如有不妥之处,还请指教!谢谢! QQ:5884625 Email:5884625@qq.com
  • 相关阅读:
    sqlserver整理的实用资料
    [转载]威力导演14旗舰破解版(中文简体)|取消30天限制CyberLink&nb
    联想Y50用U盘改装win7的详细教程
    SQL的四种连接-左外连接、右外连接、内连接、全连接
    笔记本玩游戏不能全屏应该如何解决
    于win2008R2虽然激活,但是一个小时之后就会自动强制关机的问题
    sql server2008 r2 密钥
    减肥
    【ARC082E】ConvexScore
    CJB的大作
  • 原文地址:https://www.cnblogs.com/billy98/p/4191292.html
Copyright © 2020-2023  润新知