( Этот вопрос касается аналогичной проблемы, но в нем говорится о ротационном файле журнала.)
Сегодня я получил системное сообщение об очень малом пространстве / var
.
Как обычно, я выполнил команды в строке sudo apt-get clean
, что лишь немного улучшило сценарий. Затем я
удалил повернутые файлы журнала, что опять же дало очень мало улучшений.
После изучения я обнаружил, что некоторые файлы журналов в / var / log
выросли до очень больших размеров. Чтобы быть конкретным, ls -lSh / var / log
дает,
всего 28G - rw-r ----- 1 syslog adm 14G 23 августа 21:56 kern.log - rw-r ----- 1 syslog adm 14G 23 августа 21:56 syslog - rw-rw-r-- 1 root utmp 390K 23 августа 21:47 wtmp {{1 }} - rw-r - r-- 1 root root 287K 23 августа 21:42 dpkg.log - rw-rw-r-- 1 root utmp 287K 23 августа 20:43 lastlog {{1} }
Как мы видим, первые два являются оскорбительными. Я слегка удивлен, почему такие большие файлы не были повернуты.
Итак, что мне делать? Просто удалите эти файлы и перезагрузитесь? Или пойти на более разумные шаги?
Я использую Ubuntu 14.04.
ОБНОВЛЕНИЕ 1
Начнем с того, что системе всего несколько месяцев. Мне пришлось установить систему с нуля пару месяцев назад после поломки жесткого диска.
Теперь, как указано в этом ответе ,
я сначала проверил файлы журналов с нарушением правил, используя tail
, что неудивительно. Затем для более глубокого изучения я выполнил этот сценарий из того же ответа .
for log in /var/log/{syslog,kern.log}; do
echo "${log} :"
sed -e 's/\[[^]]\+\]//' -e 's/.*[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}//' ${log} \
| sort | uniq -c | sort -hr | head -10
done
Процесс занял несколько часов. Результат был в строке
/ var / log / syslog: 71209229 Ядро Рафида-Хамиза-Делла: sda3: rw = 1, want = 7638104968240336200, limit = 1681522688 { {1}} 53929977 Ядро Rafid-Hamiz-Dell: попытка доступа за пределы устройства 17280298 Ядро Rafid-Hamiz-Dell: попытка доступа за пределами конца устройства 1639 Rafid-Hamiz-Dell ядро: EXT4-fs предупреждение (устройство sda3): ext4_end_bio: 317: ошибка ввода-вывода -5 запись в индексный дескриптор 6819258 (смещение 0 размер 4096 начальный блок 54763121030042024)
{{1 }} / var / log / kern.log.1: 71210257 Ядро Rafid-Hamiz-Dell: попытка доступа за пределы устройства 71209212 Rafid-Hamiz-Dell ядро: sda3: rw = 1, want = 7638104968240336200, limit = 1681522688 Ядро 1639 Rafid-Hamiz-Dell: предупреждение EXT4-fs (устройство sda3): ext4_end_bio: 317: ошибка ввода-вывода -5 запись в индексный дескриптор 6819258 (размер смещения 0 4096 начальный блок 954763121030042024)
( / dev / sda3
- мой домашний каталог. Как мы можем найти,
lsblk / dev / sda NAME MAJ: MIN RM РАЗМЕР RO ТИП MOUNTPOINT sda 8: 0 0 931,5 ГБ 0 диск ├─sda1 8: 1 0 122,1 ГБ 0 частей / ├─sda2 8: 2 0 7,6 ГБ 0 частей [ SWAP] └─sda3 8: 3 0 801.8G 0 part / home
Почему процесс захочет писать сверх лимита, на самом деле выходит за рамки моего понимания. Возможно, я захочу задать другой вопрос на этом форуме, если это продолжается даже после обновления системы.)
Затем из этот ответ (вы можете проверить this для более глубокого понимания), я выполнил,
sudo su -
> kern.log
> syslog
Теперь эти файлы имеют нулевой размер. Система работает нормально до и после перезагрузки.
Я посмотрю эти файлы (вместе с другими) в ближайшие несколько дней и сообщу,
они будут вести себя нестандартно.
В качестве последнего примечания, оба файла с нарушением ( kern.log
и syslog
) должны быть повернуты для проверки файлов ( grep
] помогло) внутри
/ etc / logrotate.d /
показывает.
ОБНОВЛЕНИЕ 2
Файлы журнала фактически меняются. Похоже, что большие размеры были достигнуты за один день.
Просто удалить эти файлы и перезагрузиться?
Нет. Очистите их, но не используйте rm
, потому что это может привести к сбою чего-либо, пока вы набираете команду touch
, чтобы воссоздать его.
Кратчайший способ:
cd /var/log
sudo su
> lastlog
> wtmp
> dpkg.log
> kern.log
> syslog
exit
Если не получить root-права. потребуется sudo
. Взято из другого ответа на AU.
ДО ЭТОГО. Выполните tail {logfile}
и проверьте, есть ли причина для их большого размера. Если этой системе не исполнилось несколько лет, для этого не должно быть причин, и исправить проблему лучше, чем позволить этому продолжаться.
И kern.log, и syslog обычно не должны быть такими большими. Но как я уже сказал: если эта система работает годами и годами, она может быть нормальной, и файлы нужно просто очистить.
И чтобы предотвратить ее рост в будущем: setup logrotate
. Это довольно просто, и он сжимает файл журнала, когда он становится больше, чем установленный вами размер.
Еще одна вещь: если вы не хотите удалять содержимое, вы можете сжать файлы путем их архивирования или сжатия.В результате у вас будут файлы, вероятно, на 10% от того, что они есть сейчас. Если на диске еще есть место для этого.
Вероятно, стоит попытаться определить, что заполняет журнал (-ы) - либо просто визуально изучив их с помощью команды less
или tail
tail -n 100 /var/log/syslog
, или если оскорбительные строки слишком глубоко скрыты, чтобы легко увидеть, что происходит, что-то вроде
for log in /var/log/{dmesg,syslog,kern.log}; do
echo "${log} :"
sed -e 's/\[[^]]\+\]//' -e 's/.*[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}//' ${log} \
| sort | uniq -c | sort -hr | head -10
done
(примечание: это может занять некоторое время, учитывая такие большие файлы), который попытается удалить временные метки, а затем подсчитать наиболее часто возникающие сообщения.
Мой метод очистки файлов системного журнала таков. Шаги 1 и 2 необязательны, но иногда вам нужно проверить старые журналы, и иногда полезно резервное копирование. ; -)
Необязательно: Скопируйте файл журнала
cp -av --backup = пронумерованный файл.log file.log.old
Необязательно: используйте Gzip для копии журнала
gzip file.log.old
Используйте / dev / null для чистого файла
cat / dev / null> file.log
И мы используем для этого журналы (только на нескольких серверах) logrotate и еженедельно выполняем скриптом cron, который сжимает все файлы с * .1 (или следующие ротации) с помощью gzip.
Сегодня я установил Ubuntu 16.04 и заметил ту же проблему. Однако я исправил это с помощью busybox-syslogd. Ага! Я только что установил этот пакет, и проблема решена. :)
$ sudo apt-get install busybox-syslogd
После установки этого пакета сбросьте syslog
и kern.log
:
sudo tee /var/log/syslog /var/log/kern.log </dev/null
Я надеюсь, что это простое решение будет полезно другим людям.