SystemdDoctor
служба не работает частое диск ресурсы

No space left on device в журнале службы

Сообщение No space left on device (номер 28, ENOSPC) значит, что записать данные некуда. Обычно это заполненный раздел, но бывают два коварных варианта: закончились inode при свободном месте, и место занято удалёнными файлами, которые всё ещё держит процесс.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Раздел действительно заполнен

    Чаще всего виноваты журналы, кеши, резервные копии и дампы. На серверах особенно быстро растёт /var.

  2. Закончились inode

    Место есть, а создать файл нельзя: исчерпаны записи файловой системы. Так бывает при миллионах мелких файлов — кеши, сессии, очереди писем.

  3. Место держат удалённые, но открытые файлы

    Файл удалён, а процесс всё ещё держит его открытым: место не освобождается до закрытия. Классика после ручного удаления журнала работающей службы.

  4. Переполнен раздел /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

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Раздел действительно заполнен
Почему происходит
Чаще всего виноваты журналы, кеши, резервные копии и дампы. На серверах особенно быстро растёт /var.
Как проверить
Посмотрите занятость разделов и крупнейшие каталоги.
df -h
sudo du -xh / --max-depth=2 2>/dev/null | sort -h | tail -12
Как исправить
Уберите лишнее и ограничьте рост: журнал systemd сжимается командой ниже, для собственных файлов служб настройте logrotate.
sudo journalctl --vacuum-size=500M
2. Закончились inode
Почему происходит
Место есть, а создать файл нельзя: исчерпаны записи файловой системы. Так бывает при миллионах мелких файлов — кеши, сессии, очереди писем.
Как проверить
Посмотрите использование inode.
df -i
sudo find /var -xdev -type f 2>/dev/null | cut -d/ -f1-4 | sort | uniq -c | sort -rn | head
Как исправить
Удалите массивы мелких файлов и настройте их очистку. На переполненной по inode файловой системе увеличить их число нельзя — только пересоздать раздел с другими параметрами.
3. Место держат удалённые, но открытые файлы
Почему происходит
Файл удалён, а процесс всё ещё держит его открытым: место не освобождается до закрытия. Классика после ручного удаления журнала работающей службы.
Как проверить
Найдите удалённые файлы, которые ещё открыты.
sudo lsof +L1 2>/dev/null | head -20
Как исправить
Перезапустите службу, которая держит файл: тогда место освободится. Впредь для журналов используйте logrotate с перезагрузкой настроек, а не удаление файла.
4. Переполнен раздел /run или /tmp в памяти
Почему происходит
Это 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

Связанные ошибки

Где встречается чаще всего

Источники

  • write(2): ошибка ENOSPC
    Условие возникновения ошибки при записи.
    документация программы
    сверено 15 сентября 2026
  • journald.conf(5)
    SystemMaxUse= и ограничение размера журнала.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на заполненном разделе и на разделе с исчерпанными inode.
    собственная проверка, systemd 255
    сверено 15 сентября 2026