Linux

Мониторинг дискового пространства в Linux: команды и практика

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

Обновлено 15 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 11+CentOS 8+/RHEL 8+Fedora 35+

Введение / Зачем это нужно

Постоянный мониторинг дискового пространства — критически важная задача для любого системного администратора или разработчика, работающего с серверами. Заполнение диска приводит к остановке служб, ошибкам записи логов и полной неработоспособности системы. Это руководство поможет вам не только диагностировать проблему, но и предотвратить её, освоив основные инструменты Linux для анализа использования диска на уровне файлов и каталогов. Вы научитесь быстро находить «пожирателей» места и принимать обоснованные решения по очистке.

Требования / Подготовка

Перед началом убедитесь, что:

  1. У вас есть доступ к терминалу Linux (через SSH или локально).
  2. У вас есть права sudo (администратора) для анализа системных каталогов (/var, /home, /usr) и использования ncdu/lsof.
  3. Дистрибутив основан на Debian/Ubuntu или RHEL/CentOS/Fedora (команды универсальны, но названия пакетов могут отличаться).
  4. Вы знаете, какой именно раздел (/, /home, /var) заполнился. Если нет — начните с первого шага.

Шаг 1: быстрый обзор состояния всех разделов

Первым делом получите общую картину. Команда df (disk free) показывает использование файловых систем/разделов.

df -h

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

Файл.система  Размер  Исп效益  Доступно Исп% Исп.на  Примонтировано в
/dev/sda1        50G    45G     3.1G  94%   /        
/dev/sda2       200G    150G     45G   77%   /home    
/dev/sda3        20G     18G    1.5G   93%   /var

Что смотреть:

  • Исп% — процент использования. Целевые кандидаты на очистку — разделы с >85%.
  • Примонтировано в — точка монтирования. Именно в неё нужно «проваливаться» для детального анализа.

Шаг 2: детальный анализ проблемного раздела с du

Команда du (disk usage) оценивает использование каталогов. Она медленнее df, но даёт детализацию.

Правило: Анализируйте снизу вверх. Сначала обзорка верхнего уровня, затем углубление.

# 1. Перейдите в корень проблемного раздела (например, /var)
cd /var

# 2. Покажите размер каждого элемента в текущей директории в читаемом виде (-h)
#    Сортировка по убыванию размера (-r) и вывод только топ-20
sudo du -sh * 2>/dev/null | sort -rh | head -n 20

Ключевые флаги:

  • -s — суммарный размер для каждого аргумента.
  • -h — человеко-читаемый (K, M, G).
  • 2>/dev/null — подавление ошибок «Permission denied».

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

4.2G    log
3.8G    cache
1.2G    lib
...

Вы видите, что /var/log — главный «пожиратель». Теперь нужно углубиться в него.

Шаг 3: интерактивный анализ с ncdu (рекомендуется)

Для удобства установите ncdu (NCurses Disk Usage). Это интерактивный текстовый браузер использования диска.

# Установка (Debian/Ubuntu)
sudo apt update && sudo apt install ncdu

# Установка (RHEL/CentOS 8+)
sudo dnf install ncdu

# Запуск для анализа раздела /var
sudo ncdu /var

Как работать в ncdu:

  • Стрелки / — навигация.
  • Enter — войти в каталог.
  • d — удалить выбранный файл/каталог (будет запрос подтверждения!).
  • q — выйти.
  • Нажмите ? для полной справки.

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

Шаг 4: поиск конкретных больших файлов

Иногда проблема не в каталогах, а в одном-двух огромных файлах (например, файл дампа базы данных, лог за годы, забытый архив).

# Поиск файлов больше 100МБ в /var/log и вывод топ-10 по размеру
sudo find /var/log -type f -size +100M -exec du -h {} + 2>/dev/null | sort -rh | head -n 10

# Более быстрый вариант (только имя и размер, без du)
sudo find /var/log -type f -size +100M -exec ls -lh {} + | awk '{ print $5, $9 }' | sort -rh | head -n 10

Для поиска по всему разделу (может быть долгим):

sudo find /var -type f -size +500M 2>/dev/null

Шаг 5: поиск «висячих» удалённых файлов

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

# Показать все открытые удалённые (deleted) файлы в системе
sudo lsof | grep '(deleted)'

# Пример вывода:
# COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
# java     1234   app    rtd    REG    8,2   10.0G 123456 /var/log/app.log (deleted)

Решение: Перезапустите процесс (PID 1234 в примере). После этого место освободится.

Шаг 6: проверка места, занятого кэшем пакетного менеджера

Для Debian/Ubuntu:

sudo apt clean        # Удаляет все кэшированные .deb файлы из /var/cache/apt/archives
sudo apt autoremove   # Удаляет зависимости, установленные автоматически и больше не нужные

Для RHEL/CentOS/Fedora:

sudo yum clean all    # Очищает весь кэш yum/dnf
sudo package-cleanup --leaves  # Показывает «осиротевшие» пакеты (требуется установка yum-utils)

Важно: Не выполняйте clean на продакшн-сервере без понимания последствий. Это ускорит будущие обновления, но может потребовать переустановки пакетов.

Проверка результата

После выполнения очищающих действий вернитесь к Шагу 1 и выполните df -h снова. Убедитесь, что Исп% для проблемного раздела снизился до безопасного уровня (рекомендуется <80%).

Также можно проверить изменение в конкретном каталоге:

du -sh /var/log

Возможные проблемы

  1. du показывает меньше, чем df?
    • Причина: Файлы, удалённые, но всё ещё открытые процессами (см. Шаг 5). Или использование du без sudo (вы не видите файлы других пользователей).
    • Решение: Используйте sudo du и ищите «deleted» файлы через lsof.
  2. ncdu/find зависает или очень долгий?
    • Причина: Анализ огромного количества мелких файлов (например, /proc, /sys, сетевые файловые системы).
    • Решение: Всегда указывайте конкретный путь для анализа (ncdu /var), а не корень /. Исключите монтированные файловые системы флагом -x (sudo du -shx /).
  3. Не могу удалить файл из ncdu или rm — «Permission denied»
    • Причина: Файл принадлежит другому пользователю или системному процессу.
    • Решение: Используйте sudo для удаления (sudo rm путь/к/файлу). Будьте осторожны!
  4. Очистка логов не помогла — место вернулось через день
    • Причина: Приложение продолжает бесконтрольно писать логи. Увеличился ли размер одного файла или появились новые?
    • Решение: Настройте ротацию логов (logrotate) для проблемного приложения. Найдите конфиг в /etc/logrotate.d/ или настройте в самом приложении.

Часто задаваемые вопросы

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

Полезное

Установите необходимые утилиты (опционально)
Просмотрите общую картину по разделам
Найдите крупнейшие каталоги в проблемном разделе
Используйте ncdu для интерактивного анализа
Найдите конкретные большие файлы
Проверьте, какие процессы удерживают удалённые файлы