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(如下圖,重啓後才硬盤空間佔用正常)。

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