Ответ
Нехватка inode (No space left on device при наличии свободного места по df -h) означает исчерпание лимита структур метаданных файловой системы, которые хранят информацию о файлах (имя, права, расположение данных).
Решение в работающей системе:
-
Найти и удалить ненужные мелкие файлы:
# Проверить использование inode df -i # Найти точки монтирования с >80% использования. # Найти директории с наибольшим количеством файлов find /mnt/problem_point -xdev -type f | awk -F/ '{print $2}' | sort | uniq -c | sort -rn | head -20 # Частые виновники: кэши пакетных менеджеров, сессии tmps, логи, почтовые очереди (maildir), временные файлы приложений. # Очистка кэша apt (пример для Debian/Ubuntu): sudo apt-get clean # Удаление старых логов (с осторожностью): sudo find /var/log -name "*.log" -type f -mtime +30 -delete -
Если удаление невозможно — временное решение:
- Добавить новую файловую систему с большим количеством inode и смонтировать её в проблемную директорию (bind mount).
- Использовать
mount --bindдля перенаправления записи новых файлов.
Кардинальное решение (требует простоя):
-
Создать новую файловую систему с увеличенным числом inode. Для
ext4используйте опцию-Nпри форматировании:sudo mkfs.ext4 -N 20000000 /dev/sdX1 # -N задаёт явное количество inode. Рассчитайте его с запасом.Или используйте опцию
-T, которая задаёт предустановленный профиль:sudo mkfs.ext4 -T huge /dev/sdX1 # Профиль 'huge' уменьшает размер inode (128 байт вместо 256), увеличивая их количество. -
Перенести данные со старой ФС на новую.
Профилактика в DevOps:
- Мониторинг: Включить метрику
node_filesystem_files_freeизnode_exporterв Prometheus и настроить алерты. - Планирование: При подготовке дисков для хранения большого количества мелких объектов (логи, артефакты сборок, изображения) заранее выбирайте ФС с подходящим размером inode или используйте объектные хранилища (S3-совместимые).