December 2

Решаем проблему «На устройстве не осталось места» в Linux

Это перевод оригинальной статьи Fix ‘No Space Left on Device’ in Linux Real-World DevOps Solutions That Work

Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.

В этой статье рассмотрено как проверять, отслеживать и управлять дисковым пространством в Linux.

Реальный сценарий

Предположим, вы управляете боевым сервером, который внезапно выходит из строя с такой ошибкой:

No space left on device

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

Вот как профессионально справиться с этой ситуацией и предотвратить ее.

Шаг 1: Проверьте использование диска

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

df -h

Объяснение:

  • df = показывает использование файловых систем (disk filesystem)
  • -h = вывод в удобном для чтения виде(ГБ, МБ)

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

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   45G  2.0G  95% /

Проблема: загрузка диска на 95%. Риск сбоя приложения или потери данных.

Шаг 2: Определите, что занимает пространство

Проверка использования места по каталогам (root)

sudo du -h --max-depth=1 /du -h --max-depth=1 /

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

4.0G /var
15G /home
20G /opt

Обратите внимание на /var, /opt, или/home – там часто хранятся логи, базы данных и данные Docker.

Шаг 3: Очистка хранилища Docker (при использовании Docker)

docker system dfdf

Очистка неиспользуемых ресурсов Docker

docker system prune -aa

⚠️ Внимание: это приведет к удалению всех неиспользуемых контейнеров, образов и сетей.

Шаг 4: Очистка файлов журнала

Проверьте размер логов в /var/log

sudo du -sh /var/log/*du -sh /var/log/*

Очищаем или удаляем большие файлы логов

sudo truncate -s 0 /var/log/syslog
sudo rm -rf /var/log/myapp/*.log

Шаг 5: Проактивно контролируйте дисковое пространство

Использование ncdu (Интерактивный просмотрщик)

Установите:

sudo apt install ncdu # Debian/Ubuntu# Debian/Ubuntu

Запустите:

sudo ncdu /

Помогает визуализировать и детализировать использование диска подобно файловому проводнику.

Бонус: предотвратите заполнение диска MongoDB

Выгрузка данных Mongo из контейнера:

docker exec mongodb-container mongodump --archive=/data/backup.gz --gzipexec mongodb-container mongodump --archive=/data/backup.gz --gzip

Перенесите данные на другой сервер:

scp mongodb-container:/data/backup.gz user@remote:/backups/container:/data/backup.gz user@remote:/backups/

Затем очистите старые данные:

docker exec mongodb-container rm /data/backup.gzexec mongodb-container rm /data/backup.gz

🛡️ Лучшие практики управления дисковым пространством

✅ Автоматизируйте регулярное резервное копирование.
✅ Ротируйте логи с помощью logrotate.
✅ Мониторьте диск с помощью таких инструментов, как Prometheus + Grafana.
✅ Настройте задания cron для очистки файлов Docker и временных файлов.
✅ Разделите логи, данные и корневой каталог по отдельности для лучшего контроля.

Настройте cron-задание для мониторинга диска каждый час:

crontab -e
0 * * * * df -h > /var/log/disk_report.logdf -h > /var/log/disk_report.log

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.