一、问题描述:
zabbix监控报警,磁盘空间不足登陆服务器上查看发现使用率不足20%,但清理完垃圾日志以后磁盘空间还是没有释放
以下是处理未释放空间的步骤
二、操作步骤
1、查看磁盘空间
[root@Test ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 212G 121G 187G 81% /
devtmpfs devtmpfs 8.4G 0 8.4G 0% /dev
tmpfs tmpfs 8.4G 0 8.4G 0% /dev/shm
tmpfs tmpfs 8.4G 353k 8.4G 1% /run
tmpfs tmpfs 8.4G 0 8.4G 0% /sys/fs/cgroup
tmpfs tmpfs 1.7G 0 1.7G 0% /run/user/0
2、安装lsof命令
[root@Test ~]# yum -y install lsof
3、查看删除文件被占用的具体情况
[root@Test ~]# lsof -n /var |grep deleted
rsyslogd 30875 root 6w REG 253,1 138963758090 1313835 /var/log/haproxy/haproxy.log (deleted)
in:imjour 30875 30877 root 6w REG 253,1 138963757315 1313835 /var/log/haproxy/haproxy.log (deleted)
in:imudp 30875 30878 root 6w REG 253,1 138963757315 1313835 /var/log/haproxy/haproxy.log (deleted)
rs:main 30875 30879 root 6w REG 253,1 138963758090 1313835 /var/log/haproxy/haproxy.log (deleted)
[root@Test ~]# lsof -n /var |grep deleted|awk '{print $2}'
30875
[root@Test ~]# lsof -n /var |grep deleted|awk '{print $2}'|xargs kill -9
[root@Test ~]# lsof -n /var |grep deleted
[root@Test ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 212G 15G 187G 7% /
devtmpfs devtmpfs 8.4G 0 8.4G 0% /dev
tmpfs tmpfs 8.4G 0 8.4G 0% /dev/shm
tmpfs tmpfs 8.4G 353k 8.4G 1% /run
tmpfs tmpfs 8.4G 0 8.4G 0% /sys/fs/cgroup
tmpfs tmpfs 1.7G 0 1.7G 0% /run/user/0
kill掉相应的进程,或者停掉使用这个文件的应用,让os自动回收磁盘空间
我这个环境有很多进程在使用的这个文件,停掉进程有点麻烦,再有就是风险很大
当linux打开一个文件的时候,Linux内核会为每一个进程在/proc/ 『/proc/nnnn/fd/目录(nnnn为pid)』建立一个以其pid
为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd(fd:file descriptor)。
kill进程是通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。
这是一项高级技术,仅到管理员确定不会对运行中的进程造成影响时使用。应用程序对这种方
式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题