относится к:Что такое суперблок, инод, дентри и файл?
Ни одна из известных структур метаданных не хранит данные о местоположении фактического файла. Dentry сопоставляет имена с inodes, а inodes хранят информацию о файлах — как система узнает, где на диске находятся фактические биты данных файла? Существует ли какое-то стандартное сопоставление целых чисел inode с местоположением на диске?
решение1
Учитывая огромное количество файловых систем, я уверен, что существуют исключения, но традиционно в индексном дескрипторе содержался массив номеров блоков диска.
Например, в /usr/include/linux/ext3_fs.h
я вижу определение struct ext3_inode
.
Внутри struct ext3_inode
я вижу членаi_block[EXT3_N_BLOCKS];/* Pointers to blocks */
Различные файловые системы имели разные способы отслеживания того, какие блоки на диске принадлежат иноду (структуре данных на диске, которая представляет данные файла). Некоторые из них имеют массив номеров блоков, некоторые имеют массив серий или экстентов, счетчик плюс начальный номер блока серии смежных блоков. Инод Berkeley FFS имел массив номеров блоков и массив номеров блоков, каждый из этих блоков содержал номера блоков данных и номер блока, который содержал номера блоков, которые содержали номера блоков данных.
Все становится немного страннее в случае с «файловыми системами со структурой журналов», но это скорее исключение, чем правило.
решение2
Если вы посмотрите исходные коды ядра (или пакет документации ядра, или в Интернете), посмотрите в разделе Документация/файловые системы, там все зависит от файловой системы.
Например, в ext2 номер инода может быть преобразован с использованием информации, хранящейся в суперблоке, в определенное смещение в разделе — одна из причин, по которой ext2 выделяет фиксированное количество инодов во время mkfs — которое затем считывается. Инод содержит много метаданных, включая двенадцать указателей, указывающих, где хранятся фактические данные файла. Если фрагментов больше двенадцати, есть указатель на косвенный блок (который хранит гораздо больше). Косвенные блоки могут быть объединены в цепочку (каждый имеет указатель на следующий косвенный блок).
Суперблок хранится с фиксированным смещением от начала раздела, поэтому его легко найти. (mkfs также создает резервные суперблоки)
Вас может заинтересоватьформат btrfs на диске, у него даже естькартинки, хотя эта документация менее полна, чем документация по ext2.