Как узнать, что занимает место на диске с помощью du и df

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

Команда df: обзор использования дискового пространства

Команда df (disk free) позволяет получить общую картину — сколько всего места на диске, сколько из него занято и сколько свободно. Она показывает статистику по файловым системам, а не по отдельным файлам или папкам. Это удобно для быстрой диагностики.

Простейший вариант использования:

bash
df -h

Опция -h выводит данные в человекочитаемом виде — с единицами измерения (K, M, G). Вывод команды может выглядеть так:

bash
Файловая система Размер Использовано Дост Использовано% Смонтировано в
/dev/sda1 100G 95G 5G 95% /

Этот результат сразу дает понять, что корневой раздел переполнен, и нужно выяснить, где именно сосредоточено наибольшее количество данных. Но df не покажет, какие конкретно каталоги занимают место. Для этого понадобится команда du.

Команда du: точечный анализ объема данных

Команда du (disk usage) используется для анализа объема файлов и каталогов. В отличие от df, она показывает, сколько места занимают отдельные директории и файлы. Например, чтобы просмотреть объем всех подкаталогов текущей директории, можно выполнить:

bash
du -h --max-depth=1

Здесь:

  • -h — человекочитаемый формат.

  • --max-depth=1 — ограничивает глубину обхода, показывая только первый уровень подкаталогов.

Пример вывода:

bash
2.1G ./var
1.5G ./home
500M ./usr
4.1G .

В этом примере видно, что каталог var занимает более двух гигабайт. Это уже направление для дальнейшего анализа.

Анализ конкретных директорий

Если подозрение падает на каталог /var, стоит проверить его содержимое:

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

Результат может быть, например, таким:

bash
1.0G /var/log
600M /var/cache
300M /var/tmp
2.0G /var

Теперь видно, что большая часть занятого пространства в /var — это логи. Возможно, старые журналы не удалялись и накапливались неделями или даже месяцами.

Поиск самых «тяжелых» каталогов с сортировкой

Чтобы быстро определить, какие каталоги занимают больше всего места, можно использовать связку du и sort:

bash
sudo du -h / --max-depth=2 2>/dev/null | sort -hr | head -n 10

Здесь:

  • 2>/dev/null — убирает ошибки доступа.

  • sort -hr — сортирует по размеру в обратном порядке.

  • head -n 10 — выводит только 10 самых больших директорий.

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

Дополнительные полезные ключи

Команда du имеет множество опций. Некоторые из них могут быть особенно полезны:

  • -s — выводит только итоговую сумму, без деталей по подкаталогам.

  • --apparent-size — показывает размер файлов, как он видится пользователю (не учитывая сжатие, sparse-файлы).

  • --exclude — позволяет исключить из анализа определенные файлы и папки.

Например:

bash
du -h --exclude="*.log" --max-depth=1

Этот вариант игнорирует все файлы с расширением .log, что удобно, если нужно временно исключить шум от логов.

Комбинирование du и df: комплексный подход

Правильный анализ начинается с df, чтобы понять, какой раздел переполнен, а затем используется du для детального разбора содержимого. Такая последовательность обеспечивает логичный и целенаправленный подход к поиску проблемы. Например, если df показал, что / переполнен, а du — что в /var/log скопились гигабайты логов, значит, решение — очистка или архивация старых журналов.

Неочевидные ловушки: скрытые файлы и удалённые дескрипторы

Иногда даже после удаления больших файлов место не освобождается. Это происходит, если файл удалён, но дескриптор к нему ещё используется процессом. Такой файл продолжает занимать место до тех пор, пока процесс не будет перезапущен.

Выяснить это можно через lsof:

bash
lsof | grep deleted

Если вы видите в списке удалённые, но всё ещё открытые файлы — это причина, почему df показывает занятое пространство, хотя du — нет. Это важно учитывать при разборе аномалий.

Заключение

Инструменты du и df — это мощные средства для мониторинга и анализа дискового пространства в Linux. Команда df даёт обзорную картину по разделам, а du позволяет точно определить, какие каталоги и файлы занимают наибольший объём. В сочетании с сортировкой, фильтрами и дополнительными утилитами, этими инструментами можно быстро выявить и устранить проблему переполнения диска. Регулярный контроль дискового пространства с помощью этих команд помогает избегать серьёзных сбоев и поддерживать стабильную работу системы.

Comments are closed.