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

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

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

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

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


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

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

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

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

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

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

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

  • Как ограничить общий размер всех установленных tmpfs?
  • Какова связь индексов, LBA, логических томов, блоков и секторов?
  • Как узнать, что использует файловая система FUSE?
  • Сколько контроля над конкретными файловыми системами над кешем inode VFS и кешем буфера?
  • как читать и писать в файловую систему в Linux?
  • Увеличение размера VDI, не отражающее
  • Какой пакет необходимо установить для команды getacl?
  • Не существует ли интерфейса ядра Linux для получения даты создания файла?
  • btrfs error unknown - root fs не будет монтировать
  • Могу ли я безопасно запускать badblocks в режиме только для чтения на смонтированном диске?
  • Как Linux отслеживает файловые системы?
  • Interesting Posts

    Серийный разделитель после использования AWK

    Как получить доступ к физической памяти из пользовательского пространства?

    Передать только обновленные части файла

    Разделите буфер обмена между bash и X11

    Имя процесса «замаскировано» / usr / bin / python и / bin / su

    Включите параллельный порт и используйте его для последовательной связи (RS-232)

    Как изменить информацию о камере в Exif с помощью командной строки

    Устанавливается ImageMagick7-7.0.1.5 на FreeBSD 10.3, но после установки команды `import` нет

    Как / где переменные среды хранения оболочки хранятся?

    Как запретить файловому файлу Matlab делать какие-либо изменения в файловой системе?

    «Не обычный файл» при попытке просмотреть файл .gitignore

    LibreOffice имеет странный интерфейс градиента

    потерянный каталог не может найти его с testdisk

    Настроить SELinux, чтобы позволить демонам использовать файлы в нестандартных местоположениях

    Почему порядок, в котором выполняются клавиши ярлыков, важны?

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