bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward

Як моніторити вільне місце на диску VDS скриптом просто

calendar_month November 16, 2025 schedule 10 хв. читання visibility 862 переглядів
person
Valebyte Team
Як моніторити вільне місце на диску VDS скриптом просто
summarize

TL;DR

  • Команда `df -h` в Bash-скрипте — простейший способ получить данные о свободном месте на диске VDS.
  • Используйте `awk 'NR==2{print $5}'` и `tr -d '%'`, чтобы извлечь числовое значение процента занятого места.
  • Настройте порог срабатывания (например, 90%), при котором скрипт будет выводить предупреждение о нехватке места.
  • Для расширенного мониторинга и логирования используйте Python с установленной библиотекой `psutil`.

Як моніторити вільне місце на диску VDS скриптом?

Підтримання достатнього вільного місця на диску вашого VDS – критично важлива задача для забезпечення стабільної роботи сервісів і запобігання збоям. У цій статті ми розглянемо, як створити та налаштувати скрипти для моніторингу вільного місця на диску вашого VDS, щоб ви могли оперативно реагувати на проблеми, що виникають. Ми охопимо різні підходи, від простих bash-скриптів до більш складних рішень з використанням Python і відправкою повідомлень.

Зміст:

Моніторинг за допомогою Bash і команди df

A server rack with green lights and a 'df' command icon, representing VDS disk space monitoring.

Найпростіший і найшвидший спосіб моніторингу вільного місця на диску – використання команди df в bash-скрипті. df (disk free) виводить інформацію про використання дискового простору файлових систем. Ми можемо використовувати її в поєднанні з іншими командами, щоб отримати конкретні дані та налаштувати оповіщення.

Приклад 1: Простий скрипт для перевірки вільного місця

#!/bin/bash

# Розділ диска для моніторингу
DISK="/"

# Порогове значення вільного місця у відсотках (наприклад, 10%)
THRESHOLD=10

# Отримуємо відсоток використання диска
USAGE=$(df -h "$DISK" | awk 'NR==2{print $5}' | tr -d '%')

# Перевіряємо, чи перевищено поріг
if [ "$USAGE" -gt $(expr 100 - $THRESHOLD) ]; then
  echo "Увага! На диску $DISK залишилося менше $THRESHOLD% вільного місця."
fi

Цей скрипт виконує такі дії:

  • Визначає розділ диска для моніторингу (DISK="/").
  • Встановлює порогове значення вільного місця у відсотках (THRESHOLD=10).
  • Використовує df -h "$DISK" для отримання інформації про використання диска в зручному для читання форматі.
  • За допомогою awk 'NR==2{print $5}' витягує відсоток використання диска з другого рядка виводу df (де знаходиться інформація про розділ).
  • tr -d '%' видаляє символ відсотка з отриманого рядка.
  • Порівнює відсоток використання з пороговим значенням. Якщо відсоток використання перевищує 100 - $THRESHOLD, виводить попередження.

Приклад 2: Більш детальний скрипт з виведенням інформації про вільне місце в гігабайтах

#!/bin/bash

# Розділ диска для моніторингу
DISK="/"

# Порогове значення вільного місця в гігабайтах
THRESHOLD=5

# Отримуємо вільне місце в гігабайтах
FREE_GB=$(df -h "$DISK" | awk 'NR==2{print $4}')

# Забираємо букву 'G' зі значення
FREE_GB_NUM=$(echo "$FREE_GB" | sed 's/G//')

# Перевіряємо, чи менше вільне місце порогового значення
if (( $(echo "$FREE_GB_NUM > $THRESHOLD" | bc -l) )); then
  echo "Увага! На диску $DISK залишилося менше $THRESHOLD ГБ вільного місця. Зараз вільно: $FREE_GB"
fi

