No space left on device в журнале службы
Сообщение No space left on device (номер 28, ENOSPC) значит, что записать данные некуда. Обычно это заполненный раздел, но бывают два коварных варианта: закончились inode при свободном месте, и место занято удалёнными файлами, которые всё ещё держит процесс.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Раздел действительно заполнен
Чаще всего виноваты журналы, кеши, резервные копии и дампы. На серверах особенно быстро растёт /var.
-
Закончились inode
Место есть, а создать файл нельзя: исчерпаны записи файловой системы. Так бывает при миллионах мелких файлов — кеши, сессии, очереди писем.
-
Место держат удалённые, но открытые файлы
Файл удалён, а процесс всё ещё держит его открытым: место не освобождается до закрытия. Классика после ручного удаления журнала работающей службы.
-
Переполнен раздел /run или /tmp в памяти
Это tmpfs с небольшим размером. Служба, пишущая туда крупные файлы, заполняет раздел и получает отказ, хотя на диске места полно.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Два взгляда на одно: место и inode. Второй показатель забывают проверять, а он объясняет самые непонятные случаи.
df -h && df -iКрупнейшие каталоги в /var — обычное место, где кончается место на серверах.
sudo du -xh /var --max-depth=2 | sort -h | tail -12Удалённые файлы, которые всё ещё занимают место.
sudo lsof +L1 | head -20Сколько занимает журнал systemd: иногда это и есть весь заполненный раздел.
journalctl --disk-usageРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Чаще всего виноваты журналы, кеши, резервные копии и дампы. На серверах особенно быстро растёт /var.
- Как проверить
-
Посмотрите занятость разделов и крупнейшие каталоги.
df -h sudo du -xh / --max-depth=2 2>/dev/null | sort -h | tail -12
- Как исправить
-
Уберите лишнее и ограничьте рост: журнал systemd сжимается командой ниже, для собственных файлов служб настройте logrotate.
sudo journalctl --vacuum-size=500M
- Почему происходит
- Место есть, а создать файл нельзя: исчерпаны записи файловой системы. Так бывает при миллионах мелких файлов — кеши, сессии, очереди писем.
- Как проверить
-
Посмотрите использование inode.
df -i sudo find /var -xdev -type f 2>/dev/null | cut -d/ -f1-4 | sort | uniq -c | sort -rn | head
- Как исправить
- Удалите массивы мелких файлов и настройте их очистку. На переполненной по inode файловой системе увеличить их число нельзя — только пересоздать раздел с другими параметрами.
- Почему происходит
- Файл удалён, а процесс всё ещё держит его открытым: место не освобождается до закрытия. Классика после ручного удаления журнала работающей службы.
- Как проверить
-
Найдите удалённые файлы, которые ещё открыты.
sudo lsof +L1 2>/dev/null | head -20
- Как исправить
- Перезапустите службу, которая держит файл: тогда место освободится. Впредь для журналов используйте logrotate с перезагрузкой настроек, а не удаление файла.
- Почему происходит
- Это tmpfs с небольшим размером. Служба, пишущая туда крупные файлы, заполняет раздел и получает отказ, хотя на диске места полно.
- Как проверить
-
Посмотрите отдельно tmpfs-разделы.
df -h /run /tmp /dev/shm
- Как исправить
-
Перенесите данные в /var/lib через
StateDirectory=или увеличьте размер tmpfs параметром монтирования.
Пример вывода
База не может записать данные: раздел заполнен. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× postgresql@16-main.service - PostgreSQL Cluster 16-main
Active: failed (Result: exit-code) since Mon 2026-09-15 15:22:19 MSK; 30s ago
postgres[15100]: PANIC: could not write to file "pg_wal/xlogtemp.15100": No space left on device
postgres[15100]: LOG: database system is shut down
systemd[1]: postgresql@16-main.service: Main process exited, code=exited, status=1/FAILURE
Связанные ошибки
- status=240/LOGS_DIRECTORY в systemd Код 240/LOGS_DIRECTORY: не удалось подготовить каталог журналов службы в /var/log из LogsDirectory=.
- status=239/CACHE_DIRECTORY в systemd Код 239/CACHE_DIRECTORY: не удалось подготовить каталог кеша службы в /var/cache из CacheDirectory=.
- Read-only file system в журнале службы Служба не может писать: файловая система только для чтения. Разбор: параметры изоляции unit, монтирование ro, ошибки файловой системы.
- signal=BUS (status=7/BUS) в systemd Процесс службы завершён сигналом BUS: ошибка доступа к памяти, часто из-за усечённого файла в отображении или заполненного диска.
- Disk quota exceeded для службы Место на разделе есть, а запись отклоняется: исчерпана дисковая квота пользователя или группы.
- Docker: no space left on device при запуске контейнеров Раздел с /var/lib/docker заполнен образами и слоями. Как посчитать занятое и что можно удалить безопасно.
- Too many open files в журнале службы Служба исчерпала лимит файловых дескрипторов. Как правильно поднять LimitNOFILE и когда дело в утечке.
- Место есть, а файлы не создаются: кончились inode Ошибка о нехватке места при свободном диске: исчерпаны записи файловой системы. Как найти каталог с миллионом файлов.
Где встречается чаще всего
Источники
-
write(2): ошибка ENOSPC
Условие возникновения ошибки при записи. -
journald.conf(5)
SystemMaxUse= и ограничение размера журнала. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено на заполненном разделе и на разделе с исчерпанными inode.