Поддерживает ли Windows (или NTFS) файлы-заполнители с поддельными размерами?

Поддерживает ли Windows (или NTFS) файлы-заполнители с поддельными размерами?

Каждый раз, когда я запускаю Photoshop, он немедленно создает временный файл размером 2 ГБ на жестком диске, где находится кэш. Это дисковый диск, и я не слышу никаких шумов жесткого диска, которые обычно ассоциируются с записью 2 ГБ данных. Возможно ли создать пустой файл-заполнитель с «поддельным» размером, чтобы зарезервировать место на случай, если позже ему действительно понадобится кэшировать некоторые данные?

решение1

На томе NTFS это можно сделать двумя способами.

TheSetEndOfFileфункция, в файловых системах NTFS, резервирует дисковое пространство для файла, но не заполняет его ничем. Здесь может быть небольшая дисковая активность из-за обновления учета NTFS. Когда программа делает что-либо с файлом после последнего байта, который был записан ранее, NTFS записывает пробег между последним записанным (последним «действительным») байтом и запрошенным байтом (чтобы избежатьпроблемы безопасности) и обновляет действительный указатель данных.

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

Вы можете проверить, является ли файл разреженным, fsutil sparse queryflagуказав путь к файлу. Если он не разреженный, программа использует первый подход.

Дальнейшее чтение:Почему моя однобайтовая запись длится вечность?

решение2

Да, это называется «разреженный файл».

NTFS и ReFS поддерживают его, а FAT32 и ExFAT — нет.

Программа может явно указать ОС, какие диапазоны байтов файла должны иметь место на диске (по умолчанию это все). Другие, нераспределенные части рассматриваются как содержащие просто много байтов со значением 0, если они считываются программой.

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

Также смhttps://en.wikipedia.org/wiki/Sparse_file

решение3

Встроенный инструментfsutilможно быстро создать неразреженный файл, полный нулей, с fsutil file createNew <filename> <bytes>. Он займет место на диске, но нулевые блоки не нужно будет записывать (при условии, что вы используете NTFS или подобную).

Вот пример создания файла размером 10 ГБ. Свободное место на жестком диске уменьшится на 10 ГБ, но действие должно произойти очень быстро.

C:\>fsutil file createNew dummy 10737418240
File C:\dummy is created

C:\>fsutil sparse queryFlag dummy
This file is NOT set as sparse

Связанный контент