Ответ будет зависеть только от того, насколько разрежен файл, а также от размера кластера на жестком диске.
NTFS, как и большинство других файловых систем, считает файл упорядоченным списком дисковых кластеров. Этот «упорядоченный список» представляет собой физическую структуру данных в файловой системе и занимает дисковое пространство. По мере увеличения количества записей в этом списке файловая система должна назначить больше физических блоков для ее хранения. Однако количество блоков, которые он может добавить, в конечном счете ограничено (см. Ссылки).
Итак, предположим, что у вас есть диск 1 ТБ, который по умолчанию имеет размер кластера 4 КБ, и вы пишете файл размером 512 ГБ.
- Если вы напишете этот файл последовательно, система попытается выделить смежные блоки, и в списке будет относительно небольшое количество записей (фрагменты в файле).
- Если вы напишете этот файл случайным образом, вы создадите разреженный файл; каждый раз, когда вы пишете блок, который ранее не был написан, вы должны выделить кластер для этого блока. Поскольку вы произвольно записываете, ОС, вероятно, не сможет выделить смежные кластеры, поэтому у вас будет больше записей в списке. Для вашего 512GB-файла может потребоваться 134 217 728 фрагментов (если я правильно выполнил математику).
Я не знаю, будет ли такое количество фрагментов превышать возможности структур управления NTFS. Но предположим, что так оно и есть. Возможно, вы все равно сможете управлять этим файлом, если используете том, размер кластера которого составляет 64k (в результате получается 8 388 608 фрагментов).
Помимо возможности исчерпания фрагментов, сильно фрагментированные файлы будут менее эффективными, поскольку доступ к любому конкретному блоку требует прохождения через список фрагментов, чтобы найти этот блок (я буду предполагать, что какая-то форма бинарного поиска но это все еще хуже, чем изучение одного фрагмента, который содержит все блоки). Более того, при использовании магнитных носителей общий доступ к диску будет субоптимальным, поскольку близкородственные блоки могут находиться в разных местах на диске. Лучше, на мой взгляд, предварительно выделить и последовательно запустить весь файл (если, конечно, вы не планируете хранить в нем много данных).
Список литературы (как от Microsoft):
- How NTFS Works - обзор структур в файловой системе NTFS.
- The Four Stages of NTFS File Growth - Сообщение сотрудника службы поддержки Microsoft, в котором подробно описывается, как растущие узлы распределения для файла растут с течением времени. См. Также отчет о последующих действиях, который показывает частичную работу, которая увеличивает количество записей распределения.
[2^44 байт - 64 КБ] (https://technet.microsoft.com/en-us/library/cc938432.aspx). Вы ** могли ** использовать google, вы знаете ... – specializt
@specializt Это может быть правдой для * нормального * файла, но я понимаю, что * разреженный * файл отличается тем, что он использует отдельный диапазон выделения которая имеет свои собственные ограничения. – ChrisPatrick
.... нет. Я думаю, что вы, возможно, неправильно поняли несколько понятий - разреженные файлы ничем не отличаются, они просто не могут содержать никаких реальных данных, вы можете выделить до предела файловой системы NTFS, нет * «отдельных таблиц диапазонов распределения» *, что ' d ужасно в отношении производительности – specializt