- Home »
Проверка дискового пространства: используем df и du
Ты когда-нибудь сталкивался с ситуацией, когда на сервере внезапно заканчивается место, а ты не понимаешь — кто съел весь диск? Или, например, df показывает, что почти всё занято, а du говорит — да нет, свободно же! Если да, то ты не одинок. В этой статье разберёмся, почему так происходит, чем отличаются df и du, как их правильно использовать, и как не попасться на классические грабли системного администратора. Погнали!
О чём эта статья и зачем она нужна?
Если у тебя есть сервер (будь то облако, VPS, Docker, железо или что-то ещё), ты точно сталкивался с вопросом: куда делось место на диске? Это не праздный вопрос: закончится место — и всё, сервисы падают, базы не пишутся, контейнеры не стартуют, а бэкапы не сохраняются. И вот тут на сцену выходят два старых добрых инструмента: df и du. Они вроде бы должны говорить одно и то же, но на практике часто показывают разные цифры. Почему так, как с этим жить и что делать — вот про это и будет статья. Разберёмся на практике, с примерами, лайфхаками и подводными камнями.
Почему это важно?
- Без контроля за дисковым пространством ты рискуешь словить даунтайм и потерять данные.
- Понимание разницы между
dfиduпоможет быстрее диагностировать проблемы и экономить время. - Это база для автоматизации, алертов и мониторинга.
Как это работает? Алгоритмы и структура
Что делает df?
df (disk free) — это утилита, которая показывает, сколько места занято и свободно на файловых системах. Она не ходит по файлам, не считает их размеры, а читает метаинформацию из самой файловой системы (superblock). То есть, df смотрит на общую картину глазами ядра — сколько блоков всего, сколько свободно, сколько занято.
df -h
Результат — таблица с разделами, размерами, занятым и свободным местом. Всё быстро, потому что не надо ничего считать — просто взял статистику из ядра.
А что делает du?
du (disk usage) — считает, сколько места занимает конкретная директория или файл. Как? Он обходит всю файловую иерархию, складывает размеры файлов, учитывает жёсткие ссылки и символические ссылки (если попросить), и выдаёт итог.
du -sh /var/log
Результат — размер именно того каталога, который ты указал, с учётом всех подпапок. du реально идёт по дереву файлов, поэтому на больших директориях может работать долго.
Почему они показывают разное?
- Удалённые, но не освобождённые файлы: если процесс держит файл открытым, а ты его удалил —
duего не увидит, аdfпокажет, что место занято. - Жёсткие ссылки:
duможет посчитать файл несколько раз, если не использовать флаг--hard(см. ниже). - Зарезервированные блоки: на ext4 обычно 5% места зарезервировано для root.
dfучитывает это,du— нет. - Файлы вне монтированной файловой системы:
dfвидит только то, что смонтировано,du— только то, что доступно в дереве файлов.
Как быстро и просто всё настроить? Практические советы
Базовые команды
Для начала — самые полезные команды, которые должны быть в арсенале каждого:
# Показать свободное место на всех разделах в человекочитаемом виде
df -h
# Показать размер конкретного каталога
du -sh /path/to/dir
# Найти, что больше всего занимает места в /var
du -h /var | sort -hr | head -20
# Показать размер всех подкаталогов в текущей директории
du -sh * | sort -hr
Быстрый чек-лист: что делать, если место исчезает?
- Сначала
df -h— чтобы понять, на каком разделе проблема. - Затем
du -sh /*— чтобы понять, какая папка самая жирная. - Дальше углубляемся:
du -sh /var/*и так далее. - Если
duне находит больших файлов, аdfвсё равно показывает занятое место — ищи удалённые, но открытые файлы:
lsof | grep deleted
Если увидел такие файлы — перезапусти соответствующий процесс (или убей его), чтобы место освободилось.
Настраиваем автоматизацию
- Для регулярного мониторинга — ставь duf (красивый аналог
df), dua (быстрыйdu) или классический du. - Для алертов — пиши простой скрипт на bash, который будет слать тебе письмо/уведомление в Telegram, если свободного места меньше, чем X%.
# Пример простого мониторинга:
if [ $(df / | awk 'NR==2{print $5}' | sed 's/%//') -gt 90 ]; then
echo "Disk space is over 90%!" | mail -s "Disk Alert" you@example.com
fi
Примеры, кейсы, сравнение
| Сценарий | Что покажет df | Что покажет du | Что делать |
|---|---|---|---|
| Удалён большой лог-файл, но процесс его держит | Место занято | Файл не виден | Перезапусти процесс, чтобы освободить место |
| Много мелких файлов в каталоге | Покажет общий размер | Покажет, какие папки самые большие | Используй du для поиска, что удалить |
| Зарезервировано место для root (ext4) | Покажет меньше свободного места | Не учитывает резерв | Можно уменьшить резерв через tune2fs |
| Монтирован tmpfs (RAM-диск) | Покажет размер tmpfs | du покажет файлы внутри | Следи за tmpfs, чтобы не переполнить RAM |
Положительный кейс
На сервере переполнился /var. df показывает 100% занято, du -sh /var/* — видно, что /var/log занимает 15ГБ. После чистки старых логов (logrotate или руками) место освободилось, всё ок.
Отрицательный кейс
Почистил /var/log, но место не освободилось. lsof | grep deleted — видно, что rsyslogd держит удалённые файлы. Перезапустил rsyslogd — место появилось.
Ошибки новичков, мифы и похожие решения
- Миф:
dfиduдолжны показывать одинаковые значения.
На самом деле: они считают по-разному и часто расходятся. - Ошибка: Удалять логи, не проверяя, держит ли их кто-то открытыми.
- Ошибка: Не учитывать скрытые файлы (начинающиеся с .) при подсчёте
du. - Ошибка: Не проверять, что именно монтировано (
mount,findmnt). - Похожее решение: duf — красивый аналог
df. - Похожее решение: dua — быстрый и удобный
duдля больших файловых систем. - Ещё: ncdu — интерактивный анализатор, must-have для больших серверов.
Статистика и сравнение с другими решениями
| Утилита | Скорость | Удобство | Поддержка скриптов | Интерактивность |
|---|---|---|---|---|
| df | Мгновенно | Просто | Да | Нет |
| du | Медленно на больших объёмах | Средне | Да | Нет |
| ncdu | Медленно на старте, быстро в анализе | Очень удобно | Нет | Да |
| dua | Очень быстро | Удобно | Да | Да |
| duf | Мгновенно | Красиво | Да | Нет |
Интересные факты и нестандартные способы использования
- Можно использовать
dfдля мониторинга заполнения Docker-томов и overlayfs, чтобы не словить внезапный out of space. - Скрипты на
duиfindпозволяют автоматически удалять старые файлы (например,find /var/log -type f -mtime +30 -delete). - На файловых системах типа XFS и Btrfs есть свои нюансы учёта места (например, снапшоты и дедупликация).
- Можно использовать
dfвместе сwatchдля live-мониторинга:watch -n 1 df -h. - Для автоматизации очистки можно использовать
systemd-tmpfilesилиtmpwatch.
Автоматизация и скрипты: новые возможности
Понимание разницы между df и du открывает двери для автоматизации:
- Пишем скрипты для алертов, которые реагируют на заполнение диска.
- Скрипты для регулярной чистки старых файлов (
logrotate,find). - Интеграция с мониторингом (Prometheus, Zabbix, Grafana) — можно собирать метрики с помощью
dfиdu. - В Docker-контейнерах — автоматическая чистка слоёв и образов, чтобы не захламлять хост.
- Для VPS и облака — автоматизация расширения томов при достижении порога.
Вывод: как, где и почему использовать
df — твой первый помощник, когда надо быстро понять, где заканчивается место. Он мгновенно покажет, какой раздел под угрозой, сколько свободно, сколько всего.
du — незаменим, если надо найти, что именно жрёт место. Это инструмент для глубокого анализа, поиска “жирных” папок и файлов.
Но чтобы не попасться на подводные камни, всегда помни: df и du считают по-разному. Если цифры не сходятся — ищи удалённые, но открытые файлы, учитывай зарезервированные блоки и нюансы файловых систем.
Рекомендую комбинировать оба инструмента, а для больших серверов — добавить ncdu или dua для интерактивного анализа.
Где использовать:
- На любом сервере — VPS, облако, Docker, bare metal.
- В регулярном мониторинге и автоматизации.
- Для быстрой диагностики проблем с дисковым пространством.
Лайфхак: Если нужен сервер с быстрым диском и хорошей поддержкой — смотри VPS или выделенный сервер (можно сразу настроить мониторинг и алерты по месту).
Ссылки по теме:
- man df
- man du
- ncdu — интерактивный анализатор дискового пространства
- dua — быстрый du
- duf — красивый df
Итог: Не важно, где у тебя сервер — в облаке, в контейнере или на железе — df и du должны быть в топе твоих инструментов. Понимай разницу, используй их в связке, автоматизируй, и спи спокойно: место на диске не закончится внезапно!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.