解决方法:1、利用“lsof | grep deleted”命令,获取已经被删除但是仍被应用程序占用的进程;2、利用kill命令,删除获取的进程即可释放删除的空间,语法为“kill -9 获取到占用被删文件的进程号”。
本教程操作环境:linux7.3系统、Dell G3电脑。
因为被删除的文件在删除的时侯还是进程在操作(打开、访问等)的缘故,rm只完成了在磁盘上文件实体的释放,而类似free list结构中相应的文件系统因进程的操作相应的inode并未释放。
解决的方法:这样的问题解决起来也很简单,找到操作的进程,kill掉就可以了,可是找到操作的进程恰恰是本问题的难点和关键。
这样的问题也可以通过重启机器和nmount/mount文件系统这样的方式解决,但这样的方法我是不提倡的,小小的问题就重启机器,小题大做。
过程:
1、找到正在用被删文件的进程
lsof | grep deleted
可以获取一个已经被删除但是仍然被应用程序占用的文件列表
用该命令后,我发现占用的文件列表非常多,我们需要将占用已删除文件的进程给一个一个的杀掉
示例如下:
[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
2、kill掉相应的进程空间就释放了
kill -9 PID
推荐学习:Linux视频教程
The above is the detailed content of What to do if rm deletion does not release space in Linux. For more information, please follow other related articles on the PHP Chinese website!