> Что такое inodes и зачем за ними наблюдать (Node.js)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: Wildberries

Стек: Node.js

> Пример ответа

Короткий ответ

Inode (index node) - это структура данных в файловых системах Unix/Linux, которая хранит метаданные о файле или директории: права доступа, владельца, размер, временные метки и указатели на блоки данных на диске. Само имя файла хранится отдельно, в директории. Наблюдать за inodes нужно, чтобы не допустить их исчерпания - это приводит к ошибкам вида "No space left on device", даже если свободное место на диске ещё есть.

Подробное объяснение

Каждый файл и директория в файловой системе имеют уникальный номер inode. В самом inode хранится:

  • тип файла (обычный, директория, симлинк и т.д.)
  • права доступа (rwx)
  • UID и GID владельца
  • размер в байтах
  • временные метки: atime (последний доступ), mtime (последняя модификация), ctime (последнее изменение метаданных)
  • количество hard links (ссылок на этот inode)
  • указатели на блоки данных на диске (прямые, косвенные, двойные косвенные)

Количество inodes на файловой системе фиксируется при её создании. Если закончатся inodes, система не сможет создать новый файл или директорию, даже если свободное место ещё есть. Это частая проблема на серверах с большим количеством маленьких файлов (например, кеш, временные файлы, очереди сообщений).

Наблюдение за inodes включает:

  • мониторинг процента использованных inodes (df -i)
  • отслеживание количества файлов в критических директориях
  • настройка алертов при приближении к лимиту (обычно 80-90%)

На практике

Для Node.js-разработчика проблема с inodes может возникнуть при:

  • работе с временными файлами (например, при обработке загрузок)
  • кешировании на файловой системе
  • логировании (если не настроена ротация логов)
  • хранении большого количества маленьких объектов (например, сессий)

Команды для проверки:

BASH
# Проверить использование inodes на всех смонтированных ФС
df -i
# Посмотреть количество файлов в директории
ls -1 /path/to/dir | wc -l
# Найти директории с наибольшим количеством файлов
find /var -type f | cut -d/ -f1-4 | sort | uniq -c | sort -rn | head -10

В Node.js можно мониторить количество файлов в критических директориях с помощью fs.readdir и отправлять метрики в систему мониторинга (Prometheus, Grafana).

Пример кода

JAVASCRIPT
const fs = require('fs').promises;
const path = require('path');
async function countFilesInDir(dirPath) {
try {
const files = await fs.readdir(dirPath);
return files.length;
} catch (err) {
console.error(`Ошибка чтения директории ${dirPath}:`, err);
return -1;
}
}
// Пример использования для мониторинга
async function checkInodeUsage() {
const criticalDirs = ['/tmp', '/var/log', '/var/tmp'];
for (const dir of criticalDirs) {
const count = await countFilesInDir(dir);
console.log(`Файлов в ${dir}: ${count}`);
if (count > 10000) {
console.warn(`Внимание: в ${dir} больше 10000 файлов, возможна проблема с inodes`);
}
}
}
checkInodeUsage();

Как отвечать на собеседовании

Начни с краткого определения inode и его основной функции - хранение метаданных файла. Затем объясни, почему это важно для мониторинга: исчерпание inodes - скрытая проблема, которую не показывает обычная проверка свободного места. Приведи пример из практики Node.js: временные файлы, кеш, логи. Упомяни, что решение - либо увеличить количество inodes при создании ФС (если возможно), либо чистить старые файлы, либо использовать другой подход (например, хранить данные в базе, а не в файлах).

Что проверяет интервьюер

  • Понимание базовых концепций файловых систем Unix/Linux
  • Осознание разницы между свободным местом и свободными inodes
  • Практический опыт мониторинга и диагностики проблем
  • Умение связать системные знания с повседневной работой backend-разработчика

Типичные ошибки

  • Путать inodes с размером файла или свободным местом на диске
  • Думать, что inodes - это только для Linux, не зная про другие ОС
  • Не упоминать, что количество inodes фиксировано при создании файловой системы
  • Предлагать удаление файлов без проверки, какие именно файлы можно безопасно удалить
  • Не знать, как проверить использование inodes через командную строку

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью