Гид по технологиям

Проверка и оповещение о заполнении диска на Linux

5 min read Системное администрирование Обновлено 20 Dec 2025
Проверка и оповещение о заполнении диска | Linux
Проверка и оповещение о заполнении диска | Linux

Bash: командная строка для df

Быстрые ссылки

  • Проверка использования диска на Linux
  • Мониторинг в одном экране
  • Оповещения при высоком заполнении диска

Часто легко заметить ошибки с памятью или загрузкой CPU. Но дисковое пространство может бесшумно сокращаться. Если вы оставите сервер без наблюдения, место закончится внезапно. Ниже — практические команды и шаблоны для автоматизации оповещений.

Проверка использования диска на Linux

Основная утилита для быстрой проверки — df (disk filesystems). Она выводит список файловых систем и их использование.

df -hT
  • Опция -h выводит размеры в удобочитаемом формате (KB/MB/GB).
  • Опция -T показывает тип файловой системы.

Вы увидите размер, занятую и доступную ёмкость и точку монтирования для каждой файловой системы.

/wordpress/wp-content/uploads/csit/2022/01/98b7e815.png

На серверах часто больше «файловых систем», чем физических дисков. Это нормальная ситуация: Linux использует tmpfs, devtmpfs, squashfs, overlay и другие виртуальные файловые системы для контейнеров, сжатых образов и системных ресурсов. Реальный диск часто помечен как ext4, xfs или btrfs и примонтирован в корень (/).

Чтобы отфильтровать вывод по типу файловой системы, используйте -t:

df -hT -t ext4

Или исключите ненужные типы с помощью -x:

df -hT -x squashfs -x overlay -x tmpfs -x devtmpfs

Можно запрашивать конкретные устройства или точки монтирования:

df -h /dev/md*

df -h /

Мониторинг в одном экране

Командный набор удобно заменяет утилита glances. Это консольный дашборд для многих метрик системы: CPU, память, сеть и диски.

Установка через pip:

sudo pip install glances

Запустить просто:

glances

/wordpress/wp-content/uploads/csit/2022/01/d3d07e4d.png

Нижний левый угол обычно показывает использование дисков и текущие скорости ввода-вывода. Это помогает заметить растущую нагрузку или быстро заполняющиеся разделы.

/wordpress/wp-content/uploads/csit/2022/01/faebb352.png

Glances не единственный инструмент, но он прост, информативен и кросс-платформенен.

Оповещения при высоком заполнении диска

Командные инструменты полезны, но требуют активности от администратора. Лучше настроить автоматические оповещения. Ниже — пошаговый метод и рабочие примеры.

Основная идея:

  1. Скрипт запускает df и получает процент использования корневого раздела.
  2. Скрипт сравнивает текущую загрузку с порогом (например, 90%).
  3. При превышении порога он отправляет уведомление (почта, Slack, Telegram и т.д.).

Оригинальный простой пример (сохраняем для совместимости):

#!/bin/bash

CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')

THRESHOLD=90

if [ "$CURRENT" -gt "$THRESHOLD" ] ; then

curl -X POST -H 'Content-type: application/json' --data "{"text":"Your server `$(hostname)` is currently at ${CURRENT}% disk capacity."}"

fi

Этот скрипт демонстрирует идею. Но в нём есть проблемы с экранированием и безопасностью. Ниже — улучшённая и безопасная версия с примерами отправки в Slack и по почте.

Надёжный пример для Slack (Webhook)

Создайте файл /usr/local/bin/check_disk.sh и сделайте его исполняемым.

#!/bin/bash
set -euo pipefail

# Настройки
MOUNT="/"
THRESHOLD=90
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX"

# Получаем процент без символа %
CURRENT=$(df --output=pcent "$MOUNT" | tail -n1 | tr -dc '0-9')

if [ -z "$CURRENT" ]; then
  echo "Не удалось получить использование для $MOUNT" >&2
  exit 1
fi

if [ "$CURRENT" -gt "$THRESHOLD" ]; then
  HOSTNAME=$(hostname -f)
  PAYLOAD=$(printf '{"text":"%s: раздел %s заполнен на %s%%"}' "$HOSTNAME" "$MOUNT" "$CURRENT")
  curl -sS -X POST -H 'Content-type: application/json' --data "$PAYLOAD" "$SLACK_WEBHOOK_URL"
fi

Пояснения:

  • df –output=pcent удобнее и стабильнее для парсинга.
  • set -euo pipefail помогает ловить ошибки.
  • Не храните webhook в репозитории; используйте защищённые переменные окружения или vault.

Пример отправки на почту (mailx)

if [ "$CURRENT" -gt "$THRESHOLD" ]; then
  echo "Текущая загрузка $CURRENT% на $(hostname) (раздел $MOUNT)" | mailx -s "ALERT: Заполнение диска $CURRENT%" admin@example.com
fi

Cron и systemd-timer

Добавьте в crontab (пример ежедневной проверки в 08:00):

0 8 * * * /usr/local/bin/check_disk.sh

Или используйте systemd-timer для лучшего логирования и управления правами.

/files/6cc08070-22d9-4472-a51a-bf4a029aa067.png

Когда это не сработает

  • Файлы удалены, но процессы всё ещё держат дескрипторы — df покажет свободное место, но inode/логика приложений может вести себя иначе. lsof + grep deleted поможет найти такие процессы.
  • Заполнение временных папок (например, /tmp внутри tmpfs) не видно в выводе команд, если вы фильтруете типы FS неправильно.
  • Проблемы с метриками контейнеров: контейнеры могут иметь тонкие слои overlay и quota, которые не отражаются простым df.

Альтернативные подходы

  • Использовать мониторинг на базе Prometheus + node_exporter и настроить правила алертов в Alertmanager.
  • Использовать облачные метрики и оповещения (AWS CloudWatch, GCP Monitoring).
  • Хостовые агенты (Datadog, Zabbix, New Relic) для агрегации и долгосрочной истории.

Чек-листы по ролям

Системный администратор:

  • Настроить df и glances на всех узлах.
  • Развернуть check_disk.sh с правильными правами.
  • Настроить безопасное хранение webhooks/паролей.

DevOps инженер:

  • Интегрировать метрику в существующий мониторинг (Prometheus, Datadog).
  • Создать алерты с уровнем серьезности и эскалациями.

Менеджер/оператор:

  • Установить пороги и SLA. Например: предупреждение при 85%, критический алерт при 95%.
  • Определить владельцев инцидента и процедуру расширения диска.

Критерии приёмки

  • Скрипт успешно выполняется по расписанию без ошибок в логах в течение 7 дней.
  • При достижении порога отправляется уведомление в канал/почту, проверяемое вручную.
  • Webhook/учётные данные не хранятся в публичных репозиториях.
  • Для production-приложений есть план действия при алерте (удаление временных файлов, архивирование, увеличение диска).

Тестовые сценарии

  • Генерируем заполнение тестового раздела до 92% и проверяем, что алерт пришёл.
  • Удаляем webhook URL и проверяем, что скрипт логирует ошибку, но не раскрывает секреты.
  • Симулируем процесс, который держит удалённые файлы, и проверяем, как это влияет на df и на lsof.

Безопасность и надёжность

  • Не храните токены в скрипте с правами 644. Доступ только root или специальный сервисный аккаунт.
  • Ограничи доступ к логам, где может появиться тело уведомления с чувствительной информацией.
  • Используйте TLS для webhooks и проверяйте сертификаты (curl по умолчанию проверяет).
  • Разделяйте уровни оповещений: информационные, предупреждения, критические.

Минимальная методология внедрения

  1. Добавьте df-скрипт на один ненагруженный сервер.
  2. Протестируйте отправку уведомлений (Slack/почта).
  3. Протестируйте cron/systemd-timer.
  4. Раскатайте по группе, мониторьте логи и false-positive.
  5. Интегрируйте с центральным мониторингом и настройте эскалации.

Краткий глоссарий

  • df — утилита для отображения использования файловых систем.
  • glances — монитор в реальном времени для множества метрик.
  • webhook — URL для отправки HTTP POST уведомлений в сторонние сервисы.
  • tmpfs — файловая система в памяти.

Итог

Проверка дискового пространства — обязательная часть поддержки серверов. Простые команды (df), интерактивные инструменты (glances) и автоматические оповещения (cron + curl / интеграция с мониторингом) дают надёжную систему наблюдения. Настройте пороги, протестируйте уведомления и храните секреты безопасно.

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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как экономить мобильные данные в Apple Music
Мобильные данные

Как экономить мобильные данные в Apple Music

Персональные результаты Google Assistant на блокировке
Android.

Персональные результаты Google Assistant на блокировке

Настройка уведомлений Outlook: отключить и адаптировать
Справка

Настройка уведомлений Outlook: отключить и адаптировать

Добавить дату и время в Google Sheets
Электронные таблицы

Добавить дату и время в Google Sheets

Таймер Помодоро на Python с Tkinter
Python

Таймер Помодоро на Python с Tkinter

Как отключить 5G на Android — Samsung и Pixel
Android.

Как отключить 5G на Android — Samsung и Pixel