Что такое суперблок, инод, дентри и файл?


125

Из статьи Анатомия файловой системы Linux М. Тима Джонса я прочитал, что Linux рассматривает все файловые системы с точки зрения общего набора объектов, и это объекты суперблок , inode , dentry и файл . Несмотря на то, что остальная часть параграфа объясняет вышеизложенное, мне не очень понравилось это объяснение.

Может ли кто-нибудь объяснить мне эти термины?

Ответы:


136

Прежде всего, и я понимаю, что это не был один из терминов из вашего вопроса, вы должны понимать метаданные . Вкратце и украденные из Википедии, метаданные - это данные о данных. То есть метаданные содержат информацию о части данных. Например, если я владею автомобилем, у меня есть набор информации об автомобиле, который не является частью самого автомобиля. Информация, такая как регистрационный номер, марка, модель, год выпуска, информация о страховке и так далее. Вся эта информация в совокупности называется метаданными. Как вы увидите, в файловых системах Linux и UNIX метаданные существуют на нескольких уровнях организации.

Суперблок , по существу , метаданные файловой системы и определяет тип файловой системы, размера, состояние, а также информации о других структурах метаданных (метаданные метаданных). Суперблок очень важен для файловой системы и поэтому хранится в нескольких избыточных копиях для каждой файловой системы. Суперблок - это структура метаданных очень высокого уровня для файловой системы. Например, если суперблок раздела / var становится поврежденным, то рассматриваемая файловая система (/ var) не может быть смонтирована операционной системой. Обычно в этом случае вам нужно запуститьfsckкоторый автоматически выберет альтернативную резервную копию суперблока и попытается восстановить файловую систему. Сами резервные копии хранятся в группах блоков, распределенных по файловой системе, причем первые хранятся со смещением в 1 блок от начала раздела. Это важно в случае необходимости ручного восстановления. Вы можете просмотреть информацию о резервном копировании суперблока с помощью команды, dumpe2fs /dev/foo | grep -i superblockкоторая полезна в случае попытки восстановления вручную. Предположим, что команда dumpe2fs выводит строку Backup superblock at 163840, Group descriptors at 163841-163841. Мы можем использовать эту информацию, а также дополнительные знания о структуре файловой системы, чтобы попытаться использовать эту резервную копию суперблока: /sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo. Обратите внимание, что для этого примера я принял размер блока 1024 байта.

Инода существует, или, файловую систему и представляет собой метаданные о файле. Для ясности все объекты в системе Linux или UNIX являются файлами; актуальные файлы, каталоги, устройства и так далее. Обратите внимание, что среди метаданных, содержащихся в inode, нет имени файла, как думают люди, это будет важно позже. Inode содержит по существу информацию о владельце (пользователь, группа), режиме доступа (права на чтение, запись, выполнение) и типе файла.

Dentry это клей , который держит дескрипторы и файлы вместе, связывая номер индексных дескрипторов файлов с именами файлов. Dentries также играют роль в кэшировании каталогов, что в идеале позволяет хранить наиболее часто используемые файлы для быстрого доступа. Обход файловой системы является еще одним аспектом dentry, поскольку он поддерживает связь между каталогами и их файлами.

Файл , в дополнение к тому , что люди , как правило , думают о том, когда представлены слова, на самом деле просто блок логически связанных произвольных данных. Сравнительно очень скучно, учитывая всю работу, проделанную (выше), чтобы отслеживать их.

Я полностью понимаю, что несколько предложений не дают полного объяснения какой-либо из этих концепций, поэтому, пожалуйста, не стесняйтесь спрашивать дополнительные детали, когда и где это необходимо.


@Tok: Будет ли он сбрасываться следующим образом (как показано в ответе): Суперблок резервного копирования в 163840, дескрипторы группы в 163841-163841 или это так: Суперблок резервного копирования в 163840, дескрипторы группы в 163841-163842? Это была ошибка опечатки? :-)
Сен

@TOK: резервный суперблок в 163840, дескрипторы групп в 163841-163842, какую информацию передает дескрипторы групп?
Сен

@Sen - теоретически групповые дескрипторы могут занимать несколько блоков, но для большинства настольных систем вы увидите, что они занимают только один блок и называются $ ((BackupBlock + 1)) - $ ((BackupBlock + 1))
Tok

@TOK: нормально в моей системе я вижу это как $ ((BackupBlock + 1)) - $ ((BackupBlock + 2))
Сен

