
Я запустил это на своем экземпляре CentOS 7.3.
[user01@ ~]$ rm -rf my-very-own-directory/
[user01@ ~]$ mkdir my-very-own-directory/
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 6 Blocks: 0 IO Block: 4096 directory
[user01@ ~]$ mkdir my-very-own-directory/00
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 16 Blocks: 0 IO Block: 4096 directory
[user01@ ~]$ date > my-very-own-directory/date.txt
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 32 Blocks: 0 IO Block: 4096 directory
[user01@ ~]$ echo "content" > my-very-own-directory/content
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 47 Blocks: 0 IO Block: 4096 directory
- Первоначальное создание => размер = 6
- Добавьте запись с длиной имени 2 байта => размер 16 (6 + 8 + 2)
- Добавьте еще одну запись с длиной имени 4 байта => размер 32 (16 + 8 + 8)
- Добавьте еще одну запись с длиной имени 7 байт => размер 47 (32 + 8 + 7)
2 вопроса:
- Созданный каталог имеет размер 6. Почему?
- Каждая новая запись в каталог, будь то файл подкаталога, будет увеличивать размер 'my-very-own-directory'. Вопрос в том, что размер увеличивается на 8 + (длина имени файла / имени каталога). Почему 8?
решение1
Формат каталога полностью зависит от файловой системы.
Как минимум, запись каталога должна содержать имя файла и номер инода.
Чтобы использоватьext4
Файловая система Linux(и более старые версии) в качестве примера, исходная запись каталога имела номер inode (4 байта), длину имени файла (2 байта) и общую длину записи (2 байта), а также само имя файла. (IIRC общая длина указана явно, чтобы обеспечить возможность заполнения и т. п.)
Текущие версии (начиная с ext3
) также поддерживают древовидное хранилище, что позволяет быстрее находить каталоги с большим количеством файлов, но, конечно, имеет более сложный формат.
Хотя на ext4
, размер каталога отображается только как кратное размеру блока, т.е. пустой каталог имеет размер 4096
и не увеличивается до тех пор, пока не будет создано достаточно файлов, чтобы потребовалось выделение для него нового блока данных.
RHEL 7 использует XFS в качестве файловой системы по умолчанию, так что, возможно, вы используете именно ее.XFS имеет ряд форматов каталогов, а краткая форма, используемая для небольших каталогов, по сути имеет тот же минимальный набор: номер inode + имя файла + длина имени файла + общая длина.