Решаем проблему «На устройстве не осталось места» в 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, где будет еще больше полезной информации.