Что означает ошибка ENOSPC
Ошибка ENOSPC (No space left on device) появляется, когда файловая система в Linux переполняется. Типичное сообщение:
bash
df: невозможно получить доступ '/home/user/data': Нет такого файла или директории
или
bash
Ошибка записи: Нет места на устройстве
Система не может создавать новые файлы, записывать логи, обновлять пакеты или выполнять любые операции, требующие свободного места на диске.
Причины возникновения
- Полный раздел – свободное место на монтируемом разделе достигло нуля.
- Рост лог-файлов – без настройки ротации логи заполняют
/var/logи другие каталоги. - Кэш Docker / временные файлы – образы контейнеров, слои и кэши пакетного менеджера накапливаются.
- Сбой резервного копирования – старые архивы или неудачные бэкапы занимают всё доступное пространство.
- Ошибки монтирования или LVM – неправильно настроенный LVM или повреждённый раздел приводят к неиспользуемому, но «занятому» пространству.
Способы решения
Способ 1: Очистка дискового пространства
- Проверка свободного места
df -hпоказывает, какой раздел переполнен. Обратите внимание на столбец Use%. - Удаление ненужных пакетов
sudo apt-get autoremove && sudo apt-get autoclean - Очистка пользовательского кэша
rm -rf ~/.cache/* - Удаление старых логов
sudo journalctl --vacuum-time=7d
💡 Совет: Для более глубокого очищения логов используйте
sudo logrotate -f /etc/logrotate.d/docker.
Способ 2: Использование утилит для анализа и удаления больших файлов
- Определение больших директорий
sudo du -sh /* | sort -hr | head -10 - Поиск больших файлов в конкретном каталоге
sudo find /var/log -type f -size +100M -exec ls -lh {} \; - Удаление ненужных больших файлов (будьте осторожны!)
sudo rm -v /var/log/old-logs/*.log
Способ 3: Расширение диска
3.1. LVM (Logical Volume Manager)
# Проверка LVM
sudo lvdisplay
# Добавление свободного места к корневому разделу
sudo lvextend -l +100%FREE /dev/vg0/usr
sudo resize2fs /dev/vg0/usr
3.2. Простой раздел (добавление нового диска)
# Подключите новый диск
sudo fdisk /dev/sdb # создайте новый раздел
sudo mkfs.ext4 /dev/sdb1
sudo mount /dev/sdb1 /mnt/newdisk
Способ 4: Настройка ротации логов и очистки кэша
- Ротация логов через logrotate
Отредактируйте/etc/logrotate.d/custom:/var/log/custom/*.log { daily rotate 7 compress missingok notifempty } - Очистка кэша пакетного менеджера
sudo apt-get clean sudo yum clean all - Очистка кэша Docker
sudo docker system prune -a
Способ 5: Альтернативное решение — использование tmpfs для временных файлов
Для каталогов, которые могут быть безопасно размещены в памяти (например, /tmp или /var/tmp), используйте tmpfs:
# Создайте tmpfs-монтирование размером 2 ГБ
sudo mount -t tmpfs -o size=2G tmpfs /var/tmp/fast
Добавьте строку в /etc/fstab, чтобы монтирование выполнялось при загрузке:
tmpfs /var/tmp/fast tmpfs defaults,size=2G 0 0
Профилактика
- Регулярно проверяйте свободное место с помощью
df -hили графического инструментаgnome-disk-utility. - Настройте ротацию логов (
logrotate,journalctl --vacuum-time) и удаляйте старые архивы. - Очищайте кэши (
apt-get clean,docker system prune) после установки пакетов или работы с контейнерами. - Мониторьте большие каталоги с помощью скриптов
du -sh /path/* | sort -hr. - Используйте дисковые квоты, если необходимо ограничить размер данных для конкретных пользователей или групп.
- Планируйте резервное копирование и периодически проверяйте, что архивы хранятся вне основного диска.
Следуя этим рекомендациям, вы минимизируете риск переполнения диска и сохраните стабильную работу системы.