Вопрос или проблема
Диск, на котором находится Ubuntu на моем компьютере, имеет размер 115GB
.
Когда диск был заполнен на 114.7GB
.
Я начал удалять некоторые файлы здесь и там, чтобы освободить около 5GB
.
Но я заметил, что диск снова был заполнен на 114GB
. Я подумал, что это из-за каких-то кешей или подкачки, поэтому не придал этому значения и освободил около 40GB
, переместив несколько медиафайлов с диска.
Через час или около того у меня появилось уведомление, что диск снова полон!!
40GB
!!! Всё исчезло!
Итак, я выяснил, что проблема связана с файлом /var/log/syslog
, который первоначально был точно менее 20GB
. Я знаю это, потому что папка /var
была 17GB
до того, как я очистил память.
Файл /var/log/syslog
сейчас составляет 55.9GB
!
Может ли кто-нибудь объяснить эту аномалию?
Это баг?
Или на меня повлияла какая-то вредоносная программа или вирус?
Такой неограниченный рост обычно возникает из-за повторяющихся логов одной или нескольких ошибок из одного и того же источника.
В моем случае это было из-за постоянного сообщения об ошибке подключения с интерфейса мониторинга wifi mon0
, который я использовал для мониторинга моего wifi-трафика.
Также были сообщения об ошибках такого переполнения в других различных интерфейсах, таких как tun0
из VPN и т.д.
Я решил свою проблему, очистив файл /var/log/syslog
Чтобы устранить эту ошибку
- Вам нужно найти источник этой ошибки и остановить его, чтобы предотвратить дальнейшее переполнение лога
- Затем очистить файл
/var/log/syslog
Проблемы, с которыми вы можете столкнуться, выполняя то же самое
- Невозможно открыть
var/log/syslog
: из-за огромного размера любой редактор, скорее всего, зависнет - Невозможно очистить
/var/log/syslog
: опять же, из-за огромного размера очистка – также сложная задача
Итак, чтобы просмотреть ошибку, которая вызвала переполнение
tail -f /var/log/syslog
Для очистки используйте:
sudo sh -c 'cat /dev/null > /var/log/syslog'
У меня были похожие проблемы, мой файл syslog имел размер 115GB, а syslog.1 также 115G, плюс множество сжатых файлов.
1-й шаг
найти источник:
watch tail /var/log/syslog
вы, вероятно, заметите общие записи об ошибках;
после этого; учитывая, что ваши файлы слишком большие; почти бессмысленно их вращать.
Итак, вы можете удалить все сжатые файлы и файлы *.1, чтобы освободить место на диске (в моем случае около 300GB)
2-й шаг
Уменьшите файл, НЕ УДАЛЯЙТЕ (иначе у вас могут быть проблемы с разрешениями в будущем), существует много методов, включая:
sudo tee /var/log/syslog </dev/null
вы можете также выполнить второй шаг сначала, а затем продолжать наблюдать, чтобы найти причину, но будьте уверены, если вы этого не сделаете, это произойдет снова. Вероятно, это что-то зациклилось, системные службы – хорошее место для начала поиска (например, что-то, что перезапускается очень быстро и постоянно)
Проверьте /var/lib/logrotate/status
и убедитесь, что он правильно вращается. Вам также нужно просмотреть содержимое файла и посмотреть, не является ли это системной проблемой, постоянно бросающей предупреждения.
Попробуйте это. Это должно правильно работать и очистить:
sudo sh -c 'cat /dev/null > /var/log/syslog'
Шаг 1: Создайте файл-скрипт, например clearlog.sh, в папке /var/log/ с разрешением на файл ‘chmod 775 clearlog.sh’
файл clearlog.sh с нижеследующими строками:
#!/bin/sh
LINECOUNTS=(`cat /var/log/syslog | wc -l`)
if [ $LINECOUNTS -gt "1000" ];
then
echo "Recreating syslog file due to lines "$LINECOUNTS" are more than 1000 lines"
truncate -s 0 /var/log/syslog
sleep 5
else
echo "syslog file having line count "$LINECOUNTS" less than 1000}"
fi
/bin/systemctl restart syslog
exit
Шаг 2: Отредактируйте файл в папке /etc/logrotate.d/logs, добавьте секцию postrotate
/var/log/syslog {
daily
rotate 3
missingok
copy
notifempty
compress
dateext
dateformat -%Y%m%d%H%M
postrotate
/var/log/clearlog.sh
endscript
}
Чтобы протестировать скрипт из командной строки, выполните эту команду ‘logrotate -f /etc/logrotate/logs’
Несмотря на запоздалый ответ на оригинальный пост, это помогло мне. При запуске программы как сервиса, кажется, что все printf-функции перенаправляются в syslog вместо stdout, если у вас много printf, это быстро заполнит syslog. У меня были проблемы с некоторыми из предложенных здесь методов, но
sudo tee /var/log/syslog </dev/null
работал каждый раз.
Учтите, что (по крайней мере, для меня) когда файл syslog достаточно заполнится, это предотвратило запуск интерфейса Raspberry Pi – я обошел это, войдя через Putty и первым выполнив команду tee, а затем перезагружая.
Если вы не хотите отслеживать программу, которая часто/много/повторно/… пишет в syslog, то измените конфигурацию logrotate. У вас должен быть файл /etc/logrotate.d/rsyslog (или какой-то аналогичный файл конфигурации. Добавьте одно из следующих в конфигурацию (сразу под “rotate” или в другом месте, если вы знаете, что делаете):
size 100k <= установите это, чтобы вращать логи, когда они достигают указанного размера в байтах
minsize 100k <= установите это, чтобы предотвратить временное вращение лога, если размер лога меньше этого значения
maxsize 100k <= установите это, чтобы вращать лог, который достиг этого размера, кроме временных вращений.
Размер 100k указан просто для примера – зависит от того, сколько лога вы хотите видеть в любое время… Лично мне больше всего нравится настройка minsize, но это только мое мнение. И 100k – это просто для примера. Установите разумное значение для вашего доступного дискового пространства (и ваших привычек/предпочтений отладки).
Установка shurfshark snap привела к тому, что мой syslog занял все свободное место на жестком диске за день. После удаления кажется, что размер файла стал стабилен.
Ответ или решение
Как предотвратить неконтролируемый рост файла /var/log/syslog в Ubuntu
Данный вопрос часто встречается у пользователей Linux, особенно тех, кто сталкивается с проблемами быстрого заполнения диска. Проблема чрезмерного роста файла /var/log/syslog может быть вызвана различными факторами, которые важно идентифицировать и устранить. Давайте посмотрим, как решить эту проблему шаг за шагом.
Шаг 1: Идентификация источника проблемы
Ключевая задача заключается в выяснении, какое приложение или процесс генерирует чрезмерно большое количество записей в лог. Для начала используйте команду:
watch tail /var/log/syslog
Эта команда позволит вам наблюдать в реальном времени за логами и выявить сообщения, которые повторяются чаще всего. Чаще всего такие сообщения индикаторы ошибок, например, с интерфейсами Wi-Fi, как mon0
, или другими сетевыми интерфейсами.
Шаг 2: Очистка желудка syslog
После нахождения источника необходимо очистить файл syslog, чтобы освободить дисковое пространство и предотвратить повторное переполнение. Не рекомендуется удалять файл напрямую, чтобы избежать проблем с правами доступа. Вместо этого выполните команду:
sudo sh -c 'cat /dev/null > /var/log/syslog'
Этот подход безопасно очищает содержимое файла, не изменяя его права и владельца.
Шаг 3: Настройка ротации логов
После очистки файла важно настроить системное вращение логов, чтобы в будущем избежать подобных проблем. Проверьте конфигурацию logrotate, открыв файл /etc/logrotate.d/rsyslog, и добавьте следующие настройки:
/var/log/syslog {
daily
rotate 7
missingok
notifempty
compress
dateext
maxsize 100M
}
Эти параметры означают ежедневную ротацию логов, хранение семи архивов, их сжатие и ограничение объема файла до 100M перед ротацией.
Заключение
Сложности в виде быстрого роста лог-файлов могут возникнуть в результате запущенных процессов, создающих большое количество записей из-за ошибок или других аномалий в системе. Правильная идентификация и решение этих проблем, а также настройка системной ротации логов помогут избежать дальнейших проблем. Постоянный мониторинг и управление логами на системах Linux – это важная часть поддержания стабильности и производительности вашего ПК.
Следуя этим рекомендациям, вы можете значительным образом повысить управляемость системы и снизить риски, связанные с переполнением диска.