Loading... #### 概述 在发现公司业务环境磁盘空间不足的情况下使用rm命令删除占用的日志或无用文件后发现存储空间未得到释放。 ```shell [root@localhost fd]# df -Th 文件系统 类型 容量 已用 可用 已用%% 挂载点 /dev/sda9 ext4 375G 176G 180G 50% / tmpfs tmpfs 32G 72K 32G 1% /dev/shm /dev/sda1 ext4 194M 33M 152M 18% /boot /dev/sda2 ext4 9.9G 151M 9.2G 2% /home /dev/sda3 ext4 9.9G 151M 9.2G 2% /opt /dev/sda5 ext4 9.9G 151M 9.2G 2% /tmp /dev/sda6 ext4 9.9G 5.3G 4.2G 57% /usr /dev/sda7 ext4 9.9G 2.0G 7.5G 21% /var /dev/mapper/data01 ext3 1008G 907G 51G 95% /data01 /dev/mapper/data03 ext3 1008G 35G 922G 4% /data0 ``` 在通过`lsof`来查看哪些进程占用的已删除文件,发现进程Pid`3921`占用着已经删除的文件。重启服务可以立即释放存储空间但生产环境中并不能进行这个操作。 ```shell [root@localhost ~]# lsof |grep deleted java 3921 collect 39w REG 253,0 22524756391 41885497 /data01/test/tmpPath/test.dat (deleted) .... ``` ##### 推荐的清理磁盘空间方式 使用`>`方式清空文件内容达到释放目的 #### 解决办法 可以在进程的`/proc/3921/fd`下看到很多文件占用的链接,通过命令可以获取哪些已删除但仍在占用的fd id。 ```shell [root@localhost fd]# lsof -p 3921 -a +c 15|grep deleted |awk '{print $4}' |sed -r 's/[a-z]//g' 39 56 78 101 104 110 228 258 306 344 368 374 393 446 487 546 577 589 626 648 ``` 通过命令生成手动删除的命令,再手动执行清理。 ```shell [root@localhost ~]# lsof -p 3921 -a +c 15|grep deleted |awk '{print $4}' |sed -r 's/[a-z]//g'|xargs -i echo "> /proc/3921/fd/{}" > /proc/3921/fd/39 > /proc/3921/fd/56 > /proc/3921/fd/78 > /proc/3921/fd/101 > /proc/3921/fd/104 > /proc/3921/fd/110 > /proc/3921/fd/228 > /proc/3921/fd/258 > /proc/3921/fd/306 > /proc/3921/fd/344 > /proc/3921/fd/368 > /proc/3921/fd/374 > /proc/3921/fd/393 > /proc/3921/fd/446 > /proc/3921/fd/487 > /proc/3921/fd/546 > /proc/3921/fd/577 > /proc/3921/fd/589 > /proc/3921/fd/626 > /proc/3921/fd/648 ``` 最后修改:2022 年 02 月 26 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