Цей скрипт робить те ж саме, але використовує гігабайти замість відсотків, що може бути більш наочним:

  • Отримує вільне місце в гігабайтах за допомогою df -h "$DISK" | awk 'NR==2{print $4}'.
  • Видаляє букву 'G' з отриманого значення за допомогою sed 's/G//'.
  • Використовує bc -l для порівняння чисел з плаваючою точкою, так як df -h може виводити значення з десятковою точкою.
  • Виводить попередження, якщо вільне місце менше порогового значення.

Приклад 3: Моніторинг декількох розділів диска

#!/bin/bash

# Розділи диска для моніторингу
DISKS=("/")

# Порогове значення вільного місця у відсотках
THRESHOLD=10

# Перебираємо розділи диска
for DISK in ${DISKS[@]}; do
  # Отримуємо відсоток використання диска
  USAGE=$(df -h "$DISK" | awk 'NR==2{print $5}' | tr -d '%')

  # Перевіряємо, чи перевищенно поріг
  if [ "$USAGE" -gt $(expr 100 - $THRESHOLD) ]; then
    echo "Увага! На диску $DISK залишилося менше $THRESHOLD% вільного місця."
  fi
done

У цьому прикладі скрипт перебирає декілька розділів диска, вказаних в масиві DISKS, і виконує перевірку для кожного з них.

Щоб автоматизувати виконання скрипта, додайте його в cron. Наприклад, для запуску скрипта кожні 5 хвилин, додайте наступний рядок в crontab:

*/5 * * * * /path/to/your/script.sh

Замініть /path/to/your/script.sh на фактичний шлях до вашого скрипта.

Порада експерта: Не забувайте додавати логування до ваших скриптів моніторингу. Це допоможе вам відстежувати історію змін і виявляти довгострокові тенденції у використанні дискового простору.

Іван Петров, Системний адміністратор

Моніторинг за допомогою Python і бібліотеки psutil

Python надає більш гнучкий і потужний підхід до моніторингу дискового простору, особливо з використанням бібліотеки psutil (process and system utilities). psutil дозволяє отримувати інформацію про систему, включаючи використання диска, в зручному для обробки форматі.

Приклад 1: Простий скрипт Python для перевірки вільного місця

import psutil

# Розділ диска для моніторингу
DISK="/"

# Порогове значення вільного місця у відсотках
THRESHOLD = 10

# Отримуємо інформацію про використання диска
disk_usage = psutil.disk_usage(DISK)

# Отримуємо відсоток використання диска
usage_percent = disk_usage.percent

# Перевіряємо, чи перевищено поріг
if usage_percent > (100 - THRESHOLD):
    print(f"Увага! На диску {DISK} залишилося менше {THRESHOLD}% вільного місця. Іспользовано: {usage_percent}%")

Цей скрипт виконує такі дії:

  • Імпортує бібліотеку psutil.
  • Визначає розділ диска для моніторингу (DISK="/").
  • Встановлює порогове значення вільного місця у відсотках (THRESHOLD = 10).
  • Використовує psutil.disk_usage(DISK) для отримання інформації про використання диска.
  • Витягує відсоток використання диска з об'єкта disk_usage.
  • Порівнює відсоток використання з пороговим значенням і виводить попередження, якщо поріг перевищено.

Приклад 2: Скрипт Python з виведенням інформації про вільне місце в гігабайтах

import psutil

# Розділ диска для моніторингу
DISK="/"

# Порогове значення вільного місця в гігабайтах
THRESHOLD = 5

# Отримуємо інформацію про використання диска
disk_usage = psutil.disk_usage(DISK)

# Отримуємо вільне місце в гігабайтах
free_gb = disk_usage.free / (2**30)  # Convert bytes to GB

# Перевіряємо, чи менше вільне місце порогового значення
if free_gb < THRESHOLD:
    print(f"Увага! На диску {DISK} залишилося менше {THRESHOLD} ГБ вільного місця. Свободно: {free_gb:.2f} ГБ")

