Удалите логи, пока пишется с помощью 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
}
Объяснение:
- повернуть 4: сохранить последние четыре файла.
- размер 50M: они вращаются всякий раз, когда его размер превышает 50M.
/usr/bin/killall
: команда, которая будет выполнена после вращения.
Пожалуйста, смотрите больше информации на страницах руководства: man logrotate
,
Примечание. Вероятно, вы освобождаете пространство путем перезагрузки узла.
Надеюсь, это поможет.