Где хранится информация об именах файлов, директорий?devops-89

Основной механизм хранения имен

В Unix-подобных системах информация об именах файлов и директорий хранится не в inodes, а в специальных структурах данных:

  1. Каталоги - это специальные файлы, содержащие:

    • Таблицу соответствий "имя файла → номер inode"
    • Собственные метаданные (как и обычные файлы)
  2. Структура записи каталога:

    • В традиционных ФС (ext*) это struct ext4_dir_entry_2
    • В современных ФС используются более сложные структуры

Техническая реализация в разных ФС

1. ext4

struct ext4_dir_entry_2 {
    __le32  inode;      /* Номер inode */
    __le16  rec_len;    /* Длина записи */
    __le8   name_len;   /* Длина имени */
    __le8   file_type;  /* Тип файла */
    char    name[];     /* Имя файла (переменной длины) */
};

Особенности:

  • Имена хранятся непосредственно в записях каталога
  • Для ускорения поиска используется хэш-индекс (htree)

2. XFS

struct xfs_dir2_leaf_entry {
    __be32  hashval;    /* Хэш имени */
    __be32  address;    /* Адрес записи */
};

struct xfs_dir2_data_entry {
    __be64  inumber;    /* Номер inode */
    __u8    namelen;    /* Длина имени */
    __u8    name[];     /* Имя файла */
    ...                 /* Хэш и другие метаданные */
};

Где физически расположены эти структуры?

  1. На диске:

    • В специальных блоках данных, выделенных для каталога
    • Организованы в B-деревья (XFS) или линейные списки (ext4)
  2. В памяти:

    • Кэшируются в dentry cache (directory entry cache)
    • Ускоряет частые операции поиска

Как посмотреть содержимое каталога на низком уровне?

# Для ext4 (используя debugfs):
debugfs -R "ls -l /path/to/directory" /dev/sdX

# Для XFS:
xfs_db -c "ls -l /path/to/directory" /dev/sdX

Особенности работы с именами

  1. Жесткие ссылки:

    • Один inode может иметь несколько имен
    • Все имена равноправны и хранятся в разных каталогах
  2. Символические ссылки:

    • Хранят путь в содержимом файла
    • Имеют свой собственный inode
  3. Длинные имена:

    • Современные ФС поддерживают имена до 255 байт
    • В ext4 для длинных имен используется специальный флаг FT_DIR_CSUM

Производительность и оптимизации

  1. Кэширование:

    • dentry cache ускоряет поиск файлов
    • Индексация имен в B-деревьях (XFS, btrfs)
  2. Журналирование:

    • Изменения имен файлов журналируются
    • Обеспечивает консистентность при сбоях
# Проверка состояния dentry cache
cat /proc/sys/fs/dentry-state

Восстановление данных

При повреждении каталогов:

  1. Имена могут быть восстановлены по метаданным inodes
  2. Инструменты типа extundelete анализируют:
    • Остатки записей каталогов
    • "Потерянные" inodes

Резюмируем: Информация об именах файлов и директорий хранится в специальных структурах данных внутри самих каталогов, которые представляют собой особый тип файлов. Современные файловые системы используют сложные механизмы (B-деревья, хэширование) для эффективного хранения и быстрого поиска имен, что особенно важно в DevOps-средах с огромным количеством файлов.