Цей скрипт показує, як отримати та вивести вільне місце в гігабайтах. Зверніть увагу на перетворення байтів у гігабайти (free_gb = disk_usage.free / (2**30)) та форматування виводу для відображення двох знаків після коми ({free_gb:.2f}).

Приклад 3: Моніторинг декількох розділів диска за допомогою Python

import psutil

# Розділи диска для моніторингу
DISKS = ["/", "/home"]

# Порогове значення вільного місця у відсотках
THRESHOLD = 10

# Перебираємо розділи диска
for DISK in DISKS:
    try:
        # Отримуємо інформацію про використання диска
        disk_usage = psutil.disk_usage(DISK)

        # Отримуємо відсоток використання диска
        usage_percent = disk_usage.percent

        # Перевіряємо, чи перевищено поріг
        if usage_percent > (100 - THRESHOLD):
            print(f"Увага! На диску {DISK} залишилось менше {THRESHOLD}% вільного місця. Використано: {usage_percent}%")
    except FileNotFoundError:
        print(f"Розділ диска {DISK} не знайдено.")

У цьому прикладі скрипт перебирає список розділів диска і виконує перевірку для кожного з них. Зверніть увагу на блок try...except, який обробляє випадок, коли розділ диска не знайдено.

Для запуску Python-скрипта також можна використовувати cron. Наприклад, для запуску скрипта кожні 5 хвилин, додайте наступний рядок в crontab:

*/5 * * * * /usr/bin/python3 /path/to/your/script.py

Замініть /usr/bin/python3 на шлях до вашого інтерпретатора Python, а /path/to/your/script.py на фактичний шлях до вашого скрипту.

Потрібен надійний VDS з достатнім місцем на диску?

Перестаньте турбуватися про брак місця. Виберіть VDS-хостинг, який росте разом з вами, забезпечуючи стабільну роботу. — from €4.49/mo.

Вибрати VDS-хостинг →
ФункціяОпис
psutil.disk_usage(path)Повертає об'єкт з інформацією про використання диска для вказаного шляху.
disk_usage.totalЗагальний розмір розділу диска в байтах.
disk_usage.usedВикористаний простір на диску в байтах.
disk_usage.freeВільний простір на диску в байтах.
disk_usage.percentВідсоток використання диска.
rocket_launch Швидкий вибір

Шукаєте сервер, який просто працює?

Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.

Переглянути тарифи VPS arrow_forward

Налаштування відправки сповіщень електронною поштою

Щоб оперативно реагувати на проблеми з дисковим простором, необхідно налаштувати відправку сповіщень електронною поштою. Ми можемо додати цю функціональність до наших скриптів, використовуючи різні інструменти та бібліотеки.

Приклад 1: Відправка сповіщень електронною поштою за допомогою команди mail (bash)

#!/bin/bash

# Розділ диска для моніторингу
DISK="/"

# Порогове значення вільного місця у відсотках
THRESHOLD=10

# Отримуємо відсоток використання диска
USAGE=$(df -h "$DISK" | awk 'NR==2{print $5}' | tr -d '%')

# Перевіряємо, чи перевищено поріг
if [ "$USAGE" -gt $(expr 100 - $THRESHOLD) ]; then
  SUBJECT="Увага! Мало місця на диску $DISK"
  BODY="На диску $DISK залишилось менше $THRESHOLD% вільного місця. Використано: $USAGE%"
  echo "$BODY" | mail -s "$SUBJECT" [email protected]
fi

Цей скрипт відправляє електронний лист за допомогою команди mail, якщо поріг використання диска перевищено. Замініть [email protected] на вашу адресу електронної пошти.

Примітка: Для використання команди mail на вашому VDS може знадобитися встановлення та налаштування поштового сервера (наприклад, Postfix). Якщо поштовий сервер не налаштовано, відправка листів може не працювати.

Приклад 2: Відправка сповіщень електронною поштою за допомогою бібліотеки smtplib (Python)

import psutil
import smtplib
from email.mime.text import MIMEText

