Имеется:
- сетевой шлюз на debian 9
- SARG (Squid Analysis Report Generator) – генератор отчетов по использованию сети (по сути, прокси-сервер, пропускающий интернет-трафик через себя и формирующий за счет этого логи в виде форматированных html-файлов)
Проблема:
Поломался интернет, и не запускается служба squid , пока физически не перезапустишь сервер.
Причина
Как оказалось, были заняты все inode на диске. Проверить:
1 2 3 |
$ df -i ... /dev/sda1 30400512 30397790 2722 100% / |
inode (индексный дескриптор) – это структура данных, в которой хранится метаинформация о файле, каталоге или другом объекте файловой системы, кроме непосредственно данных и имени. Например, размер файла, владелец файла, режим доступа, дата последнего изменения файла и др.
В файловых системах со статическим количество inode (ext2-ext4), они могут «закончиться». В этом случае нельзя будет создать новый файл или каталог на устройстве, даже если там достаточно свободного места. При этом уже имеющиеся файлы можно полноценно изменять.
Решение
Найти где именно лежит куча файлов.
1 2 3 4 5 6 7 8 9 10 11 12 |
$ cd /var $ find . -mindepth 2 | awk -F/ '{ print $2"/" }' | sort | uniq -c | sort -n | tail -10 1 mail/ 17 spool/ 38 backups/ 87 tmp/ 159 log/ 210 webmin/ 42057 cache/ 56899 opt/ 9577038 lib/ 20627216 www/ => 19 млн файлов (inode) |
В каталоге /var/www/squid-reports создавались отчеты по использованию сети.
Структура хранения отчетов такова, что отдельный html-фал создается под каждое соединение. Т.е. для одного хоста за один день может создасться 1000 html-файлов.
Нужно заархивировать старые отчеты и удалить с сервера. Например, так (за июль 2018):
1 2 |
$ cd /var/www/squid-reports $ tar -cvf reports_2018Jul.tar ./2018Jul* --remove-files |
Или написать скрипт для ежемесячного создания архивов отчетов squid-reports:
1 2 3 4 |
#!/bin/sh cd /var/www/squid-reports DATE=$(date -d "-1 month" +""%Y%b"") tar -cvf reports_$DATE.tar ./$DATE* --remove-files |
Его выполнение поставить на cron в полночь 4-го числа каждого месяца (0 0 4 * *). Четвертого числа, а не первого, т.к. SARG первые несколько дней нового месяца (н-р, Sept) записывает отчеты в каталоги еще предыдущего месяца (н-р, Aug). И нужно дождаться, пока не сгенерируются ВСЕ каталоги с именем Aug, иначе они останутся необработанными.