linux processes

df

Использование дискового пространства — отчёт о занятом и свободном месте на файловых системах

Описание

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

Данные df берёт из системного вызова statfs(), обращаясь напрямую к файловым системам. Это означает, что df отображает пространство на уровне файловой системы, а не физических блоков диска — учитываются зарезервированные блоки, inodes и особенности конкретной ФС. В Linux реализация из пакета coreutils (GNU df).

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

Синтаксис

df [options] [file ...]

Если указан путь file, df показывает информацию о файловой системе, на которой находится этот файл/директория. Без аргументов — все смонтированные файловые системы.

# Пример вывода df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 18G 30G 38% / /dev/sda2 200G 140G 51G 74% /home tmpfs 7.8G 1.2M 7.8G 1% /dev/shm /dev/sdb1 500G 420G 80G 84% /data

Поля: Filesystem — устройство/ФС, Size — общий размер, Used — занято, Avail — доступно, Use% — процент заполнения, Mounted on — точка монтирования.

Флаги и опции

ФлагОписание
-hHuman-readable: размеры в K, M, G, T (степени 1024). Наиболее удобный режим
-HHuman-readable со степенями 1000 (как производители дисков: 1 GB = 1000 MB)
-TПоказать тип файловой системы (ext4, xfs, tmpfs, nfs и т.д.)
-t typeПоказать только файловые системы указанного типа. Пример: df -t ext4
-x typeИсключить файловые системы указанного типа. Пример: df -x tmpfs
-iПоказать использование inodes вместо блоков. Важно: можно исчерпать inodes при полном диске по счётчику
-aВключить все файловые системы, в том числе с нулевым размером (pseudo-FS)
-lТолько локальные файловые системы (исключить NFS и другие сетевые)
--totalДобавить итоговую строку с суммой по всем ФС
-PPOSIX-формат вывода (совместимость, не переносит строки)
-B sizeБлок для вывода. Пример: -BM — в мегабайтах, -BG — в гигабайтах
--output=listВыбрать и упорядочить поля вывода (source,size,used,avail,pcent,target)

Паттерны использования

Стандартная проверка диска

# Читаемый вывод — самый частый случай
df -h

# С типом файловой системы
df -hT

# Только реальные диски (без tmpfs и т.п.)
df -hT -x tmpfs -x devtmpfs

Место для конкретного пути

# На какой ФС находится /var/log?
df -h /var/log

# Где хранится /home?
df -h /home

# Проверить наполненность перед деплоем
df -h /var/www/html

Мониторинг использования inodes

# Проверить inodes (важно для серверов с логами)
df -i

# Читаемый + inodes
df -ih

# Симптом: "No space left" при df -h показывает место
# Причина: исчерпаны inodes!
df -i / | awk 'NR>1 {print $5}' # % use inodes

Итоговое пространство всех разделов

# Сумма по всем ФС
df -h --total

# Только локальные диски с итогом
df -hl --total

# Пространство в гигабайтах (ровно)
df -BG

Парсинг в скриптах

# Получить % заполнения конкретного раздела
df -P / | awk 'NR==2 {print $5}'
# Выведет: 38%

# Алерт если > 90%
USAGE=$(df -P / | awk 'NR==2 {gsub(/%/,"",$5); print $5}')
if [ "$USAGE" -gt 90 ]; then
    echo "WARNING: disk usage ${USAGE}%"
fi

Пользовательский формат вывода

# Только нужные поля
df --output=source,size,used,avail,pcent

# Добавить тип ФС
df --output=source,fstype,size,avail,pcent,target

# Отсортировать по % заполнения
df -h | sort -k5 -rn

Советы и предупреждения

Совет: df -h + du — идеальная пара
df -h покажет, что место заканчивается, но не где. Затем используйте du -sh /* 2>/dev/null | sort -rh | head -20 — чтобы найти директорию с наибольшим потреблением. Эта пара команд решает 90% задач по диагностике заполнения диска.
Совет: зарезервированное пространство в ext4
В ext4 по умолчанию 5% дискового пространства зарезервировано для root (tune2fs -m). Это объясняет, почему Used + Avail < Size. На больших дисках (несколько ТБ) это значительный объём — уменьшите до 1–2%: tune2fs -m 2 /dev/sda1.
Внимание: "No space left" при наличии свободного места
Если df -h показывает свободное место, но операции записи завершаются с ошибкой — проверьте inodes: df -i. При значении IUse% равном 100% запись невозможна. Причина обычно — тысячи мелких файлов (логи, сессии, кэш). Решение: очистить или переместить директорию с мелкими файлами.