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

Как найти файлы, занимающие больше всего места на сервере

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

7 мин.


Даже если сервер изначально настроен аккуратно, то со временем на нём всё равно накапливается много лишнего. Логи постоянно растут, резервные копии остаются после тестов, старые архивы годами лежат без дела. Docker вообще способен месяцами хранить неиспользуемые образы, контейнеры и тома, постепенно съедая свободное место на диске вашего сервера.

И в какой-то момент диск оказывается почти заполнен, в результате чего сервисы начинают работать с перебоями, обновления завершаются ошибками, а запись новых данных превращается в проблему.

Конечно, для любого администратора причина сразу становится более чем очевидна. Остаётся лишь выяснить, какие файлы или каталоги занимают больше всего места на диске, а затем решить, что с ними делать: удалить, перенести в другое хранилище или включить автоматическую очистку.

В этой коротенькой статье мы приведём пару способов, которые помогают найти главных "пожирателей" дискового пространства на Linux-сервере и выяснить, какие файлы весят больше всего. Погнали!

 

 

 

 

Начните с общей оценки состояния диска

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

Для этого выполните команду:

df -h

Она покажет размер каждого раздела, объём занятого и свободного пространства, а ещё процент использования диска в удобном для чтения виде, благодаря аргументу -h (от human). Нередко оказывается, что проблема скрывается вовсе не в корневом разделе /, а, например, в /var, где накапливаются логи и данные приложений, или в /home, если на сервере работают несколько пользователей и складывают в свои домашние папки скачанные из сети файлы.

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

 

 

 

 

Какие каталоги занимают больше всего места

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

Для этого выполните команду:

du -h --max-depth=1 /

Она подсчитает размер каждого каталога первого уровня. Чаще всего больше всего места занимают /var, /home, /opt, /srv или /tmp, хотя на конкретном сервере картина может оказаться совсем другой.

Когда вы нашли подозрительный каталог, то продолжайте и углубляйтесь ещё на один уровень. Например, если больше всего места занимает /var, тогда выполните команду:

du -h --max-depth=1 /var

Так постепенно можно добраться до каталога, который и стал причиной нехватки свободного места и обычно на это уходит всего пару минут.

 

Если каталогов слишком много, то удобнее всего будет сразу отсортировать их по размеру:

du -h --max-depth=1 /var | sort -hr

Самые объёмные директории окажутся в начале списка и вам не придётся просматривать результаты вручную, пролистывая вывод.

 

Такой подход особенно удобен при работе с VPS или удаленным выделенным сервером по SSH, когда под рукой нет удобных графических утилит для анализа использования диска.

 

 

 

 

Поиск самых больших файлов

Когда проблемная директория обнаружена, тогда можно переходить к поиску самых крупных файлов в ней, о которых давно забыли, но которые порою могут занимать десятки гигабайт.

Для этого подойдёт команда:

find / -type f -size +500M

Она найдёт все файлы размером больше 500 МБ. При необходимости порог легко изменить, указав, например, +1G или +100M.

 

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

find /var -type f -size +500M

Так команда выполнится существенно быстрее, поскольку не будет обходить всю файловую систему.

 

Бывает, что нужен не просто список файлов больше определённого размера, а рейтинг самых тяжёлых объектов. В этом случае поможет комбинация find, du и sort:

find / -type f -exec du -h {} + | sort -hr | head -20

Эта команда выведет двадцать самых больших файлов на сервере. Обычно в этом списке обнаруживаются старые резервные копии баз данных, ISO-образы, архивы, дампы памяти, журналы приложений или другие файлы, которые давно перестали быть нужными, но продолжают занимать дисковое пространство.

 

 

 

Когда всё место съедают логи

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

Итак, сначала стоит посмотреть, сколько места занимают все журналы в каталоге /var/log:

