Удалите логи, пока пишется с помощью SED - /var/log/messages

У меня была файловая система, которая была более 60%. Я обнаружил, что файл /var/log/messages содержит более 4 миллионов строк, поэтому я решил удалить 2 миллиона строк, чтобы освободить место. Я выполнил команду

sed -i '1,2000000d' /var/log/messages

строки были удалены, а размер журнала уменьшился примерно на 300 МБ, но использование файловой системы увеличилось с 60% до 90%.

Затем я перезапустил службу rsyslog, но ничего не произошло, использование все еще составляет 90%.

Обратите внимание, что если я выполню команду du -sh * и затем суммирую использование каждого файла, общее использование не будет соответствовать значению "Использовано" файловой системы. Похоже, должен быть скрытый файл, занимающий остальное пространство, но я не знаю, как его найти или удалить.

2 ответа

Наконец-то я нашел решение этой проблемы.

Проблема заключалась в том, что удаленный файл все еще был открыт системой

[root]# lsof | grep messages
COMMAND     PID      USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
abrt-dump  2015      root    4r      REG              252,6 417938659        195 /var/log/messages (deleted)
[root]#

поэтому проблема была решена, когда я закрыл этот файл, выполнив команду gdb.

[root]# gdb -p 2015
(gdb ) p close (4)

После выполнения команд использование файловой системы составляет 25 %.

Спасибо

Я думаю, что не рекомендуется удалять файл во время использования, потому что может вызвать такой тип поведения. Я видел случаи, когда некоторые пользователи удаляли / уменьшали большие файлы, когда приложение все еще входило в него, и файловая система не думала замечать изменения в размере, пока они не перезапустили приложение.

Во многих дистрибутивах вы можете использовать logrotate, чтобы вращать этот файл и избегать журналов, чтобы заполнить раздел. В RHEL6 вы можете настроить это, отредактировав /etc/logrotate.conf файл и добавление блока, как это:

/var/log/messages { rotate 4 size 50M postrotate /usr/bin/killall -HUP syslogd endscript }

Объяснение:

  1. повернуть 4: сохранить последние четыре файла.
  2. размер 50M: они вращаются всякий раз, когда его размер превышает 50M.
  3. /usr/bin/killall: команда, которая будет выполнена после вращения.

Пожалуйста, смотрите больше информации на страницах руководства: man logrotate,

Примечание. Вероятно, вы освобождаете пространство путем перезагрузки узла.

Надеюсь, это поможет.

Другие вопросы по тегам