Рейтинг:0

В чем разница между этими функциями ext4: dir_nlink и large_dir

флаг sl

С man-страницы ext4(5):

dir_nссылка
Обычно ext4 позволяет индексному узлу иметь не более 65 000 жестких ссылок. Это относится как к обычным файлам, так и к каталогам, что означает, что в каталоге может быть не более 64 998 подкаталогов (поскольку каждая из записей '.' и '..', а также запись каталога для каталог в его родительском каталоге считается жесткой ссылкой). Эта функция снимает это ограничение, заставляя ext4 использовать счетчик ссылок, равный 1, чтобы указать, что количество жестких ссылок на каталог неизвестно, когда количество ссылок может превышать максимальное ограничение.

большой_каталог
Эта функция увеличивает ограничение на количество файлов в каталоге за счет увеличения максимального размера каталогов и для хешированных каталогов b-дерева (см. dir_index), максимальная высота хэшированного B-дерева, используемого для хранения записей каталога.

Хорошо, давайте посмотрим на dir_index тоже.

dir_index
Используйте хешированные b-деревья для ускорения поиска имен в больших каталогах. Эта функция поддерживается файловыми системами ext3 и ext4 и игнорируется файловыми системами ext2.


Согласно моему пониманию на странице руководства:

  1. Когда в каталоге нет элемента, есть 2 жесткие ссылки, а именно . (каталог указывает на себя) и .. (это указывает на родительский каталог, но жесткая ссылка указывает на ссылку из родительского каталога на каталог), а значение st_nlink поле в статистика структура 2. Когда в каталоге есть 1 элемент (скажем, 1 файл), есть 3 жестких ссылки, и st_nlink говорит 3;
  2. Поэтому, чтобы представить фактическое количество жестких ссылок, st_nlink должен быть не менее 2. В результате значение 1 освобождается для представления чего-то еще, вместо того, чтобы иметь только 1 жесткую ссылку, что не имеет смысла;
  3. Если файловая система ext4 отформатирована без dir_nссылка, тогда st_nlink не может быть больше, чем 65000, и система отказывается добавлять больше элементов при достижении лимита (читал про то, что современные ядра могут автоматически включаться dir_nссылка, но опустим это для простоты обсуждения);
  4. Если файловая система ext4 отформатирована с dir_nссылка, то когда их больше 65000 элементы в каталоге, значение 1 будет записано на st_nlink поле для указания «неизвестного количества жестких ссылок». Клиенты (код, использующий файловую систему ext4) должны просмотреть список файлов (блок данных каталога), чтобы подсчитать фактическое количество элементов внутри него;
  5. большой_каталог увеличивает максимальный размер каталогов;
  6. Если dir_index используется, большой_каталог увеличивает максимальную высоту хешированного B-Tree.

Мои вопросы

  1. Если dir_nссылка используется один, каков максимальный размер каталога? Раньше я думал, что он бесконечен, пока есть достаточно блоков данных для хранения списка файлов в каталоге, но теперь кажется, что это не так.
  2. Я думаю, используя большой_каталог в одиночку не имеет смысла, так как размер каталога по-прежнему ограничен 65000. Я прав?
  3. Если большой_каталог используется, каков максимальный размер каталога?
  4. Есть ли недостаток при использовании большой_каталог? Причина, по которой у меня возникает этот вопрос, заключается в том, что в Ubuntu 20.04 LTS dir_nссылка устанавливается по умолчанию (см. /etc/mke2fs.conf, он есть в списке на [фс_типы] > доб4 > Особенности), но большой_каталог не является.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.