Где хранятся записи в каталоге файлов для подкаталогов?

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

Я понимаю, что в большинстве файловых систем есть корневой каталог, содержащий записи в каталоге файлов. Эти записи содержат сопоставление от имени файла до номера inode и имеют размер переменной по длине.

Согласно этому ответу , я думаю, что эти записи хранятся линейно, как показано ниже:

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


Однако, мой вопрос: как и где хранятся записи каталога файлов подкаталога?

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

Следовательно, я чувствую, что записи в каталоге подкаталогов фактически хранятся в области данных на диске, а не в записи корневого каталога.

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

Тем не менее, я хотел бы просто прояснить свои заблуждения относительно расположения записей в каталоге каталога в подкаталоге.

Большая помощь приветствуется.

  • CIFS против SAMBA, каковы различия
  • setfacl удалить все права на запись
  • lsof пропускает файлы
  • Как передать файлы на сервер SunOS через sftp с помощью FileZilla?
  • Требуется разрешение для клиента Windows для доступа к Linux NFS
  • Сделать образ файловой системы ubi из каталогов
  • Выбор файловой системы для рейдового рейда 16 ТБ
  • mkdosfs для форматирования SD-карты Dashcam FAT32 с размером кластера 32kb
  • 2 Solutions collect form web for “Где хранятся записи в каталоге файлов для подкаталогов?”

    Каталоги обычно реализуются как файлы. У них есть inode и область данных, но, конечно, к ним обычно обращаются (по крайней мере, записываются) с помощью специальных системных вызовов. Некоторые системы позволяют читать каталоги с обычным системным вызовом read(2) (Linux не работает, FreeBSD сделал, когда я последний раз проверял). Затем область данных каталога-файла содержит записи в каталоге. В ext4 корневой каталог также имеет индексный дескриптор, он исправлен для числа inode номер 2 (попробуйте ls -lid / ).

    Наличие каталога как файла облегчает выделение пространства для записей каталога и т. Д., Поскольку функции выделения блоков для файлов всегда должны быть там. Кроме того, поскольку они используют блоки данных sama по мере необходимости, нет необходимости заранее выделять пространство между данными файла и списками каталогов.

    Внутренности того, как хранятся записи в каталогах, различаются между файловыми системами и, например, развиваются между ext2 и ext4 . Современные системы используют деревья вместо линейных списков для более быстрого поиска. См. Здесь . Даже почтенная файловая система FAT хранит каталоги в виде файлов, но, по крайней мере, в старых FAT, корневой каталог является особым. (Структура записей в каталоге FAT, конечно, отличается от файловых систем unix).

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

    Ага. Но часто используемые записи каталога (или базовые блоки данных), скорее всего, будут кэшироваться в современных операционных системах.

    Сохранение содержимого всех каталогов централизованно потребует предварительного выделения большой площади и по-прежнему потребует обращения к диску в области данных каталога.

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

    (В действительно старых учебниках, как и в оригинальной Unix, вам даже скажут, что вы также можете cat каталоги. Это, как правило, уже не так.)

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

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