Блог компании 3v-Hosting

Что делать, если закончилось место в /var

Администрирование

6 мин.


Вопреки обычному стилю статей в нашем блоге - эта статья написана в формате короткого конкретного мануала, так как затронутый в ней вопрос решается конкретными действиями и не требует долгих размышлений об истории вопроса и его философии, как мы это любим :)

Мы только лишь подчеркнём, что этот мануал рассчитан прежде всего на пользователей Debian и Ubuntu. Конечно, команды диагностики df, du, find и lsof подходят и для большинства других Linux-систем, но вот команды apt актуальны для Debian-подобных дистрибутивов, а работа с journalctl - для систем с systemd.

 

Итак, первое, с чего стоит начать если вы получили сообщение и No space left on device - НЕ начинайте сразу удалять файлы из /var. Для начала нужно провести небольшое расследование и найти, что именно заполнило свободное место в данном разделе.

 

1. Проверяем свободное место

Первым делом проверяем действительное заполнение раздела, чтобы исключить ошибочные уведомления:

df -h /var

Если Use% близок к 100%, то файловая система действительно заполнена.

 

Заодно проверим inode:

df -i /var

и если IUse% достиг 100%, то проблема в количестве файлов. Такое бывает при миллионах мелких session-, cache- или временных файлов.

 

 

2. Находим самый большой каталог

sudo du -xhd1 /var | sort -h

Например:

120M    /var/cache
380M    /var/log
1.1G    /var/www
18G     /var/lib
20G     /var

В этом случае мы идём в /var/lib и повторяем команду для найденного крупного каталога:

sudo du -xhd1 /var/lib | sort -h

 

Отдельные файлы больше 500 МБ можно найти так:

sudo find /var -xdev -type f -size +500M -exec ls -lh {} \;

 

 

3. Если разросся /var/log

Смотрим размеры:

sudo du -h --max-depth=1 /var/log | sort -h

 

Ищем самые большие логи:

sudo find /var/log -type f -printf '%s %p\n' | sort -n | tail -20

 

Активный лог лучше обнулить, а не удалять, так как не все сервисы могут создавать логи самостоятельно и это может привести к падению некоторых сервисов:

sudo truncate -s 0 /var/log/example.log

После этого проверьте причину роста конкретного лога, а также проверьте настройки logrotate - ну или настройте его, если ещё этого не сделали. Если же приложение снова пишет гигабайты ошибок, то очевидно, что свободное место скоро снова быстро закончится.

 

 

4. Проверяем systemd journal

Размер журнала:

sudo journalctl --disk-usage

 

Удалить записи старше 14 дней:

sudo journalctl --vacuum-time=14d

 

Или ограничить текущий объём:

sudo journalctl --rotate
sudo journalctl --vacuum-size=500M

 

Постоянный лимит можно задать в конфигурации journald в файле /etc/systemd/journald.conf:

[Journal]
SystemMaxUse=500M

 

 

5. Если место занял Docker

Сначала проверяем:

docker system df

Если нужно подробнее:

docker system df -v

 

Удалить стандартный набор неиспользуемых объектов:

docker system prune

 

!Не удаляйте содержимое /var/lib/docker/overlay2 вручную.

С docker system prune -a и особенно --volumes тоже будьте осторожны, так как Docker может считать volume неиспользуемым, хотя внутри остались нужные данные.

 

 

6. Очищаем кэш APT

Проверяем:

sudo du -sh /var/cache/apt

И очищаем скачанные пакеты:

sudo apt clean

 

Также можно проверить ненужные зависимости:

sudo apt autoremove

Перед подтверждением autoremove прочитайте список пакетов, которые будут удалены.

 

 

7. Если большой /var/lib

Проверяем:

sudo du -xhd1 /var/lib | sort -h

Здесь осторожно. В /var/lib находятся рабочие данные Docker, PostgreSQL, MySQL/MariaDB и других сервисов.

 

Внимание! Никогда не выполняйте полную очистку данного каталога!

 

Если много места занимает /var/lib/mysql или /var/lib/postgresql, то ищите причину средствами самой СУБД. Файлы работающей базы вручную не удаляйте.

 

 

8. df и du показывают разные размеры

Удалённый файл может продолжать занимать диск, если его держит открытым работающий процесс.

Проверяем:

sudo lsof +L1

Если там обнаружился большой удалённый лог, найдите удерживающий его процесс и корректно перезапустите соответствующий сервис. После закрытия файлового дескриптора место освободится.

 

 

9. Проверяем результат

df -h /var
df -i /var

Проверяем упавшие сервисы:

systemctl --failed

По сути, схема диагностики получается достаточно простой:

 

No space left in device

 

Ну а если вам понадобится Linux VPS для тестов или развёртывания своего проекта, то вы знаете куда обратиться.

3v-Hosting Team

Автор

3v-Hosting Team

Команда 3v-Hosting - это группа преданных своему делу инженеров и операторов, которые занимаются созданием и поддержкой основы наших сервисов. Каждый день мы погружаемся в мир виртуальных и выделенных серверов, занимаясь всем, от развертывания и мониторинга до устранения реальных проблем, возникающих в производственных средах. Большинство наших статей основано на практическом опыте, а не просто на теории. Мы делимся своими наблюдениями о проблемах, с которыми сталкиваемся: перебоях в производительности, ошибках в настройке, тонкостях сетевых решений и архитектурных выборах, влияющих на стабильность и надежность. Наша миссия проста - мы хотим делиться знаниями, которые позволят вам управлять своими проектами с меньшим количеством неожиданностей и гораздо большей предсказуемостью.

Что такое epoll и почему Nginx такой быстрый
Что такое epoll и почему Nginx такой быстрый

Что такое epoll и почему Nginx считается одним из самых быстрых веб-серверов? Разбираем работу epoll, отличия от select и poll, событийную модель и настройку Ng...

14 мин