Что определяет размер каталога?

10

Я знаю, что размер самого каталога отличается от размеров файлов в нем.

Я думаю о каталоге как о списке каталогов и файлов внутри, поэтому размер каталога должен быть связан с количеством файлов / каталогов внутри, с минимальным размером 4096 байт из-за ограничения размера блока.

Но в моей системе у меня есть много хорошо заполненных каталогов с 4096 байтами, и некоторые каталоги, которые значительно менее заполнены, около 10 мегабайт. Не могли бы вы объяснить мне, почему это происходит?

Macond
источник
1
Для дальнейшего чтения это довольно информативно: askubuntu.com/a/404716/380067
kos
3
Речь идет не только о количестве записей в каталоге, но и о длине их имен.
kasperd

Ответы:

13

Используемая файловая система, а максимальное количество объектов в этом каталоге в любой момент времени определяет размер. Как только размер, зарезервированный для каталога по умолчанию, исчерпан, для каталога выделяется больше места. Однако, когда количество объектов уменьшается, выделенное пространство не освобождается автоматически. Таким образом, если в какой-то момент каталог содержит 10 миллионов объектов, он останется неизменным, если 9 999 999 из них будут удалены. Это приводит к интересным ситуациям, как в этом посте Unix & Linux .

$ mkdir foo; touch foo/{1..100000}; stat -c %s foo
2179072
$ rm foo/*; stat -c %s foo
2179072

Это не обязательно относится к другим файловым системам. В ext{2,3,4}файловых системах затронуты. NTFS есть, в меньшей степени. tmpfsи btrfs нет. ZFS довольно консервативен, я получил вывод 2для второй statкоманды.

Связанные с:

Мур
источник
Большой! Мне все еще было интересно, как это могло быть.
Кос
XFS не влияет! следует добавить
Эдвард Торвальдс