1. 程式人生 > 其它 >關於Linux伺服器磁碟空間佔滿問題的解決方法

關於Linux伺服器磁碟空間佔滿問題的解決方法

 

下面給大家分享一篇關於Linux伺服器磁碟佔滿問題解決方法(/dev/sda3 滿了),需要的的朋友參考下吧

 

下面我們一起來看一篇關於Linux伺服器磁碟佔滿問題解決(/dev/sda3 滿了),希望碰到此類問題的人能帶來幫助。

今天下班某電商技術部leader發現個問題,說他們伺服器硬碟滿了。把日誌檔案都刪掉了,可硬碟空間依舊滿。於是df -h查看了下各個掛載點的狀況(如下圖)。

/dev/sda3佔用了100%,那麼我們du -s -h ./*看下目錄的佔用情況(如下圖)。

 在工作中,我們也許會遇到這樣的問題,發現某個磁碟空間快滿了,於是,找到一些無用的大檔案將其刪除後,發現磁碟空間還是沒有釋放掉,這是什麼原因呢?如何解決呢?下面來重現一下整個過程:

檢視磁碟空間情況

1 2 3 4 5 6 7 8 [@74.114 var]# df -h Filesystem      Size Used Avail Use% Mounted on /dev/xvda2      9.7G 284M 8.9G  4% / /dev/xvda1      251M  13M 226M  6% /boot none         1.1G   0 1.1G  0% /dev/shm /dev/xvda10      97G  60G  33G 65% /home /dev/xvda3      3.9G 2.7G 1.1G 72% /usr /dev/xvda5
      3.9G 3.6G  77M 98% /var

var分割槽快滿了,找到大檔案,並刪除

1 2 3 4 5 6 7 8 9 10 [@74.114 var]# cd /var [@74.114 var]# du –sh * 3.3G  account 111M  cache 53M   log 0    mail 156K  run 344K  spool [@74.114 var]# rm –rf account/*

df –h 看一下,卻依然是/var 為98%,一點都沒釋放。

1 2 3 4 5 6 7 8 [@74.114 var]
# df -h Filesystem      Size Used Avail Use% Mounted on /dev/xvda2      9.7G 284M 8.9G  4% / /dev/xvda1      251M  13M 226M  6% /boot none         1.1G   0 1.1G  0% /dev/shm /dev/xvda10      97G  60G  33G 65% /home /dev/xvda3      3.9G 2.7G 1.1G 72% /usr /dev/xvda5      3.9G 3.6G  77M 98% /var

但du –sh * 卻顯示沒有大檔案了

1 2 3 4 5 6 7 8 [@74.114 ~]# cd /var && du –sh * 120K  account 111M  cache 53M   log 0    mail 156K  run 344K  spool

猜想1:應該是刪除的內容依然被程序佔用,記憶體沒釋放,所以用lsof |grep – I deleted 看了一下,發現如下:

1 2 3 4 5 6 7 8 9 10 [@74.114 account]# lsof |grep -i deleted listserve 4833      blty  0u   CHR   136,2          4 /dev/pts/2 (deleted) listserve 4833      blty  1u   CHR   136,2          4 /dev/pts/2 (deleted) listserve 4833      blty  2u   CHR   136,2          4 /dev/pts/2 (deleted) Billing_P 16989      blty  0u   CHR   136,0          2 /dev/pts/0 (deleted) Billing_P 16989      blty  1u   CHR   136,0          2 /dev/pts/0 (deleted) Billing_P 16989      blty  2u   CHR   136,0          2 /dev/pts/0 (deleted) Billing_P 16990      blty  0u   CHR   136,0          2 /dev/pts/0 (deleted) Billing_P 16990      blty  1u   CHR   136,0          2 /dev/pts/0 (deleted) Billing_P 16990      blty  2u   CHR   136,0          2 /dev/pts/0 (deleted)

發現時billing程式佔用沒釋放,所以聯絡專案經理將Billing_P停掉,重啟,依然沒有釋放任何空間。無果
猜想2:刪除的檔案是accout目錄下的pacct檔案,應該是由psacct產生和管理,重啟這個程式後是否會OK呢?解決

1 [@74.114 account]# /etc/init.d/psacct restart

最後看一下磁碟空間,磁碟空間釋放鳥~~

1 2 3 4 5 6 7 8 [@74.114 var]# df -h Filesystem      Size Used Avail Use% Mounted on /dev/xvda2      9.7G 284M 8.9G  4% / /dev/xvda1      251M  13M 226M  6% /boot none         1.1G   0 1.1G  0% /dev/shm /dev/xvda10      97G  60G  33G 65% /home /dev/xvda3      3.9G 2.7G 1.1G 72% /usr /dev/xvda5      3.9G 100M  3.6M 4% /var

 小建議:

以後處理相關問題時,如果發現du 和df 大小不一致的情況,可以通過lsof 檢視,也許可以找到一些出現問題的原因,如果還是找不到問題,在允許的情況下不妨試一下重啟服務,也許問題就迎刃而解了。
重啟服務得不到解決的情況下,可以通過解除安裝磁碟分割槽來試著解決。

在決定刪除某些檔案前,最好確定好這個檔案被哪些服務使用,先停掉這些服務再刪除,這樣就很少出現空間釋放不了的情況了

linux磁碟掛載點目錄佔用情況(圖)

掛載點下的目錄之和遠小於4.5G,那麼是什麼佔用了硬碟呢?

以下為該問題的解答:

在apache/tomcat服務在執行狀態下,清空了執行服務的日誌,從而導致了/dev/sda3 滿了的問題。一般情況下,大多數服務(包括指令碼)在執行時,是不能刪除當前正在寫入的日誌檔案的。

原理分析:

1. 當前access.log日誌正在被apache程序佔用。

2. 通過rm命令刪除access.log,實際只刪除了檔名(該日誌檔案應用記數不為0,因此空間不會被釋放)。

3. 通過rm命令刪除了access.log後,apache依然寫日誌到access.log中,當開啟apache程序時,已經通過access.log定位到該檔案的inode了,就是說再寫日誌是不通過access.log,因此即使刪除了access.log,apache依然寫日誌到access.log所在的inode節點,所以導致硬碟空間增加。

4. 因為刪除了access.log,所以我們就找不到該檔案了,du也查不到,就會出現硬碟滿了但看不到究竟是哪些檔案佔用的。
(寫的不甚詳細,不明白的大家再google下。)

解決方法:

重啟該日誌檔案的相關服務或程式,如:為apache日誌檔案則重啟apache(如下圖,重啟後才硬碟空間佔用正常)。

以上所述是小編給大家介紹的關於Linux伺服器磁碟空間佔滿問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對指令碼之家網站的支援!

 

 

參考連結:http://www.jb51.net/article/112742.htm

 

下面我們一起來看一篇關於Linux伺服器磁碟佔滿問題解決(/dev/sda3 滿了),希望碰到此類問題的人能帶來幫助。

今天下班某電商技術部leader發現個問題,說他們伺服器硬碟滿了。把日誌檔案都刪掉了,可硬碟空間依舊滿。於是df -h查看了下各個掛載點的狀況(如下圖)。

/dev/sda3佔用了100%,那麼我們du -s -h ./*看下目錄的佔用情況(如下圖)。

 在工作中,我們也許會遇到這樣的問題,發現某個磁碟空間快滿了,於是,找到一些無用的大檔案將其刪除後,發現磁碟空間還是沒有釋放掉,這是什麼原因呢?如何解決呢?下面來重現一下整個過程:

檢視磁碟空間情況

1 2 3 4 5 6 7 8 [@74.114 var]# df -h Filesystem      Size Used Avail Use% Mounted on /dev/xvda2      9.7G 284M 8.9G  4% / /dev/xvda1      251M  13M 226M  6% /boot none         1.1G   0 1.1G  0% /dev/shm /dev/xvda10      97G  60G  33G 65% /home /dev/xvda3      3.9G 2.7G 1.1G 72% /usr /dev/xvda5      3.9G 3.6G  77M 98% /var

var分割槽快滿了,找到大檔案,並刪除

1 2 3 4 5 6 7 8 9 10 [@74.114 var]# cd /var [@74.114 var]# du –sh * 3.3G  account 111M  cache 53M   log 0    mail 156K  run 344K  spool [@74.114 var]# rm –rf account/*

df –h 看一下,卻依然是/var 為98%,一點都沒釋放。

1 2 3 4 5 6 7 8 [@74.114 var]# df -h Filesystem      Size Used Avail Use% Mounted on /dev/xvda2      9.7G 284M 8.9G  4% / /dev/xvda1      251M  13M 226M  6% /boot none         1.1G   0 1.1G  0% /dev/shm /dev/xvda10      97G  60G  33G 65% /home /dev/xvda3      3.9G 2.7G 1.1G 72% /usr /dev/xvda5      3.9G 3.6G  77M 98% /var

但du –sh * 卻顯示沒有大檔案了

1 2 3 4 5 6 7 8 [@74.114 ~]# cd /var && du –sh * 120K  account 111M  cache 53M   log 0    mail 156K  run 344K  spool

猜想1:應該是刪除的內容依然被程序佔用,記憶體沒釋放,所以用lsof |grep – I deleted 看了一下,發現如下:

1 2 3 4 5 6 7 8 9 10 [@74.114 account]# lsof |grep -i deleted listserve 4833      blty  0u   CHR   136,2          4 /dev/pts/2 (deleted) listserve 4833      blty  1u   CHR   136,2          4 /dev/pts/2 (deleted) listserve 4833      blty  2u   CHR   136,2          4 /dev/pts/2 (deleted) Billing_P 16989      blty  0u   CHR   136,0          2 /dev/pts/0 (deleted) Billing_P 16989      blty  1u   CHR   136,0          2 /dev/pts/0 (deleted) Billing_P 16989      blty  2u   CHR   136,0          2 /dev/pts/0 (deleted) Billing_P 16990      blty  0u   CHR   136,0          2 /dev/pts/0 (deleted) Billing_P 16990      blty  1u   CHR   136,0          2 /dev/pts/0 (deleted) Billing_P 16990      blty  2u   CHR   136,0          2 /dev/pts/0 (deleted)

發現時billing程式佔用沒釋放,所以聯絡專案經理將Billing_P停掉,重啟,依然沒有釋放任何空間。無果
猜想2:刪除的檔案是accout目錄下的pacct檔案,應該是由psacct產生和管理,重啟這個程式後是否會OK呢?解決

1 [@74.114 account]# /etc/init.d/psacct restart

最後看一下磁碟空間,磁碟空間釋放鳥~~

1 2 3 4 5 6 7 8 [@74.114 var]# df -h Filesystem      Size Used Avail Use% Mounted on /dev/xvda2      9.7G 284M 8.9G  4% / /dev/xvda1      251M  13M 226M  6% /boot none         1.1G   0 1.1G  0% /dev/shm /dev/xvda10      97G  60G  33G 65% /home /dev/xvda3      3.9G 2.7G 1.1G 72% /usr /dev/xvda5      3.9G 100M  3.6M 4% /var

 小建議:

以後處理相關問題時,如果發現du 和df 大小不一致的情況,可以通過lsof 檢視,也許可以找到一些出現問題的原因,如果還是找不到問題,在允許的情況下不妨試一下重啟服務,也許問題就迎刃而解了。
重啟服務得不到解決的情況下,可以通過解除安裝磁碟分割槽來試著解決。

在決定刪除某些檔案前,最好確定好這個檔案被哪些服務使用,先停掉這些服務再刪除,這樣就很少出現空間釋放不了的情況了

linux磁碟掛載點目錄佔用情況(圖)

掛載點下的目錄之和遠小於4.5G,那麼是什麼佔用了硬碟呢?

以下為該問題的解答:

在apache/tomcat服務在執行狀態下,清空了執行服務的日誌,從而導致了/dev/sda3 滿了的問題。一般情況下,大多數服務(包括指令碼)在執行時,是不能刪除當前正在寫入的日誌檔案的。

原理分析:

1. 當前access.log日誌正在被apache程序佔用。

2. 通過rm命令刪除access.log,實際只刪除了檔名(該日誌檔案應用記數不為0,因此空間不會被釋放)。

3. 通過rm命令刪除了access.log後,apache依然寫日誌到access.log中,當開啟apache程序時,已經通過access.log定位到該檔案的inode了,就是說再寫日誌是不通過access.log,因此即使刪除了access.log,apache依然寫日誌到access.log所在的inode節點,所以導致硬碟空間增加。

4. 因為刪除了access.log,所以我們就找不到該檔案了,du也查不到,就會出現硬碟滿了但看不到究竟是哪些檔案佔用的。
(寫的不甚詳細,不明白的大家再google下。)

解決方法:

重啟該日誌檔案的相關服務或程式,如:為apache日誌檔案則重啟apache(如下圖,重啟後才硬碟空間佔用正常)。

以上所述是小編給大家介紹的關於Linux伺服器磁碟空間佔滿問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對指令碼之家網站的支援!

 

 

參考連結:http://www.jb51.net/article/112742.htm