В Unix-подобных системах информация об именах файлов и директорий хранится не в inodes, а в специальных структурах данных:
Каталоги - это специальные файлы, содержащие:
Структура записи каталога:
struct ext4_dir_entry_2
struct ext4_dir_entry_2 {
__le32 inode; /* Номер inode */
__le16 rec_len; /* Длина записи */
__le8 name_len; /* Длина имени */
__le8 file_type; /* Тип файла */
char name[]; /* Имя файла (переменной длины) */
};
Особенности:
struct xfs_dir2_leaf_entry {
__be32 hashval; /* Хэш имени */
__be32 address; /* Адрес записи */
};
struct xfs_dir2_data_entry {
__be64 inumber; /* Номер inode */
__u8 namelen; /* Длина имени */
__u8 name[]; /* Имя файла */
... /* Хэш и другие метаданные */
};
На диске:
В памяти:
# Для ext4 (используя debugfs):
debugfs -R "ls -l /path/to/directory" /dev/sdX
# Для XFS:
xfs_db -c "ls -l /path/to/directory" /dev/sdX
Жесткие ссылки:
Символические ссылки:
Длинные имена:
Кэширование:
Журналирование:
# Проверка состояния dentry cache
cat /proc/sys/fs/dentry-state
При повреждении каталогов:
extundelete
анализируют:
Резюмируем: Информация об именах файлов и директорий хранится в специальных структурах данных внутри самих каталогов, которые представляют собой особый тип файлов. Современные файловые системы используют сложные механизмы (B-деревья, хэширование) для эффективного хранения и быстрого поиска имен, что особенно важно в DevOps-средах с огромным количеством файлов.