一、問題描述
今日收到zabbix監控報警,發現生產環境一台服務器的磁盤空間不足,需要進行處理,登錄后發現可利用率不足20%,進行相關查看和處理工作;但是操作刪除了一些備份文件和日志信息后,查看空間仍然不足。
二、具體操作過程
1、檢查服務器占用硬盤資源的文件
[root@nc-ftp02 ~]# df -hP Filesystem Size Used Avail Use% Mounted on /dev/xvda2 99G 4.2G 90G 5% / tmpfs 3.9G 228K 3.9G 1% /dev/shm /dev/xvda1 380M 66M 294M 19% /boot /dev/xvda5 386G 290G 77G 80% /data [root@nc-ftp02 ~]# cd /data/ [root@nc-ftp02 data]# ls backup data_bak ftp lost+found script [root@nc-ftp02 data]# du -sh * 4.1G backup 12G data_bak 813M ftp 16K lost+found 5.0G nchome 16K script
注意:查看后,發現data目錄下,並無大文件存在,備份目錄下面只保留了2個月的數據,所以問題依舊存在。
這時想起來,在Linux或者Unix系統中,通過rm或者文件管理器刪除文件將會從文件系統的文件夾結構上解除鏈接(unlink).然而假設文件是被打開的(有一個進程正在使用),那么進程將仍然能夠讀取該文件,磁盤空間也一直被占用。而我刪除的是備份和log文件刪除的時候文件應該正在被使用;
2、查看刪除文件被占用的具體情況
[root@nc-ftp02 data]# lsof -n /data |grep deleted
sh 8757 root 1w REG 202,5 287246420690 12 /data/nohup.out (deleted)
sh 8757 root 2w REG 202,5 287246420690 12 /data/nohup.out (deleted)
rsync 28485 root 1w REG 202,5 287246420690 12 /data/nohup.out (deleted)
rsync 28485 root 2w REG 202,5 287246420690 12 /data/nohup.out (deleted)
ssh 28486 root 2w REG 202,5 287246420690 12 /data/nohup.out (deleted)
ssh 28486 root 6w REG 202,5 287246420690 12 /data/nohup.out (deleted)
[root@nc-ftp02 data]# lsof -n /data |grep deleted|awk '{print $2}'
8757
8757
28674
28674
28675
28675
[root@nc-ftp02 data]# lsof -n /data |grep deleted|awk '{print $2}'|xargs kill -9
[root@nc-ftp02 data]# lsof -n /data |grep deleted
[root@nc-ftp02 data]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda2 99G 4.2G 90G 5% /
tmpfs 3.9G 228K 3.9G 1% /dev/shm
/dev/xvda1 380M 66M 294M 19% /boot
/dev/xvda5 386G 22G 345G 6% /data
3、如何讓進程釋放?
一種方法是kill掉相應的進程,另一種就是停掉使用這個文件的應用,讓os自己主動回收磁盤空間。
3.1、如果系統管理員能夠熟悉該服務器上相關應用部署和配置,可以通過第一種方法進行釋放,我在操作過程,采用的就是kill掉應用中不使用的進程來釋放空間;
當linux打開一個文件的時候,Linux內核會為每個進程在/proc/ 『/proc/nnnn/fd/文件夾(nnnn為pid)』建立一個以其pid
為名的文件夾用來保存進程的相關信息,而其子文件夾fd保存的是該進程打開的全部文件的fd(fd:file descriptor)。
kill進程是通過截斷proc文件系統中的文件能夠強制要求系統回收分配給正在使用的的文件。
僅到管理員確定不會對執行中的進程造成影響時使用。應用程序對這樣的方
式支持的並不好,當一個正在使用的文件被截斷可能會引發不可預知的問題
3.2、如果環境有非常多進程在使用的這個文件,停掉進程可能帶來一定風險,又不在系統管理員控制范圍內,建議不要輕易使用kill進行操作;最好原則合適時間停掉相關應用進行釋放。
綜上所述,問題解決!
---------------------------------------------書山有路勤為徑,學海無涯苦作舟--------------------------------------------------------
