Назад | Перейти на главную страницу

Удалить журнал во время записи с помощью SED - / var / log / messages

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

sed -i '1,2000000d' / var / log / сообщения

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

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

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

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

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

[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.

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

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