问题描述
服务器磁盘空间使用率即将100%,使用rm -rf 日志文件名删除文件后,再使用df -h查看,发现磁盘空间未释放
问题原因
- 在linux系统中,通过rm删除文件将会从文件系统的目录结构上接触链接(unlink),如果文件是被打开的(有进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用
问题解决
1、找出打开文件的进程
[root@localhost ~]# lsof | grep deleted
或
[root@localhost ~]# find /proc/*/fd -ls | grep '(deleted)'
2、让进程释放文件,进而释放磁盘空间
当linux打开一个文件的时候,Linux内核会为每一个进程在/proc/ 『/proc/nnnn/fd/目录(nnnn为pid)』建立一个以其pid 为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd(fd:file descriptor)
kill进程是通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件
方式一:
[root@localhost ~]# kill -9 $进程号; # kill掉相应的进程或者重启该进程,让os自动回收磁盘空间
方式二:
[root@localhost ~]# echo " " > 文件名
或
[root@localhost ~]# : > /path/to/the/file.log # 或 : > "/proc/$pid/fd/$fd"