# Розділ диска для моніторингу
DISK="/"

# Порогове значення вільного місця у відсотках
THRESHOLD = 10

# Ваша адреса електронної пошти та пароль
SENDER_EMAIL = "[email protected]"
SENDER_PASSWORD = "your_password"

# Адреса електронної пошти отримувача
RECEIVER_EMAIL = "[email protected]"

# Отримуємо інформацію про використання диска
disk_usage = psutil.disk_usage(DISK)

# Отримуємо відсоток використання диска
usage_percent = disk_usage.percent

# Перевіряємо, чи перевищено поріг
if usage_percent > (100 - THRESHOLD):
    SUBJECT = f"Увага! Мало місця на диску {DISK}"
    BODY = f"На диску {DISK} залишилось менше {THRESHOLD}% вільного місця. Використано: {usage_percent}%"

    # Створюємо MIME-об'єкт
    msg = MIMEText(BODY)
    msg['Subject'] = SUBJECT
    msg['From'] = SENDER_EMAIL
    msg['To'] = RECEIVER_EMAIL

    # Відправляємо лист
    try:
        with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
            smtp.login(SENDER_EMAIL, SENDER_PASSWORD)
            smtp.send_message(msg)
        print("Лист успішно відправлено!")
    except Exception as e:
        print(f"Помилка при відправленні листа: {e}")

Цей скрипт відправляє електронний лист за допомогою бібліотеки smtplib. Замініть [email protected], your_password та [email protected] на ваші облікові дані та адресу отримувача. У цьому прикладі використовується SMTP-сервер Gmail. Вам може знадобитися увімкнути "доступ для ненадійних додатків" у налаштуваннях вашого облікового запису Google.

Важливо: Зберігання паролів у скриптах небезпечно. Розгляньте використання змінних оточення або інших більш безпечних способів зберігання облікових даних.

Приклад 3: Відправка сповіщень через Telegram Bot (Python)

import psutil
import telegram

# Розділ диска для моніторингу
DISK="/"

# Порогове значення вільного місця у відсотках
THRESHOLD = 10

# Токен вашого Telegram бота
TELEGRAM_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN"

# ID вашого Telegram чату
TELEGRAM_CHAT_ID = "YOUR_TELEGRAM_CHAT_ID"

# Отримуємо інформацію про використання диска
disk_usage = psutil.disk_usage(DISK)

# Отримуємо відсоток використання диска
usage_percent = disk_usage.percent

# Перевіряємо, чи перевищено поріг
if usage_percent > (100 - THRESHOLD):
    MESSAGE = f"Увага! На диску {DISK} залишилось менше {THRESHOLD}% вільного місця. Використано: {usage_percent}%"

    # Відправляємо повідомлення через Telegram bot
    try:
        bot = telegram.Bot(token=TELEGRAM_TOKEN)
        bot.send_message(chat_id=TELEGRAM_CHAT_ID, text=MESSAGE)
        print("Повідомлення успішно відправлено в Telegram!")
    except Exception as e:
        print(f"Помилка при відправленні повідомлення в Telegram: {e}")

Цей скрипт надсилає сповіщення через Telegram bot. Вам потрібно створити Telegram bot та отримати його токен, а також дізнатися ID вашого чату. Замініть YOUR_TELEGRAM_BOT_TOKEN та YOUR_TELEGRAM_CHAT_ID на ваші значення.

Розширені можливості моніторингу та логування

Для більш ефективного моніторингу дискового простору рекомендується використовувати розширені можливості, такі як логування, аналіз історичних даних та інтеграцію з системами моніторингу.

Приклад 1: Логування використання дискового простору (Python)

import psutil
import datetime
import logging

