1. 用df 檢查發現根目錄可用空間越為200M
# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvde1 9.9G 9.4G 232M 36% / none 7.4G 16K 7.4G 1% /dev/shm
2. 用du命令查看根目錄各子目錄占用空間,可以發現6G的空間莫名其妙地丟了
# du -sm /* | sort -nr | head 1755 /usr 664 /var 538 /lib 331 /opt 104 /boot 31 /etc 23 /lib64 14 /sbin 9 /bin
3. 用lsof命令查看有很多處於deleted狀態的進程
# lsof | grep delete cbdaemon 993 root 5w REG 202,65 388 65623 /var/log/cb/sensor/cbdaemon.ec2s-usercassandra-02.invalid-user.log.ERROR.20170713-143157.993 (deleted) salt-mini 1761 root 0r REG 202,65 17 16389 /tmp/sh-thd-1499978414 (deleted) salt-mini 1761 root 6w REG 202,65 265 347691 /var/log/salt/minion-20170714 (deleted) salt-mini 1762 root 0r REG 202,65 17 16389 /tmp/sh-thd-1499978414 (deleted) salt-mini 1762 root 6w REG 202,65 265 347691 /var/log/salt/minion-20170714 (deleted) filebeat 1852 root 10r REG 202,65 6292254 75366 /var/log/audit/audit.log.4 (deleted) filebeat 1852 root 12r REG 202,65 6291461 74061 /var/log/audit/audit.log.4 (deleted) filebeat 1852 root 14r REG 202,65 6291523 74051 /var/log/audit/audit.log.4 (deleted) filebeat 1852 root 15r REG 202,65 6291516 74050 /var/log/audit/audit.log.4 (deleted) filebeat 1852 root 16r REG 202,65 6291575 74052 /var/log/audit/audit.log.4 (deleted) filebeat 1852 root 17r REG 202,65 6291508 74049 /var/log/audit/audit.log.4 (deleted) filebeat 1852 root 18r REG 202,65 6291824 74053 /var/log/audit/audit.log.4 (deleted) filebeat 1852 root 19r REG 202,65 6291512 74054 /var/log/audit/audit.log.4 (deleted)
4. 根據lsof列出的進程號,kill這些進程,稍等片刻,再查看磁盤容量使用情況,注意如果不熟悉進程的作用,請不要隨意kill
# kill -9 1852 # df -h Filesystem Size Used Avail Use% Mounted on /dev/xvde1 9.9G 3.3G 6.1G 36% / none 7.4G 16K 7.4G 1% /dev/shm
原理:
在linux上被刪除的文件仍被其他進程所使用,文件句柄沒有完全釋放出來,導致空間無法釋放出來,在Linux或者Unix系統中,通過rm或者文件管理器刪除文件將會從文件系統的目錄結構上解除鏈接(unlink).然而如果文件是被打開的(有一個進程正在使用),那么進程將仍然可以讀取該文件,磁盤空間也一直被占用。
解決:
一、通過lsof |grep deleted查看被占用文件
二、釋放被占用文件磁盤空間
- kill掉相應的進程
- 停掉使用這個文件的應用,讓os自動回收磁盤空間