12

Сколько места занимают пустые каталоги?

В файловой системе Windows и NTFS говорится «0 байтов», что невозможно.

Сколько действительно занято каталогом? Это зависит от файловой системы или операционной системы?

3 ответа3

13

Технически окно свойств показывает содержимое папки, которое, если оно пустое, занимает 0 байт на любом диске.

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

Пространство, которое занимает пустая структура каталогов, зависит от имени и пути к папке. В качестве примера предположим, что вы помещаете все папки на корневой диск (скажем, C:) и используете все 26 буквенных символов; с 1 миллиардом уникальных имен вы можете иметь log_26 (1.000.000.000) = приблизительно 7 (6.3065) имен папок длиной. Таким образом, 7 байтов * 1.000.000.000 соответствуют примерно 7 ГБ пространства.

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

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


Наиболее используемые файловые системы в настоящее время можно рассматривать (возможно) как FAT (таблица размещения файлов) и NTFS (файловая система новой технологии). FAT, как мы знаем, используется с 1996 года, когда Windows 95 была выпущена с FAT32. Несмотря на то, что он заменен другими, более устойчивыми файловыми системами, такими как NFTS (Windows), HFS+ (OSX) или ext3 (Linux), он все еще широко используется в портативных устройствах, картах памяти или флэш-накопителях, поскольку он хорошо поддерживается большинством ОС. и прежде всего это просто.

Теперь о том, что имеет значение. Файлы и каталоги в разделе FAT, даже если в них ничего нет, имеют имя, местоположение, определенные атрибуты и т.д., Которые хранятся в зоне, называемой таблицей каталогов.

Таблица каталогов представляет собой специальный файл (то есть он скрыт от регулярного использования, так что только ОС и некоторые приложения могут иметь к нему прямой доступ). Он представляет каталог (он же папка), и любой файл или папка, хранящиеся в нем, имеют 32-байтовую запись в таблице. Поскольку таблица каталогов представляет собой файл, она затем занимает один или несколько кластеров (т. Е. Ящики с предварительно заданным размером на диске, в который помещается только один файл (или его часть)).

Таким образом, любая папка или каталог на современном диске (> 512 МБ) имеет как минимум 4 КБ для хранения таблицы (источника). Однако это означает, что вы можете хранить 128 разных файлов (4 * 1024 B / 32 B = 128) в одной и той же папке, а накладные расходы на хранение записей по-прежнему равны 4 КБ, как и раньше.

В первом примере это будет означать, что миллиард папок будет иметь дополнительную нагрузку 32 ГБ, а не примерно 7 ГБ, которые я рассчитал. Эти 32 ГБ хранят не только краткое имя (8 символов ASCII), но и атрибуты, флаги, даты доступа, создания и изменения и другие устаревшие атрибуты.

Предполагая, что вы прочитали все это, у вас может возникнуть вопрос: «Ну, это все хорошо, но как хранятся длинные имена, такие как Wabbajack, или даже хеш-имена, такие как e4d909c290d0fb1ca068ffaddf22cbd0 ?"

Microsoft в Windows 95 решила добавить эту функцию, чтобы улучшить пользовательский опыт. Чтобы избежать взлома «почти стандартной» системы, они использовали аккуратный обходной путь под названием VFAT (Virtual FAT). По сути, для того, чтобы вставить длинное имя файла в файл, дополнительные записи были записаны перед фактической записью файла (с некоторыми специальными атрибутами, которые не были видны в более ранних системах). Система длинных имен файлов допускает максимальную длину 255 символов UTF-16 (Unicode) (источник) (источник).

Если бы вы изменили первый пример так, чтобы в каждой папке было по 9 символов, накладные расходы удвоились бы с 32 ГБ до 64 ГБ, поскольку для сохранения длинного имени потребовалась бы еще одна запись.


Согласно статье в Википедии о NTFS, все разрешения хранятся в главной таблице файлов. Это пространство можно увидеть, видимо, через дефрагментатор диска, как показано здесь.

Размер записи MFT из папки или файла описан здесь:

Записи файлов и папок имеют размер 1 КБ каждая и хранятся в MFT, атрибуты которого записываются в выделенное пространство в MFT. Помимо атрибутов файла каждая запись файла содержит информацию о положении записи файла в MFT.

Когда атрибуты файла могут помещаться в записи файла MFT для этого файла, они называются резидентными атрибутами. Такие атрибуты, как имя файла и отметка времени, всегда являются резидентными. Когда объем информации для файла не помещается в его записи файла MFT, некоторые атрибуты файла становятся нерезидентными. Нерезидентным атрибутам выделяется один или несколько кластеров дискового пространства. Часть нерезидентного атрибута остается в MFT и указывает на внешние кластеры. NTFS создает атрибут списка атрибутов для описания расположения всех записей атрибутов. В таблице «Типы атрибутов файлов NTFS» перечислены атрибуты файлов, определенные в настоящее время NTFS.

Таким образом, в NTFS папки занимают не менее 1 КБ пространства, если они не имеют очень длинных списков аргументов и разрешений; в этот момент запись MFT занимает дополнительный кластер в разделе, размер которого зависит от того, как он был отформатирован, хотя для более чем 2 ГБ Microsoft в этом посте рекомендует кластеры размером 4 КБ.

2

Для примера из реального мира я просто записал свое свободное пространство, затем создал большую структуру каталогов и вычел новое свободное пространство, чтобы выяснить, сколько места было использовано. Я создал каталоги 0-6 для каждого дня недели, затем внутри каталогов 0-23 для часов дня, затем 0-59 для минут часа. Всего его 10 080 каталогов. Использование моего диска изменилось на 6 926 336 байт. Это работает до 687 байт на каталог. Если вам не безразлично, это также работает с 0,0006% от 1 ТБ диска (если вы рассчитываете 1 ТБ как 1024 ^ 4).

0

В Windows 10 я создал 1 000 000 пустых папок и, согласно функции getsize в python, занял 200540160 байт. Это в среднем 200,54016 байт на папку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .