Почему размер 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

У экземпляра Debian два ядра после установки драйверов Intel PCIe SSD – один с черным экраном

отправить супер ключ на удаленную сессию Citrix

Ubuntu 14.04.02LTS resolvconf -u создает недопустимую строку «nameserver Google» в файле resolv.conf

CentOS 6 устанавливает libmysqlclient.so.16 и друзей без меня спрашивает

Как удалить "" из каждого столбца

Регулярное выражение с использованием \\ vs с использованием \

Отключить автоматическое отслеживание последовательного порта в Linux (Fedora)

Управление выходными потоками многих подпроцессов с взаимоблокировками

find: отсутствует аргумент `-exec 'в Cygwin

Как установить a .jpg с центром в .pdf (с использованием определенных размеров и границ страницы)?

(ls) не будет показывать точный размер – Weird output

Запуск make для LFS жалуется на [и о недостающем gawk

как сделать непривилегированный скрипт сбросить даже привилегии, которые он имеет в файле

Как установить umask так, чтобы каталоги были `rx` и файлы` “

apt-get purge <packages> работает отлично, aptitude все еще имеет <пакеты>, помеченные как установленные, и переустанавливает их

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