Сколько места занимают пустые каталоги?
В файловой системе Windows и NTFS говорится «0 байт», что невозможно.
Сколько действительно занято каталогом? Это зависит от файловой системы или операционной системы?
filesystems
disk-space
ShadowHero
источник
источник
Ответы:
Технически окно свойств показывает содержимое папки, которое, если оно пустое, занимает 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 из папки или файла описан здесь :
Таким образом, в NTFS папки занимают не менее 1 КБ пространства, если они не имеют очень длинных списков аргументов и разрешений; в этот момент запись MFT занимает дополнительный кластер в разделе, размер которого зависит от того, как он был отформатирован, хотя для более чем 2 ГБ Microsoft в этом посте рекомендует кластеры размером 4 КБ.
источник
Для примера из реального мира я просто записал свое свободное пространство, затем создал большую структуру каталогов и вычел новое свободное пространство, чтобы выяснить, сколько места было использовано. Я создал каталоги 0-6 для каждого дня недели, затем внутри каталогов 0-23 для часов дня, затем 0-59 для минут часа. Всего его 10 080 каталогов. Использование моего диска изменилось на 6 926 336 байт. Это работает до 687 байт на каталог. Если вам не безразлично, это также сработает до 0,0006% от 1 ТБ диска (если вы рассчитываете 1 ТБ как 1024 ^ 4).
источник
В Windows 10 я создал 1 000 000 пустых папок, и, согласно
getsize
функции python , он занял 2005 40160 байт. Это в среднем 200,54016 байт на папку.источник