Я либо сбит с толку относительно того, как Windows вычисляет значение Size on disk в свойствах папки, либо он неверен.

Размер кластера на моем диске составляет 4096 байт.

Я создал папку под названием size-on-disk-test в которой у меня есть 64 прямые подпапки и 362 496 файлов. Каждый файл представляет собой текстовый файл размером 3 байта, просто содержащий текст: aaa .

Поскольку теоретически каждый файл должен занимать один кластер размером 4096 байт, я должен ожидать, что размер файла на диске будет читать:

number-of-files * cluster-size362,496 * 4096 = 1,484,783,616 783 616 (1,4 ГБ).

Вместо этого это читает: 0:

размер на свойствах диска

Size , как и ожидалось, составляет ровно 3 байта, умноженных на количество файлов.

Затем я отметил свободное место на диске на корневом уровне и продублировал папку (это не диск с какими-либо действиями или установленными программами, поэтому на него не должны влиять другие операции кэширования и т.д. На диске во время теста. ).

В соответствии с проверкой на корневом уровне (т. Е. Нажатием кнопки «Свойства» на диске в This PC) после дублирования папки мое свободное место сократилось на 589 352 960 байт.

Так, что происходит? Почему Windows сообщает 0 байтов для размера на диске? Почему мои расчеты дико отличаются от реальности?

Кроме того, имеет ли значение длина имени файла? Разве это не должно учитываться при точном расчете? Возможно, длина имени файла помещает файл размером 4095 байт в два кластера на диске кластера 4096? И наверняка папки занимают какое-то место?

Это много вопросов для одного "вопроса", но я надеюсь, что кто-то может просто объяснить мне, как занимает место, включая имена файлов, папок и кластеров.

2 ответа2

2

Размер на диске в лучшем случае является лишь приблизительным, это особенно верно при работе со сложной файловой системой, такой как NTFS. Есть много факторов, которые делают это намного сложнее, чем могло бы показаться на первый взгляд. Вот лишь некоторые из этих факторов:

  • Очки повторной обработки
  • Сжатые файлы
  • Жесткие ссылки
  • Разреженные файлы
  • Альтернативные потоки данных
  • Накладные расходы на файлы и папки

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

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

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

См. Эту статью для получения дополнительной информации:https://blogs.msdn.microsoft.com/oldnewthing/20041228-00/?p=36863/

1

И наверняка папки занимают какое-то место?

Да, очевидно, информация о каждом файле и папке должна храниться где-то. В NTFS он в основном хранится в MFT. Они называются метаданными и не учитываются в размере файла. Однако в NTFS очень маленькие файлы также могут храниться непосредственно в записях MFT и не будут занимать дополнительное место. Они называются резидентными файлами

Размер ваших файлов составляет всего 3 байта, поэтому почти наверняка они все умещаются в MFT, поэтому размер на диске будет равен 0

Кроме того, имеет ли значение длина имени файла? Разве это не должно учитываться при точном расчете? Возможно, длина имени файла помещает файл размером 4095 байт в два кластера на диске кластера 4096?

Действительно, длина имени файла может иметь значение, наряду с любыми другими метаданными. Например, файлы с несколькими потоками, сложными разрешениями или несколькими жесткими ссылками будут иметь меньше места для резидентного контента. Размер файлов, которые могут быть сохранены в MFT, зависит от того, что было сохранено в записи. Чем больше данных используется для метаданных в MFT, тем меньше остается для файла.

Файлы размером менее 900 байтов хранятся в записи каталога на MFT

https://en.wikipedia.org/wiki/NTFS#File_compression

На рисунке Запись MFT с резидентной записью показано содержимое записи MFT для небольшого файла или папки. Небольшие файлы и папки (обычно 900 байтов или меньше) целиком содержатся в записи MFT файла.

https://technet.microsoft.com/en-us/library/cc781134(WS.10).aspx

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

дальнейшее чтение

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