linux系统删除/run下的文件后,仍占用磁盘空间

1.问题场景

1. /run目录下磁盘分区已经被占满,导致使用systemctl命令启动时日志无法记录。

2.通过rm -rf 命令将文件夹删除之后,文件已经删除看,但是空间没有被释放,通过df -h命令查看,分区占用率还是100%。

2.处理步骤

初步排查是删除文件的时候,文件已经删除了,但是进程还是占用这个文件,导致文件没有真正的删除。

因为在centos中没有lsof命令,所以使用

sudo find /proc/*/fd -ls | grep '(deleted)'
[root@ywtgyyxt0002 run]# sudo find /proc/*/fd -ls | grep '(deleted)'
905400770    0 lr-x------   1 root     root           64 Jan 10 17:18 /proc/1246/fd/9 -> /run/log/journal/8c4c592e500a45289e1a802cde56f85f/system@a51a6f829d874299895ec223859ab3e0-000000000da99073-000624e2ff1bc19a.journal\ (deleted)
905400771    0 lr-x------   1 root     root           64 Jan 10 17:18 /proc/1246/fd/10 -> /run/log/journal/8c4c592e500a45289e1a802cde56f85f/system@a51a6f829d874299895ec223859ab3e0-000000000dac9aa6-000624e32f86a9dc.journal\ (deleted)
905400772    0 lr-x------   1 root     root           64 Jan 10 17:18 /proc/1246/fd/11 -> /run/log/journal/8c4c592e500a45289e1a802cde56f85f/system@a51a6f829d874299895ec223859ab3e0-000000000daf9b39-000624e36090585f.journal\ (deleted)
905400773    0 lr-x------   1 root     root           64 Jan 10 17:18 /proc/1246/fd/12 -> /run/log/journal/8c4c592e500a45289e1a802cde56f85f/system@a51a6f829d874299895ec22

进程 ID 为 1246 的进程打开了一些日志文件(journal 文件),但这些文件已经被删除(deleted)。这些文件仍然被进程占用,因此它们占用的磁盘空间不会被释放,直到进程关闭这些文件描述符。

以下为一些解决思路:

1.重启相关进程

重启占用文件的进程(PID 1246)可以释放这些文件描述符,从而释放磁盘空间。


2. 手动释放文件描述符

如果不希望重启进程,可以手动释放文件描述符。


3. 清理日志文件

如果这些文件是日志文件,可以检查日志配置并清理旧的日志文件。


4. 检查系统日志配置

如果问题频繁发生,可能需要调整系统日志的配置。

  1. 1. 重启相关进程

    重启占用文件的进程(PID 1246)可以释放这些文件描述符,从而释放磁盘空间。

  2. 确认进程名称:

    ps -p 1246 -o comm=

    输出可能是 systemd-journald 或其他日志服务。

  3. 重启进程:

    sudo systemctl restart systemd-journald

    如果进程不是 systemd-journald,请根据实际情况重启对应的服务。

  4. 查看进程打开的文件描述符:

    ls -l /proc/1246/fd

    你会看到类似以下的输出:

    lr-x------ 1 root root 64 Jan 10 17:18 9 -> /run/log/journal/... (deleted)
    lr-x------ 1 root root 64 Jan 10 17:18 10 -> /run/log/journal/... (deleted)
  5. 关闭文件描述符:
    使用 gdb 工具关闭文件描述符:

    sudo gdb -p 1246

    在 gdb 中输入以下命令:

    call close(9)
    call close(10)
    ...
    quit

    将 910 等替换为需要关闭的文件描述符编号。

  6. 查看日志文件大小:

    sudo journalctl --disk-usage
  7. 清理旧的日志文件:

    sudo journalctl --vacuum-size=100M

    这将保留最近的 100MB 日志,删除旧的日志文件。

  8. 编辑 journald 配置文件:

    sudo vi /etc/systemd/journald.conf
  9. 调整以下参数:

    • SystemMaxUse=:设置日志的最大磁盘使用量。

    • SystemMaxFiles=:设置日志文件的最大数量。

  10. 重启 journald 服务:

    sudo systemctl restart systemd-journald

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值