@Sen - дескриптор группы описывает группу блоков. Что это обозначает? Больше метаданных. По существу, дескриптор группы содержит битовую карту блоков (номер блока битовой карты выделения блоков), битовую карту инода (такую ​​же, но для инодов), таблицу инодов (номер блока начального блока для таблицы инодов), количество свободных блоков и количество инодов, и количество использованных каталогов. Все это основано на файловой системе ext2. Дескрипторы групп очень важны для правильной работы файловой системы и дублируются вместе с суперблоком.
Ток

49

файл

Файл просто означает группу байтов, расположенных в определенном порядке. Это то, что нормальные люди называют содержимым файла. Когда Linux открывает файл, он также создает объект file, который содержит данные о том, где хранится файл и какие процессы его используют. Файловый объект (но не сами данные файла) выбрасывается при закрытии файла.

Inode

Inode (сокращение от «индексный узел») - это набор атрибутов файла, который хранит Linux. Для каждого файла существует один индекс (хотя в некоторых файловых системах Linux вынужден создавать собственные индексы, поскольку информация распространяется по файловой системе). Inode хранит информацию о том, кто владеет файлом, его размер и кому разрешено открывать файл. Каждый индекс также содержит уникальный номер раздела файловой системы; это как серийный номер файла, описанного этим индексом.

Dentry

Дентри (сокращение от «запись каталога») - это то, что ядро ​​Linux использует для отслеживания иерархии файлов в каталогах. Каждый dentry сопоставляет номер индекса с именем файла и родительским каталогом.

Суперблок

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


11

Суперблок , индексный узел (или inode ), запись каталога (или dentry ) и, наконец, файловый объект являются частью виртуальной файловой системы (VFS) или виртуальной файловой системы . Цель VFS - предоставить клиентским приложениям доступ к различным типам конкретных файловых систем единообразным способом.

Отношения главных объектов в VFS

введите описание изображения здесь


Дескриптор представляет собой структуру данных в файловой системе Unix / Linux. Inode хранит метаданные о обычном файле, каталоге или другом объекте файловой системы. Inode действует как интерфейс между файлами и данными. Индод может ссылаться на файл или каталог или символическую ссылку на другой объект. Он содержит уникальный номер (i-номер), атрибуты файла, включая имя, дату, размер и разрешения на чтение / запись, а также указатель на местоположение файла. Это аналог таблицы FAT в мире DOS / Windows.

Программы, сервисы, тексты, изображения и т. Д. Являются файлами . Устройства ввода и вывода и, как правило, все устройства считаются файлами в соответствии с системой.

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

Dentry - это интерфейс между файлами и Inodes. Dentries также играют роль в кэшировании каталогов, что в идеале позволяет хранить наиболее часто используемые файлы для быстрого доступа.

Источник


5

В простоте dentry и inode - это одно и то же, абстракция файла или каталога. Различия между dentry и inode заключаются в том, что dentry используется для облегчения операций, специфичных для каталога, inode - это просто набор метаданных о файле или каталоге. Суперблок - это абстракция файловой системы.

struct fileв ядре linux ошибочно именуется многими другими (например struct address_space) и не является абстракцией реального «файла» (например, / etc / passwd). Он обозначает открытый «файл» или каталог. struct fileсоздается sys_openв ядре, поэтому процесс может иметь много struct files для одного и того же файла.

Зачем нам нужен Дентри? Он используется для ускорения перевода из пути (например, / etc / passwd) в inode. Ядро Linux использует inode для манипулирования «файлом» или каталогом, а не их именем.


4

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


Надеюсь, вы прочтете этот комментарий через столько времени. Я читал, что в VFS есть иноды и суперблоки, которые не связаны с инодами и суперблоками, скажем, EXT2. Итак, просто чтобы не понять, что вы сказали, в силу того, что в каждом Linux есть VFS, все они должны использовать inode и суперблок, верно?
CuriousKimchi

1
@CuriousKimchi Несмотря на то, что они имеют здесь одно и то же имя, не следует путать информацию, хранящуюся на диске (суперблок / inodes) и структуры, используемые ядром для доступа к файловой системе и ее файлам. Каждая файловая система имеет некоторые метаданные на диске, которые описывают характеристики файловой системы, эти метаданные используются для заполнения структуры суперблока Linux VFS. Точно так же файлы имеют структуру inode ядра в VFS. Когда в базовых файловых системах отсутствует понятие inode, эта структура содержит поддельный номер inode, создаваемый операционной системой на лету.
Jlliagre
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.