С man-страницы ext4(5):
dir_nссылка
Обычно ext4 позволяет индексному узлу иметь не более 65 000 жестких ссылок. Это относится как к обычным файлам, так и к каталогам, что означает, что в каталоге может быть не более 64 998 подкаталогов (поскольку каждая из записей '.' и '..', а также запись каталога для каталог в его родительском каталоге считается жесткой ссылкой). Эта функция снимает это ограничение, заставляя ext4 использовать счетчик ссылок, равный 1, чтобы указать, что количество жестких ссылок на каталог неизвестно, когда количество ссылок может превышать максимальное ограничение.
большой_каталог
Эта функция увеличивает ограничение на количество файлов в каталоге за счет увеличения максимального размера каталогов и для хешированных каталогов b-дерева (см. dir_index), максимальная высота хэшированного B-дерева, используемого для хранения записей каталога.
Хорошо, давайте посмотрим на dir_index
тоже.
dir_index
Используйте хешированные b-деревья для ускорения поиска имен в больших каталогах. Эта функция поддерживается файловыми системами ext3 и ext4 и игнорируется файловыми системами ext2.
Согласно моему пониманию на странице руководства:
- Когда в каталоге нет элемента, есть 2 жесткие ссылки, а именно
.
(каталог указывает на себя) и ..
(это указывает на родительский каталог, но жесткая ссылка указывает на ссылку из родительского каталога на каталог), а значение st_nlink
поле в статистика
структура 2
. Когда в каталоге есть 1 элемент (скажем, 1 файл), есть 3 жестких ссылки, и st_nlink
говорит 3
;
- Поэтому, чтобы представить фактическое количество жестких ссылок,
st_nlink
должен быть не менее 2
. В результате значение 1
освобождается для представления чего-то еще, вместо того, чтобы иметь только 1 жесткую ссылку, что не имеет смысла;
- Если файловая система ext4 отформатирована без
dir_nссылка
, тогда st_nlink
не может быть больше, чем 65000
, и система отказывается добавлять больше элементов при достижении лимита (читал про то, что современные ядра могут автоматически включаться dir_nссылка
, но опустим это для простоты обсуждения);
- Если файловая система ext4 отформатирована с
dir_nссылка
, то когда их больше 65000
элементы в каталоге, значение 1
будет записано на st_nlink
поле для указания «неизвестного количества жестких ссылок». Клиенты (код, использующий файловую систему ext4) должны просмотреть список файлов (блок данных каталога), чтобы подсчитать фактическое количество элементов внутри него;
большой_каталог
увеличивает максимальный размер каталогов;
- Если
dir_index
используется, большой_каталог
увеличивает максимальную высоту хешированного B-Tree.
Мои вопросы
- Если
dir_nссылка
используется один, каков максимальный размер каталога? Раньше я думал, что он бесконечен, пока есть достаточно блоков данных для хранения списка файлов в каталоге, но теперь кажется, что это не так.
- Я думаю, используя
большой_каталог
в одиночку не имеет смысла, так как размер каталога по-прежнему ограничен 65000
. Я прав?
- Если
большой_каталог
используется, каков максимальный размер каталога?
- Есть ли недостаток при использовании
большой_каталог
? Причина, по которой у меня возникает этот вопрос, заключается в том, что в Ubuntu 20.04 LTS dir_nссылка
устанавливается по умолчанию (см. /etc/mke2fs.conf
, он есть в списке на [фс_типы]
> доб4
> Особенности
), но большой_каталог
не является.