linux 服务器 删除空间却未释放
在Linux
或者Unix
系统中,通过rm
或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink)
,然而如果文件是被打开的(有一个进程正在使用)
,那么进程将仍然可以读取该文件,磁盘空间也一直被占用
,这样就会导致我们明明删除了文件,但是磁盘空间却未被释放
获取占用列表状态
1lsof | grep deleted
可以看到哪些文件还被使用,未被释放空间。
释放磁盘空间
- 一种方法是 kill 掉相应的进程,或者停掉使用这个文件的应用,让 os 自动回收磁盘空间,当 linux 打开一个文件的时候,Linux 内核会为每一个进程在
/proc/
,/proc/nnnn/fd/
目录(nnnn 为 pid)建立一个以其 pid 为名的目录用来保存进程的相关信息,而其子目录 fd 保存的是该进程打开的所有文件的 fd(fd:file descriptor);kill
进程是通过截断 proc 文件系统中的文件可以强制要求系统回收分配给正在使用的的文件,这是一项高级技术,仅当管理员确定不会对运行中的进程造成影响时使用。
1kill -9 12345 # PID
- 重启服务
lsof 命令
lsof
全名list opened files
,也就是列举系统中已经被打开的文件。我们都知道,linux 环境中,任何事物都是文件,设备是文件,目录是文件,甚至sockets
也是文件。