Почему размер inode исправлен?

Я читаю о файловых системах и носителе данных, и я не могу понять, почему, если я создам файл размера одного блока, у меня не может быть меньше индексного дескриптора, чем один из более крупного файла. Не может ли ОС динамически выбирать размер inode в соответствии с размером файла?

2 Solutions collect form web for “Почему размер inode исправлен?”

Одной из причин того, что inodes являются фиксированными, является то, что в традиционном формате файловой системы Unix (который, например, ext4 по-прежнему следует довольно близко), inodes хранятся в том, что по существу является одной таблицей . При использовании элементов фиксированного размера поиск элемента на основе его номера индекса является тривиальным. В любой другой структуре данных потребуется больше работы, и, возможно, что более важно, читается более произвольный доступ к структуре данных.

Размер самого файла не влияет на сам индекс, который традиционно хранит расположение первых двух блоков данных. Для более длинных файлов система выделяет дополнительные блоки (косвенные блоки), чтобы удерживать места остальными. (См. Страницу wikipedia для красивой картинки.)

Я сказал «традиционно», так как, например, ext4 фактически делает вещи по-другому, он может сохранять содержимое символических ссылок в самом inode (они часто короткие, поэтому полезно не выделять полный блок), а традиционное дерево одиночных блоков заменяется деревом экстентов , т.е. промежутками нескольких блоков.

Насколько я могу судить, на ext4 причина поддержки inodes, размер которой больше минимального, заключается в том, чтобы разрешить сохранение новых полей и использовать дополнительное пространство для расширенных атрибутов. Глядя на таблицу в первой ссылке, дополнительные поля над исходными 128 байтами в inode ext4 содержат в основном метки с высокой точностью. В системах SELinux метки безопасности реализуются как расширенные атрибуты, поэтому возможность их хранения непосредственно в inode может быть очень полезна.

Более новые файловые системы, такие как btrfs, XFS и ZFS с менее ортодоксальными форматами, скорее всего, будут делать что-то по-другому, и я не знаю много о файловых системах, используемых в системах BSD.

Сам inode содержит метаданные файлов, а не любые данные. Таким образом, не имеет значения, маленький или большой размер. Кроме того, inodes существуют для вещей, отличных от обычных файлов. Например, для именованных каналов, у которых нет данных вообще.

Сказав это, точный формат и размер индексного дескриптора являются специфичными для файловой системы и могут иметь любое поведение, которое хочет разработчик файловой системы. Для систем Linux / Unix файловая система должна обеспечивать минимальный набор информации в inode, но файловые системы могут хранить больше, чем внутри, как на диске, так и в памяти.

Interesting Posts

Удаление и преобразование зоны Solaris

Что такое core.mountd. ######### файлы? OpenSolaris

Crunchbang как оптимальная ОС?

Установка GNU Make на ChromeOS

Проблема при попытке перекрестного компиляции драйвера Ethernet в старом ядре Linux

Что происходит с метаданными в источнике? Есть ли инструменты для этого?

Скрипт для подсчета файлов, соответствующих шаблону в подкаталогах

Как передать параметр с пространством в nohup?

Создание SBC, работающего как сетевой коммутатор, пожалуйста, помогите

Команда переназначена

Что я могу использовать для мониторинга и регистрации входящего / исходящего трафика на / с удаленных хостов?

Правильный способ добавления пользователей в репозиторий Subversion

Насколько хорош скрежет в качестве замены вспышки?

XMonad MouseResizableTile автоматическое перебалансирование панели

Как мы можем избежать перезагрузки системы после изменения раздела с помощью fdisk?

Linux и Unix - лучшая ОС в мире.