Ошибка No space left on device (ENOSPC) в Linux
Что означает ошибка ENOSPC
Ошибка No space left on device (код ошибки ENOSPC) — это стандартная ошибка в системах Linux, которая возникает при попытке записи данных на диск, когда на нём закончилось свободное место. Аббревиатура ENOSPC расшифровывается как Error NO Space PaCe — «нет места на устройстве».
Эта ошибка может появиться в любой ситуации, связанной с записью на диск: при установке программ, создании файлов, обновлении системы или работе баз данных.
Причины возникновения ошибки
Существует несколько основных причин появления ошибки ENOSPC:
- Физическое заполнение диска — на разделе действительно не осталось свободного места.
- Исчерпание inodes — на диске закончились файловые дескрипторы (иноды), даже если есть свободное место.
- Квоты пользователей — для учётной записи пользователя или группы установлена квота на дисковое пространство.
- Переполнение временных директорий — директории
/tmpили/var/tmpзабиты временными файлами.
Диагностика проблемы
Проверка использования дискового пространства
Первым делом проверьте, сколько места доступно на дисках:
df -h
Результат покажет использование всех смонтированных разделов:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 100G 95G 5G 95% /
/dev/sdb1 500G 500G 0 100% /mnt/data
Если значение в столбце Use% близко к 100%, это подтверждает нехватку места.
Проверка количества inodes
Иногда место заканчивается из-за большого количества мелких файлов:
df -i
Пример вывода:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 655360 655360 0 100% /
Если IUse% равен 100%, значит, исчерпаны inodes, а не собственно место на диске.
Поиск крупных директорий
Найдите директории, занимающие больше всего места:
du -sh /* 2>/dev/null | sort -rh | head -10
Для более детального анализа конкретной директории:
du -sh /var/*
Способы решения проблемы
Очистка журналов системы
Системные журналы могут занимать много места. Очистите старые логи:
# Очистка journald (последние 7 дней)
sudo journalctl --vacuum-time=7d
# Очистка старых логов
sudo rm -rf /var/log/*.gz
sudo rm -rf /var/log/syslog.*
sudo truncate -s 0 /var/log/syslog
Очистка кэша пакетного менеджера
Удалите кэш установленных пакетов:
Для Debian/Ubuntu:
sudo apt clean
sudo apt autoremove
sudo apt-get clean
Для CentOS/RHEL:
sudo yum clean all
sudo dnf clean all
Для Arch Linux:
sudo pacman -Scc
Удаление старых ядер системы
Если система давно не обновлялась, старые ядра могут занимать много места:
# Для Ubuntu/Debian
sudo apt autoremove --purge
# Для CentOS/RHEL
sudo package-cleanup --oldkernels --count=2
Очистка временных файлов
Удалите содержимое временных директорий:
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
Удаление крупных файлов
Найдите и удалите большие файлы вручную:
# Поиск файлов больше 100 МБ
sudo find / -type f -size +100M -exec ls -lh {} \;
Внимание: Перед удалением любых файлов убедитесь, что они не являются системными или важными для работы приложений.
Расширение дискового пространства
Если очистка не помогла, рассмотрите возможность:
- Добавления нового диска и монтирования его в систему
- Расширения существующего раздела (с помощью
gpartedилиresize2fs) - Создания символических ссылок на новый раздел
Профилактика повторного возникновения
Чтобы избежать повторения ошибки ENOSPC в будущем:
- Регулярно очищайте систему — настройте автоматическую очистку журналов и кэшей.
- Настройте ротацию логов — отредактируйте
/etc/logrotate.conf. - Мониторинг — используйте системы мониторинга (Prometheus, Zabbix) для отслеживания использования диска.
- Разделение директорий — размещайте
/tmp,/var/logи/homeна отдельных разделах.
Заключение
Ошибка No space left on device (ENOSPC) в Linux — частая проблема, с которой сталкиваются системные администраторы и пользователи. В большинстве случаев она решается очисткой диска от ненужных файлов: журналов, кэшей и временных данных. Если регулярно проводить профилактическое обслуживание системы, риск возникновения этой ошибки сводится к минимуму.
При серьёзных проблемах с дисковым пространством рекомендуется пересмотреть архитектуру хранения данных и, при необходимости, расширить дисковую подсистему.