Как структуры каталогов хранятся в файловой системе UNIX?

8

Я прочитал, что в каждом каталоге хранится их содержимое (файлы и подкаталоги) с использованием списка имен файлов и пар узлов. Но ни одна из ссылок, которые я получил, не говорила о том, как они хранятся.

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

Благодарю за разъяснение.

Ока
источник
Не существует единого способа хранения файлов в Unix. Как и в случае с Windows, нет единого способа хранения файлов. В обоих случаях это зависит от используемой файловой системы. (FAT, NTFS, ext2, UFS, ...)
Hennes
Для файловых систем структура каталогов на диске определена в dirent.h, и вы должны использовать libcalls opendir / readdir / closedir и т. Д. Для доступа к содержимому.
ot--

Ответы:

10

Посмотрите внутреннюю часть файловой системы, которая довольно просто описывает внутреннюю часть типичной файловой системы Unix.

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

Большинство файловых систем Unix содержат

  • Блок загрузки
  • Суперблок (геометрия диска, расположение разделов, число узлов и т. Д.)
  • Блоки Inode
  • Блоки данных

Современные файловые системы содержат дополнительные структуры.

Одна из вещей в суперблоке - это расположение inode для корневого каталога.

Каталог - это специально отформатированный файл. Как и во всех обычных файлах, он имеет блоки данных.

Вы можете увидеть это в Проекте документации Linux: Файловая система

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

Вы можете использовать debugfsдля изучения этих структур.

RedGrittyBrick
источник
2
«Каталог - это специально отформатированный файл. Как и все обычные файлы, он имеет блоки данных». Таким образом, каталоги хранят свои пары имя-файл-индекс (крайняя левая таблица на первом изображении или строка на втором изображении) в своих блоках данных?
Ока
1
@ Ока: Это правильно.
RedGrittyBrick
Итак, чтобы было ясно, каталог является файлом, поэтому он хранится в блоке данных. ext4Например, каждый каталог в файловой системе (который представлен ext4_dir_entry_2длиной 263 байта) в одном блоке 4 КБ может хранить около 15 записей каталога?
campescassiano