Intereting Posts
`Unhandled Exception: System.ArgumentNullException: значение не может быть ошибкой null.` при запуске` dotnet run` с использованием сценария запуска Использование команды sed для соответствия текста в определенном блоке текста Редактирование bash $ PATH Свободное пространство в размонтированном разделе Можно ли приостановить задания, отправленные через qsub? Как mv и принимать разрешения целевого каталога Как я могу сохранить привязки клавиш режима по умолчанию в новом режиме? Неполадка irssi Разбиение страницы в tmux Как я могу экспортировать переменную без потери ее стоимости? Как мне установить TexLive 2017 на моем Devuan Ascii / Debian Stretch? Потребление памяти Fail2Ban CentOS Колонки заказов в файле CSV Linux – производительность рендеринга после переключения с драйверов nvidia на nouveau Разбор файла в соответствии с парой идентификаторов и более высокими значениями ниже Настройки сети, Монетный двор Linux, Невозможно установить «использовать это соединение только для ресурса в своей сети»

Как рассчитывается размер каталога?

Я запускал это на моем экземпляре 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 
  • Начальное создание => size = 6
  • Добавьте запись с 2 байтами в имени length => size is 16 (6 + 8 + 2)
  • Добавьте еще одну запись с 4 байтами в длину имени => размер 32 (16 + 8 + 8)
  • Добавьте еще одну запись с 7 байтами в длину имени => размер 47 (32 + 8 + 7)

2 Вопросы:

  1. Созданный каталог имеет размер 6. Почему?
  2. Каждая новая запись в каталог, будь то файл подкаталога, добавит размер «my-very-own-directory». Вопрос в том, что размер увеличивается на 8 + (длина имени файла / каталога). Почему 8?

Формат каталога полностью зависит от файловой системы.

По крайней мере, запись в каталоге должна содержать имя файла и номер inode.

Например, для использования файловой системы Linux ext4 (и более старых версий) исходная запись в каталоге имела номер inode (4 байта), длину имени файла (2 байта) и общую длину записи (2 байта) плюс само имя файла , (IIRC общая длина указывается явно, чтобы разрешить заполнение и тому подобное).

Текущие версии (от ext3 ) также поддерживают древовидное хранилище, что позволяет быстрее искать каталоги с большим количеством файлов, но, конечно, имеет более сложный формат.

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

RHEL 7 использует XFS в качестве файловой системы по умолчанию, так что это может быть то, что вы используете. XFS имеет несколько форматов каталогов , а краткая форма, используемая для небольших каталогов, имеет по существу тот же минимальный набор номера inode + имя файла + длина имени файла + общая длина.