# Настройка логирования
logging.basicConfig(filename="/var/log/disk_space.log", level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')

# Раздел диска для мониторинга
DISK="/"

# Получаем информацию об использовании диска
disk_usage = psutil.disk_usage(DISK)

# Получаем процент использования диска
usage_percent = disk_usage.percent

# Логируем информацию
logging.info(f"Использование диска {DISK}: {usage_percent}%")

# Проверяем, превышен ли порог (опционально, можно логировать только при превышении порога)
THRESHOLD = 90
if usage_percent > THRESHOLD:
    logging.warning(f"Внимание! На диске {DISK} использовано более {THRESHOLD}% места: {usage_percent}%")

Цей скрипт додає логування використання дискового простору у файл /var/log/disk_space.log. Він записує інформацію про використання диска при кожному запуску. Також, якщо використання диска перевищує заданий поріг (в даному випадку 90%), записується попередження.

Приклад 2: Відправка даних в систему моніторингу (наприклад, Zabbix) (Python)

import psutil
import subprocess

# Раздел диска для мониторинга
DISK="/"

# Получаем информацию об использовании диска
disk_usage = psutil.disk_usage(DISK)

# Получаем процент использования диска
usage_percent = disk_usage.percent

# Отправляем данные в Zabbix с помощью zabbix_sender
zabbix_server = "your_zabbix_server"
zabbix_host = "your_zabbix_host"
zabbix_key = "disk.usage.percent"

command = f"zabbix_sender -z {zabbix_server} -s {zabbix_host} -k {zabbix_key} -o {usage_percent}"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()

if process.returncode == 0:
    print(f"Данные успешно отправлены в Zabbix: {stdout.decode()}")
else:
    print(f"Ошибка при отправке данных в Zabbix: {stderr.decode()}")

Цей скрипт відправляє відсоток використання диска в систему моніторингу Zabbix за допомогою утиліти zabbix_sender. Замініть your_zabbix_server, your_zabbix_host та disk.usage.percent на відповідні значення для вашої системи Zabbix. Необхідно, щоб zabbix_sender був встановлений та налаштований на вашому VDS.

Приклад 3: Аналіз історичних даних за допомогою Grafana та InfluxDB

Для аналізу історичних даних про використання дискового простору можна використовувати комбінацію InfluxDB (для зберігання даних) та Grafana (для візуалізації). Спочатку необхідно налаштувати InfluxDB та Grafana. Потім можна змінити скрипт моніторингу, щоб записувати дані в InfluxDB. Приклад (Python):

import psutil
from influxdb import InfluxDBClient

# Раздел диска для мониторинга
DISK="/"

# Параметры InfluxDB
INFLUXDB_HOST = "your_influxdb_host"
INFLUXDB_PORT = 8086
INFLUXDB_DATABASE = "disk_monitoring"

# Получаем информацию об использовании диска
disk_usage = psutil.disk_usage(DISK)

# Получаем процент использования диска
usage_percent = disk_usage.percent

# Создаем клиент InfluxDB
client = InfluxDBClient(host=INFLUXDB_HOST, port=INFLUXDB_PORT, database=INFLUXDB_DATABASE)

# Формируем данные для записи
data = [
    {
        "measurement": "disk_usage",
        "tags": {
            "disk": DISK
        },
        "fields": {
            "usage_percent": usage_percent
        }
    }
]

# Записываем данные в InfluxDB
try:
    client.write_points(data)
    print("Данные успешно записаны в InfluxDB")
except Exception as e:
    print(f"Ошибка при записи данных в InfluxDB: {e}")

Цей скрипт записує відсоток використання диска в базу даних InfluxDB. Замініть your_influxdb_host та disk_monitoring на відповідні значення для вашої системи InfluxDB. Після цього ви можете створити дашборд в Grafana для візуалізації цих даних.

Ці приклади показують, як можна розширити базовий моніторинг дискового простору, щоб отримати більш повну картину та автоматизувати реагування на проблеми.

Максимальна продуктивність та контроль для ваших проєктів?

Для критично важливих проєктів, що вимагають повної свободи та потужності, виділені сервери — ідеальний вибір. Отримайте повний контроль.

Знайти свій сервер →
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.