Как решить проблему нехватки inode в Linux?

«Как решить проблему нехватки inode в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нехватка inode (No space left on device при наличии свободного места по df -h) означает исчерпание лимита структур метаданных файловой системы, которые хранят информацию о файлах (имя, права, расположение данных).

Решение в работающей системе:

  1. Найти и удалить ненужные мелкие файлы:

    # Проверить использование 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
  2. Если удаление невозможно — временное решение:

    • Добавить новую файловую систему с большим количеством inode и смонтировать её в проблемную директорию (bind mount).
    • Использовать mount --bind для перенаправления записи новых файлов.

Кардинальное решение (требует простоя):

  1. Создать новую файловую систему с увеличенным числом inode. Для ext4 используйте опцию -N при форматировании:

    sudo mkfs.ext4 -N 20000000 /dev/sdX1
    # -N задаёт явное количество inode. Рассчитайте его с запасом.

    Или используйте опцию -T, которая задаёт предустановленный профиль:

    sudo mkfs.ext4 -T huge /dev/sdX1
    # Профиль 'huge' уменьшает размер inode (128 байт вместо 256), увеличивая их количество.
  2. Перенести данные со старой ФС на новую.

Профилактика в DevOps:

  • Мониторинг: Включить метрику node_filesystem_files_free из node_exporter в Prometheus и настроить алерты.
  • Планирование: При подготовке дисков для хранения большого количества мелких объектов (логи, артефакты сборок, изображения) заранее выбирайте ФС с подходящим размером inode или используйте объектные хранилища (S3-совместимые).