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

<p>из статьи <a href="http://web.archive.org/web/20150505112327/http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/">анатомия файловой системы linux</a> м. тим джонса я прочитал, что linux рассматривает все файловые системы с точки зрения общего набора объектов, и эти объекты <strong> <em> суперблок</em> </strong>, <strong> <em> индекс</em> </strong>, <strong> <em> dentry</em> </strong> и <strong> <em> file</em> </strong>. несмотря на то, что остальная часть параграфа объясняет вышеизложенное, мне не очень понравилось это объяснение.</p><p>может ли кто-нибудь объяснить мне эти термины?</p>

<p>прежде всего, и я понимаю, что это не был один из терминов из вашего вопроса, вы должны понимать <em> метаданные </em>. вкратце и украденные из википедии, метаданные - это данные о данных. то есть метаданные содержат информацию о части данных. например, если я владею автомобилем, у меня есть набор информации об автомобиле, который не является частью самого автомобиля. информация, такая как регистрационный номер, марка, модель, год выпуска, информация о страховке и так далее. вся эта информация в совокупности называется метаданными. как вы увидите, в файловых системах linux и unix метаданные существуют на нескольких уровнях организации.</p><p>--- <strong>суперблок</strong> по сути является метаданными файловой системы и определяет тип файловой системы, размер, состояние и информацию о других структурах метаданных (метаданные метаданных). суперблок очень важен для файловой системы и поэтому хранится в нескольких избыточных копиях для каждой файловой системы. суперблок - это структура метаданных очень высокого уровня для файловой системы. например, если суперблок раздела/var становится поврежденным, то рассматриваемая файловая система (/ var) не может быть смонтирована операционной системой. обычно в этом случае вам нужно запустить <code>fsck</code>, который автоматически выберет альтернативную резервную копию суперблока и попытается восстановить файловую систему. сами резервные копии хранятся в группах блоков, распределенных по файловой системе, причем первые хранятся со смещением в 1 блок от начала раздела. это важно в случае необходимости ручного восстановления. вы можете просмотреть информацию о резервных копиях суперблока ext2/ext3/ext4 с помощью команды <code>dumpe2fs /dev/foo | grep -i superblock</code>, что полезно в случае попытки восстановления вручную. предположим, что команда dumpe2fs выводит строку <code>backup superblock at 163840, group descriptors at 163841-163841</code>. мы можем использовать эту информацию и дополнительные знания о структуре файловой системы, чтобы попытаться использовать эту резервную копию суперблока: <code>/sbin/fsck.ext3 -b 163840 -b 1024 /dev/foo</code>. обратите внимание, что для этого примера я принял размер блока 1024 байта.</p><p><strong>inode</strong> существует в или в файловой системе и представляет метаданные о файле. для ясности все объекты в системе linux или unix являются файлами; актуальные файлы, каталоги, устройства и так далее. обратите внимание, что среди метаданных, содержащихся в inode, нет имени файла, как думают люди, это будет важно позже. inode содержит по существу информацию о владельце (пользователь, группа), режиме доступа (права на чтение, запись, выполнение) и типе файла.</p><p>a <strong>dentry</strong> - это клей, который объединяет иноды и файлы, связывая номера инодов с именами файлов. dentries также играют роль в кэшировании каталогов, что в идеале позволяет хранить наиболее часто используемые файлы для быстрого доступа. обход файловой системы является еще одним аспектом dentry, поскольку он поддерживает связь между каталогами и их файлами.</p><p>a <strong>file</strong>, в дополнение к тому, о чем обычно думают люди, когда они представлены с word, на самом деле является просто блоком логически связанных произвольных данных. сравнительно очень скучно, учитывая всю работу, проделанную (выше), чтобы отслеживать их.</p><p>я полностью понимаю, что несколько предложений не дают полного объяснения какой-либо из этих концепций, поэтому, пожалуйста, не стесняйтесь спрашивать дополнительные детали, когда и где это необходимо.</p>

