Linux服务器磁盘满了怎么办?

怎么办?

[root@myhost ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@myhost ~]# df -h
Filesystem            			Size  Used Avail Use% Mounted on
/dev/mapper/vg_myhost-lv_root	13G    13G  0  	100% /
tmpfs                 			3.9G   72K  3.9G   1% /dev/shm
/dev/sda1             			477M   41M  411M   9% /boot

#/dev/mapper/vg_myhost-lv_root分区占用了100%,其挂载点事根目录/;
#那么我们用du -sh /* 查看到底哪些目录占用了磁盘空间
[root@myhost ~]# du -sh /*
7.7M    /bin
39M     /boot
252K    /dev
41M     /etc
18M     /home
209M    /lib
28M     /lib64
16K     /lost+found
8.0K    /media
0       /misc
4.0K    /mnt
0       /net
160M    /opt
du: cannot access `/proc/53491/task/53491/fd/4': No such file or directory
du: cannot access `/proc/53491/task/53491/fdinfo/4': No such file or directory
du: cannot access `/proc/53491/fd/4': No such file or directory
du: cannot access `/proc/53491/fdinfo/4': No such file or directory
0       /proc
19M     /root
17M     /sbin
0       /selinux
4.0K    /srv
0       /sys
244K    /tmp
12.1G   /usr      ==》这里大量占用了磁盘空间
217M    /var

#继续使用du -sh /usr/*
[root@myhost ~]# du -sh /usr/*
170M    /usr/bin
4.0K    /usr/etc
4.0K    /usr/games
7.6M    /usr/include
541M    /usr/java
310M    /usr/lib
1.1G    /usr/lib64
23M     /usr/libexec
9.5G    /usr/local   ==》这里是web应用程序所在目录
31M     /usr/sbin
1.4G    /usr/share
12K     /usr/src
0       /usr/tmp

#继续使用du -sh /usr/*
[root@myhost ~]# du -sh /usr/local/*
156M    /usr/local/apache-tomcat-7.0.78
119M    /usr/local/apache-tomcat-8.5.24
4.0K    /usr/local/bin
4.0K    /usr/local/etc
4.0K    /usr/local/games
4.0K    /usr/local/include
4.0K    /usr/local/lib
4.0K    /usr/local/lib64
4.0K    /usr/local/libexec
4.0K    /usr/local/sbin
7.3G    /usr/local/sft-tomcat   ==》这部分web应用程序大量占用了磁盘空间
96K     /usr/local/share
4.0K    /usr/local/src
125M    /usr/local/syn_hbcqjy
81M     /usr/local/task
8.0K    /usr/local/tomcat
242M    /usr/local/tomcat_hbcqjy

#继续使用du -sh /usr/*
[root@myhost ~]# du -sh /usr/local/sft-tomcat/
738M    /usr/local/sft-tomcat/
[root@myhost ~]# du -sh /usr/local/sft-tomcat/*
6.9G    /usr/local/sft-tomcat/biz-tomcat   ==》这部分web应用程序大量占用了磁盘空间
279M    /usr/local/sft-tomcat/task-tomcat
266M    /usr/local/sft-tomcat/wf-tomcat

#继续使用du -sh /usr/*
[root@myhost ~]# du -sh /usr/local/sft-tomcat/biz-tomcat/*
816K    /usr/local/sft-tomcat/biz-tomcat/bin
236K    /usr/local/sft-tomcat/biz-tomcat/conf
7.5M    /usr/local/sft-tomcat/biz-tomcat/lib
56K     /usr/local/sft-tomcat/biz-tomcat/LICENSE
6.0G    /usr/local/sft-tomcat/biz-tomcat/logs   ==》这部分web应用程序大量占用了磁盘空间
4.0K    /usr/local/sft-tomcat/biz-tomcat/NOTICE
8.0K    /usr/local/sft-tomcat/biz-tomcat/RELEASE-NOTES
16K     /usr/local/sft-tomcat/biz-tomcat/RUNNING.txt
4.0K    /usr/local/sft-tomcat/biz-tomcat/temp
184M    /usr/local/sft-tomcat/biz-tomcat/webapps
100K    /usr/local/sft-tomcat/biz-tomcat/work

#最后发现是这个tomcat下的日志将磁盘给占满了。o(╥﹏╥)o
#然后我就乖乖地去处理日志了。-_-|| 然后再重新启动了该服务!!!

拓展

fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区。
fdisk -l:列出指定的外围设备的分区表状况;

#有时候我们还会遇到这样的情况:
把日志文件都删掉了,可硬盘空间依旧满。是什么占用了硬盘,还查不到呢?

#出现上面问题原因:
在apache/tomcat服务在运行状态下,直接删除或清空了运行服务的日志,从而导致/dev/mapper/vg_myhost-lv_root 满了的问题。一般情况下,大多数服务(包括脚本)在运行时,是不能直接删除或清空当前正在写入的日志文件的。

#原理分析:

  1. 当前xxx日志正在被apache/tomcat进程占用。
  2. 通过rm -f 命令删除xxx日志,实际只删除了文件名(该日志文件应用记数不为0,因此空间不会被释放)。
  3. 通过rm -f 命令删除了xxx日志后,apache/tomcat依然写日志到xxx日志中,当开启apache/tomcat进程时,已经通过xxx日志定位到该文件的inode了,就是说再写日志是不通过xxx日志,因此即使删除了xxx日志,apache/tomcat依然写日志到xxx日志所在的inode节点,所以导致硬盘空间增加。
  4. 因为rm -f 删除了xxx日志,所以我们就找不到该文件了,du -sh也查不到,就会出现硬盘满了但看不到究竟是哪些文件占用的。

#解决办法
重启该日志文件的相关服务或程序,如:为tomcat日志文件则重启tomcat(如下图,重启后才硬盘空间占用正常)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章