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

13

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

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

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

ShadowHero
источник
1
Технически окно свойств показывает содержимое папки, которое, если оно пустое, занимает 0 байт на любом диске. Ваш вопрос касается того, какое место структура папок занимает в файловой системе. Это явно зависит от файловой системы. На FAT32 единственное, что вам нужно сохранить, - это некоторые флаги (скрытые, заархивированные), а также имя и путь. В NTFS вам также нужно хранить разрешения и некоторые другие вещи. В общем, это пространство практически ничтожно мало.
Доктор Рейхард
Итак, в NTFS, сколько места занимает пустая папка? например, если я сделаю 1 миллиард каталогов, сколько это места?
ShadowHero
Как я уже сказал, зависит от имени и пути к папке. Предполагая, что вы используете все 26 символов, с 1 миллиардом уникальных имен вы можете иметь имена папок длиной около 7 символов. Таким образом, 7 байтов * 1.000.000.000 соответствуют примерно 7 ГБ пространства. Это минимум, я бы предположил. Я думаю, что у меня есть около 1 миллиона папок на всех моих дисках, так что это значение даже не достигается в реальности. Не забывайте, что это очень грубая оценка.
Доктор Рейхард
Круто, я вижу ... как хранятся разрешения?
ShadowHero
1
@AthomSfere Хм ... это означало бы, что папки не могут хранить бесконечные пользовательские разрешения, если не может быть назначено несколько записей MFT. Постараюсь найти это.
Доктор Рейхард

Ответы:

16

Технически окно свойств показывает содержимое папки, которое, если оно пустое, занимает 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 КБ.

Доктор Рейхард
источник
1
Я нашел некоторую информацию о длине в 1024 байта, которую я упоминал ранее, c-ad.bnl.gov/kinyip/windows/MFT.html Это очень хорошее чтение, и оно может помочь вашему ответу, если вы захотите расширить.
Остин Т Френч
Я хотел бы расширить (чтобы сделать это более полным ответом, не будучи слишком техническим ...), хотя я должен был бы оставить это на завтра. В любом случае, спасибо за этот источник.
Доктор Рейхард
Техническая коррекция: нет 255 предела пути. Скорее, существует ограничение MAX_PATH в 260 символов для стандартных путей, а также есть путь расширенной длины в 32 767 символов (да, более 32 тысяч символов) для истинных путей в кодировке Юникод (с использованием индикатора `\\?`, Либо как простой путь расширенной длины или путь UNC). См. Docs.microsoft.com/en-us/windows/win32/fileio/… для получения дополнительной информации об этом.
Майк 'Pomax' Камерманс
3

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

Энди
источник
3
Можете ли вы добавить файловую систему к своему ответу? Названия каталогов были все короткие?
fixer1234
0

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

Es Kay
источник