#Что означает ошибка
write error: No space left on device
Файловая система тратит ресурсы двух видов: блоки (место для данных) и inodes (записи о файлах и каталогах). Закончиться может любой из них. Кроме того, место освобождается только когда файл закрыт всеми процессами, поэтому удалённый, но открытый файл продолжает занимать диск.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Диск или раздел действительно заполненДанные, логи, кэши и резервные копии заняли всё место. | df -h показывает 100% на нужном разделе. | Найдите крупные каталоги и очистите ненужное (шаг 3–4). |
| Закончились inodesОчень много мелких файлов (почта, сессии, кэш), а место ещё есть. | df -h показывает свободное место, а df -i — 100% использования inodes. | Найдите каталог с огромным числом файлов и очистите его. |
| Удалённые файлы удерживаются процессамиЛог удалили, а процесс продолжает писать в него и держит место. | df показывает заполнение, а du находит гораздо меньше; lsof +L1 выводит удалённые файлы. | Перезапустите процесс, держащий файл, либо очистите файл обнулением. |
| Раздувшиеся журналы и контейнерыЖурнал systemd, логи приложений, образы и тома Docker занимают гигабайты. | journalctl --disk-usage и docker system df показывают большие значения. | Ограничьте размер журнала, очистите неиспользуемые образы осознанно. |
| Квоты или резерв файловой системыУ пользователя исчерпана квота либо раздел зарезервирован для root. | Обычный пользователь получает ошибку, а root может писать; в df место есть. | Проверьте квоты (quota) и параметры раздела. |
#Пошаговая диагностика
- Проверьте место и inodesВ терминале выполните
df -hи посмотрите столбцы «Использовано» и «Доступно» на разделе с программой или данными. Не удаляйте неизвестные системные каталоги; сначала выясните, какие файлы занимают место. - Проверьте удалённые файлы, занятые процессамиЕсли
df -hпоказывает мало занятого места, но система продолжает сообщатьNo space left on device, проверьте удалённые файлы, которые ещё открыты процессами:sudo lsof +L1. Посмотрите имя процесса и размер, не завершайте его вслепую на рабочем сервере. Запланируйте штатный перезапуск конкретной службы с сохранением данных, если именно её удалённый лог продолжает занимать место; затем снова запуститеdf -h. - Найдите самые большие каталогиВ Linux сначала определите заполненный раздел через
df -h, затем выполнитеsudo du -xhd1 /varили другой конкретный каталог этого раздела, чтобы увидеть крупные подкаталоги. Ключ-xне даёт уходить на другие файловые системы. Просматривайте результаты от крупных к мелким и удаляйте только известный кэш или устаревшие файлы после резервного копирования. Не удаляйте весь/var/logили/tmpбез понимания работающих программ. - Очистите безопасные кэши и журналы
sudo journalctl --vacuum-size=200M,sudo apt clean(RHEL:sudo dnf clean all),docker system prune(осторожно: удаляет неиспользуемые образы). - Проверьте результат и настройте ограничения
df -h; ограничьте журналы:SystemMaxUse=200Mв/etc/systemd/journald.conf, настройте logrotate.
#Шаги 1–3. Диагностика
df -h — место, df -i — inodes, lsof +L1 — удалённые, но открытые файлы, du ... | sort -h — самые большие каталоги первого уровня; повторите для найденного каталога, углубляясь вниз.df -hdf -isudo lsof +L1 | headsudo du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -n 15#Шаг 4. Безопасная очистка
sudo apt cleansudo journalctl --vacuum-size=200MКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
docker system prune, внимательно прочитайте, что она удалит: остановленные контейнеры и неиспользуемые образы и сети.docker system df#Как проверить результат
df -hиdf -iпоказывают запас места и свободные inodes.- Приложение снова записывает файлы без ошибок.
- Настроена ротация логов и мониторинг заполнения.
#Если не помогло
Если место «пропало» после удаления большого файла, перезапустите службу, которая писала в него — место освободится. Если закончились inodes, ищите каталоги с миллионами файлов (find /путь -xdev -type f | wc -l по подкаталогам) и очищайте кэш, сессии или почту. На виртуальных серверах проверьте также, не заполнен ли раздел /boot старыми ядрами.