du -sh /var/log/*

Если сервер использует systemd, то будет полезным проверить размер системного журнала:

journalctl --disk-usage

Бывает, что именно journald занимает несколько гигабайт, особенно на серверах с большим количеством событий или включённым подробным логированием.

 

Старые записи можно удалить, оставив только журналы за последние семь дней:

journalctl --vacuum-time=7d

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

 

 

 

 

Docker тоже может незаметно заполнить диск

Если на сервере используется Docker, то проверять стоит не только обычные файлы, так как контейнеры часто оставляют после себя данные, которые продолжают занимать место даже после удаления проекта. Обычно это старые образы, остановленные контейнеры, неиспользуемые тома и кэш сборки. Постепенно они накапливаются, особенно на серверах, где регулярно тестируются новые версии приложений и со временем забивают место на диске.

Посмотреть, сколько места занимает каждый тип данных, поможет команда:

docker system df

Она покажет общий объём, занятый образами, контейнерами, томами и кэшем сборки.

 

Если ненужные данные действительно накопились, их можно удалить:

docker system prune -a

!!!НО, с этой командой лучше не спешить. Перед очисткой проверьте, какие объекты будут удалены, особенно если ваш сервер используется в рабочей среде, ведь часто старый образ оказывается единственной возможностью быстро откатить приложение после неудачного обновления.

 

 

 

 

Удобные инструменты для анализа

Стандартных Linux утилит обычно вполне хватает, чтобы найти причину нехватки места. Но есть программы, с которыми эта работа становится заметно быстрее. И одна из самых популярных - это ncdu.

После установки достаточно выполнить:

ncdu /

Через несколько секунд откроется интерактивный интерфейс. В нём можно перемещаться по каталогам клавишами, сразу видеть их размер и быстро находить самые увесистые директории. Если необходимо, то ненужные файлы и каталоги можно удалить прямо из ncdu (хотя на продовых серверах лучше не спешить и сначала убедиться, что они действительно больше не нужны).

Многие системные администраторы используют ncdu почти каждый день, так как когда нужно быстро понять, куда исчезло свободное место, такой интерфейс оказывается удобнее, чем последовательный запуск du, find и sort.

 

 

 

Лучше не доводить диск до переполнения

Разовая очистка освобождает место, но очевидно, что через некоторое время проблема повторится и причиной тому служит продолжающееся накопление данных.

Поэтому есть смысл один раз настроить регулярное обслуживание сервера. Ротация логов через logrotate, удаление временных файлов, контроль резервных копий, периодическая очистка Docker и других систем, которые создают кэш, избавляют от большинства подобных ситуаций в будущем.

Не менее полезен мониторинг свободного места, чтобы сервер заранее отправлял уведомление о том, что раздел заполнен, например, на 80-85% - тогда времени на реакцию будет достаточно и вам не придётся разбираться с проблемой уже после того, как перестанут запускаться службы или база данных перейдёт в режим ошибок. Для серверов, на которых работают сайты, CRM, базы данных и другие важные сервисы, такой подход обычно оказывается гораздо дешевле любой аварийной очистки.

 

 

 

 

FAQ

Как часто стоит проверять свободное место на сервере?

На рабочих серверах лучше использовать систему мониторинга, которая предупредит о нехватке места заранее. Если её нет, то периодически проверяйте состояние дисков с помощью df -h, особенно после обновлений и резервного копирования. А периодичность зависит от интенсивности использования сервера.

 

Можно ли просто удалить содержимое /var/log?

Не стоит. Некоторые службы продолжают использовать открытые лог-файлы. Безопаснее всего будет применять logrotate или очищать журналы через journalctl.

 

Какой инструмент удобнее всего использовать для поиска крупных файлов?

Для ручного анализа отлично подходит ncdu. Но если нужен поиск в скриптах или автоматизация, то удобнее использовать find, du и sort.

 

Почему после удаления большого файла свободное место не освободилось?

Скорее всего, файл всё ещё открыт каким-то процессом. Проверить это можно командой lsof +L1. Обычно достаточно перезапустить соответствующую службу.

 

Безопасно ли использовать docker system prune -a?

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

 

Как избежать постоянной нехватки места на диске?

Настройте ротацию логов, следите за резервными копиями, периодически очищайте ненужные данные Docker и используйте мониторинг свободного места. Это намного эффективнее регулярной ручной очистки.

 

 

 

Заключение

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

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

Если объём данных постоянно растёт, то при выборе VPS или выделенного сервера стоит заранее учитывать возможность расширения дискового пространства. Это упростит масштабирование инфраструктуры и избавит от срочного переноса сервисов в самый неподходящий момент.

3v-Hosting Team

Автор

3v-Hosting Team

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