Введение / Зачем это нужно
Здравствуйте! Если вы администрируете Linux-сервер или даже просто работаете на рабочей станции, вы наверняка сталкивались с ситуацией, когда диск внезапно заполняется. Это приводит к остановке служб, ошибкам записи и даже к полной неработоспособности системы. Регулярный мониторинг дискового пространства — это не просто хорошая практика, а необходимость для стабильности системы.
В этом гайде вы узнаете, как с помощью встроенных утилит (df, du) и удобного стороннего инструмента (ncdu) быстро оценить ситуацию с дисковым пространством, найти "пожирателей" места и настроить автоматическое оповещение о критическом заполнении. Все инструкции работают на большинстве современных дистрибутивов.
Требования / Подготовка
Перед началом убедитесь, что у вас есть:
- Доступ к терминалу — локально или через SSH.
- Базовые навыки работы в командной строке — умение вводить команды и читать вывод.
- Права суперпользователя (sudo) — для анализа системных директорий (
/var,/usr) и установки пакетов. Некоторые командыduбез sudo могут выдать ошибку "Permission denied".
💡 Совет: Если вы работаете на сервере, всегда тестируйте команды на тестовой директории перед запуском в системных папках.
Пошаговая инструкция
Шаг 1: Проверка общего использования диска командой df
Команда df (disk free) — ваш первый инструмент. Она показывает свободное и занятое место на всех смонтированных файловых системах.
df -h
Флаг -h (human-readable) переводит размеры в килобайты, мегабайты или гигабайты для удобства чтения.
Пример вывода:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 45G 3.5G 93% /
tmpfs 1.9G 1.2M 1.9G 1% /dev
/dev/sdb1 200G 30G 160G 16% /home
Что смотреть:
Use%— процент использования. Значения выше 80% — повод для беспокойства.Mounted on— точка монтирования. Обращайте внимание на корневую (/) и служебные (/var,/tmp) файловые системы.
⚠️ Важно:
dfпоказывает использование всего раздела, включая системные файлы, кэши и т.д. Чтобы понять, что именно занимает место внутри раздела, переходите кdu.
Шаг 2: Анализ использования конкретных директорий с помощью du
Команда du (disk usage) оценивает размер файлов и директорий в текущей или указанной файловой системе.
Базовый пример:
du -sh /var
-s(summarize) — показать только итоговый размер, а не для каждого подкаталога.-h— человекочитаемый формат.- Результат:
4.2G /var
Поиск самых больших папок в текущей директории:
du -sh * 2>/dev/null | sort -rh | head -n 10
*— все файлы/папки в текущей директории.2>/dev/null— подавить ошибки "Permission denied".sort -rh— сортировка по убыванию числового значения (с учетом суффиксов G, M).head -n 10— показать топ-10.
Рекурсивный анализ с глубиной:
du -h --max-depth=2 / 2>/dev/null | sort -rh | head -n 20
Это покажет все директории в корне (/) с глубиной вложенности 2 уровня и выведет топ-20 по размеру.
💡 Совет: Всегда добавляйте
2>/dev/nullпри анализе системных директорий, чтобы не видеть ошибки доступа.
Шаг 3: Установка и использование ncdu для интерактивного анализа
ncdu (NCurses Disk Usage) — интерактивная утилита, которая кардинально упрощает поиск больших файлов. Она показывает древовидную структуру с размерами и позволяет удалять файлы прямо из интерфейса.
Установка:
- Debian/Ubuntu:
sudo apt update && sudo apt install ncdu - RHEL/CentOS/Fedora:
sudo yum install ncdu # или dnf на Fedora - Arch Linux:
sudo pacman -S ncdu
Использование:
ncdu /путь/к/директории
Например, ncdu / для анализа всего корня (может потребовать несколько минут).
Управление в ncdu:
- Стрелки
↑/↓— навигация. Enter— войти в папку.d— удалить выделенный файл/папку (с подтверждением).q— выйти.?— справка.
Интерфейс сразу показывает, какие папки "съедают" больше всего места, и позволяет быстро cleanspace.
Шаг 4: Настройка автоматического мониторинга через cron
Давайте настроим скрипт, который будет проверять использование диска каждый час и слать уведомление, если оно превышает 90%.
Создайте скрипт:
sudo nano /usr/local/bin/disk-monitor.sh
Вставьте следующий код:
#!/bin/bash
# Скрипт мониторинга дискового пространства
THRESHOLD=90
EMAIL="admin@example.com" # Замените на ваш email
HOSTNAME=$(hostname)
# Получаем использование для корневого раздела (можно добавить другие)
USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$USAGE" -ge "$THRESHOLD" ]; then
echo "ВНИМАНИЕ: Дисковое пространство на $HOSTNAME заполнено на $USAGE% (порог: $THRESHOLD%)." | \
mail -s "Критическое заполнение диска на $HOSTNAME" $EMAIL
fi
Пояснения:
df /— получаем строку для корня.awk 'NR==2 {print $5}'— берем 5-ю колонку (процент использования) из второй строки.sed 's/%//'— удаляем символ%.mail— отправка email. Убедитесь, что установленmailutils(sudo apt install mailutils).
Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/disk-monitor.sh
Добавьте в cron:
sudo crontab -e
Добавьте строку (выполнять каждый час):
0 * * * * /usr/local/bin/disk-monitor.sh
Сохраните и выйдите. Теперь скрипт будет автоматически проверять диск.
💡 Совет: Для тестирования временно снизьте
THRESHOLDдо 5% и дождитесь следующего часа или запустите скрипт вручную.
Шаг 5: Использование графических утилит (для десктопов)
Если вы работаете в графическом окружении (GNOME, KDE, XFCE), есть удобные визуальные инструменты:
- Disk Usage Analyzer (baobab) — входит в GNOME. Показывает круговые и древовидные диаграммы.
baobab /home - Filelight — для KDE, отображает использование в виде концентрических кругов.
sudo apt install filelight # Debian/Ubuntu filelight ~ - QDirStat — кроссплатформенный, показывает не только размер но и количество файлов.
Установите через менеджер пакетов и запустите из меню приложений или терминала.
Проверка результата
- Для
dfиdu: Выполните команды и убедитесь, что вывод соответствует ожиданиям. Например,df -hдолжен показать актуальное использование. - Для
ncdu: Запустите на тестовой директории (например,~/Downloads) и проверьте, что интерфейс отображает файлы и папки. - Для автоматического мониторинга:
- Запустите скрипт вручную:
sudo /usr/local/bin/disk-monitor.sh - Проверьте почту (или логи, если email не настроен).
- Посмотрите записи в системном логе:
grep disk-monitor /var/log/syslog(илиjournalctl).
- Запустите скрипт вручную:
Если все работает, вы успешно настроили мониторинг!
Возможные проблемы
1. Ошибки "Permission denied" при использовании du
Причина: Нет прав на чтение某些 системных директорий.
Решение: Запускайте du с sudo (осторожно!) или используйте 2>/dev/null для подавления ошибок. Для полной картины выполните sudo du -sh /var (только если точно знаете, что делаете).
2. du показывает больше места, чем df
Причина:
- Удаленные, но все еще открытые процессыми файлы (например, логи, которые удалили, но процесс пишет в них). Они занимают место на диске, но не видны в
ls. - Зарезервированное пространство для root (обычно 5% в ext4), которое
duне учитывает. Решение: Найдите такие файлы:
sudo lsof | grep deleted
Завершите процесс или скопируйте файл, затем перезапустите сервис.
3. ncdu работает очень долго на больших файловых системах
Причина: Анализ миллионов файлов требует времени.
Решение: Ограничьте анализ конкретной директорией (не /), или используйте --exclude для пропуска кэшей (например, ncdu --exclude /proc --exclude /sys /).
4. Автоматический скрипт не отправляет email
Причина: Не настроен MTA (почтовый агент) или указан неверный email. Решение:
- Установите
mailutilsи настройте локальный MTA (например,postfix). - Для теста отправьте письмо вручную:
echo "test" | mail -s "test" you@example.com. - Проверьте, что скрипт выполняется от root (через
sudo crontab -e).
5. Символические ссылки и du
Причина: По умолчанию du не следует за символическими ссылками, но если использовать -L, может зациклиться.
Решение: Избегайте -L при анализе системных директорий. Для конкретных случаев используйте du -L с осторожностью.
Теперь вы вооружены знаниями, чтобы никогда не быть застигнутыми врасплох заполнением диска. Регулярный мониторинг — это маленький объем работы, который спасает от больших проблем. Удачи в администрировании!