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. 重启相关进程
重启占用文件的进程(PID 1246)可以释放这些文件描述符,从而释放磁盘空间。
-
确认进程名称:
ps -p 1246 -o comm=
输出可能是
systemd-journald
或其他日志服务。 -
重启进程:
sudo systemctl restart systemd-journald
如果进程不是
systemd-journald
,请根据实际情况重启对应的服务。 -
查看进程打开的文件描述符:
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)
-
关闭文件描述符:
使用gdb
工具关闭文件描述符:sudo gdb -p 1246
在
gdb
中输入以下命令:call close(9) call close(10) ... quit
将
9
、10
等替换为需要关闭的文件描述符编号。 -
查看日志文件大小:
sudo journalctl --disk-usage
-
清理旧的日志文件:
sudo journalctl --vacuum-size=100M
这将保留最近的 100MB 日志,删除旧的日志文件。
-
编辑
journald
配置文件:sudo vi /etc/systemd/journald.conf
-
调整以下参数:
-
SystemMaxUse=
:设置日志的最大磁盘使用量。 -
SystemMaxFiles=
:设置日志文件的最大数量。
-
-
重启
journald
服务:sudo systemctl restart systemd-journald