<p><strong>file</strong></p><p>файл просто означает группу байтов, расположенных в определенном порядке. это то, что нормальные люди называют содержимым файла. когда linux открывает файл, он также создает файловый объект, который содержит данные о том, где хранится файл и какие процессы его используют. объект файла (но не сами данные файла) выбрасывается при закрытии файла.</p><p><strong>дескриптор</strong></p><p>inode (сокращение от "индексный узел") - это набор атрибутов файла, который хранит linux. для каждого файла существует один индекс (хотя в некоторых файловых системах linux вынужден создавать собственные индексы, поскольку информация распространяется по файловой системе). inode хранит информацию о том, кто владеет файлом, его размер и кому разрешено открывать файл. каждый индекс также содержит номер, уникальный для раздела файловой системы; это как серийный номер файла, описанного этим индексом.</p><p><strong>dentry</strong></p><p>дентри (сокращение от "запись каталога") - это то, что ядро linux использует для отслеживания иерархии файлов в каталогах. каждый dentry сопоставляет номер индекса с именем файла и родительским каталогом.</p><p><strong>суперблок</strong></p><p>суперблок - это уникальная структура данных в файловой системе (хотя существует несколько копий для защиты от повреждения). суперблок содержит метаданные о файловой системе, например, какой inode является каталогом верхнего уровня и типом используемой файловой системы.</p>

<p><strong> суперблок </strong>, индексный узел (или <strong> индекс </strong>), запись каталога ( или <strong> dentry </strong>) и, наконец, объект <strong> файла </strong> является частью <strong> виртуальная файловая система (vfs) или переключатель виртуальной файловой системы </strong>. цель vfs - предоставить клиентским приложениям доступ к различным типам конкретных файловых систем единообразным способом.</p><p><strong> отношения основных объектов в vfs </strong></p><p> <a href="https://i.stack.imgur.com/dahcz.gif"><img src="https://i.stack.imgur.com/dahcz.gif" alt="enter image description here"></a> </p><hr><p><strong> inode </strong> - это структура данных в файловой системе unix/linux. inode хранит метаданные о обычном файле, каталоге или другом объекте файловой системы. inode действует как интерфейс между файлами и данными. индод может ссылаться на файл или каталог или символическую ссылку на другой объект. он содержит уникальный номер (i-номер), атрибуты файла, включая имя, дату, размер и разрешения на чтение/запись, а также указатель на местоположение файла. это аналог таблицы fat в мире dos/windows.</p><p>программы, сервисы, тексты, изображения и т.д. - это все <strong> файлы </strong>. устройства ввода и вывода, и, как правило, все устройства, считаются <strong> файлами </strong>, в соответствии с системой.</p><p>суперблок <strong> </strong> - это контейнер для метаданных высокого уровня о файловой системе. суперблок - это структура, которая существует на диске (фактически, в нескольких местах на диске для резервирования), а также в памяти. он обеспечивает основу для работы с файловой системой на диске, так как определяет параметры управления файловой системой (например, общее количество блоков, свободных блоков, корневой индексный узел).</p><p>dentry - это интерфейс между файлами и inodes. dentries также играют роль в кэшировании каталогов, что в идеале позволяет хранить наиболее часто используемые файлы для быстрого доступа.</p><p> <a href="http://www.ibm.com/developerworks/library/l-virtual-filesystem-switch/">источник</a> </p>

<p>в простоте dentry и inode - это одно и то же, абстракция файла или каталога. различия между dentry и inode заключаются в том, что dentry используется для облегчения операций, специфичных для каталога, inode - это просто набор метаданных о файле или каталоге. суперблок - это абстракция файловой системы.</p><p><code>struct file</code>, в ядре linux, ошибочно назван многими другими (например, <code>struct address\_space</code>) и не является абстракцией реального "файла" (например,/etc/passwd). он обозначает открытый "файл" или каталог. <code>struct file</code> создан <code>sys\_open</code> в ядре, поэтому процесс может иметь много <code>struct file</code>s для того же файла.</p><p>зачем нам нужен дентри? он используется для ускорения перевода из имени пути (например,/etc/passwd) в inode. ядро linux использует inode для манипулирования "файлом" или каталогом, а не их именем.</p>

<p>обратите внимание, что эти термины относятся не к linux, а к файловой системе. большинство файловых систем, используемых в современных unix и unix-подобных системах, являются производными или основаны на оригинальной файловой системе unix, которая определила идиомы суперблока и inode. linux также может монтировать несколько файловых систем, в которых нет понятия суперблока и/или inode, наиболее распространенным из которых является fat. другой, zfs, не использует суперблоки, а überblocks.</p>