Однако файл все еще большой, заполнен ненужными 0x00.
Откуда ты знаешь, что это ненужно? Изображение, вероятно, не имеет нулевых данных в конце, как это, но многие файлы, такие как образы дисков или предварительно выделенный формат, имеют большие разделы нулей. Ваши изображения по-прежнему отображаются правильно?
Файловая система не хранит случайные или пустые данные в ваших файлах. Таким образом, если диск не был поврежден, данные были определенно записаны каким-либо человеком или приложениями. Вы не исправляете файловую систему, так как с ней нет проблем. Вы также не исправляете файлы, если они являются их реальными данными. Скорее вам нужно проверить, есть ли какие-либо вредоносные программы на вашем компьютере
Возвращаясь к основной "проблеме", размер на диске может быть меньше в различных ситуациях, таких как резидентные файлы или символические ссылки. Однако такой большой файл, очевидно, не помещается в запись MFT, поэтому в вашем случае, скорее всего, это редкий файл, в котором файловая система просто хранит значимые данные, экономя пространство, оставляя пустые части.
Однако по умолчанию файл не будет создаваться разреженным, поэтому некоторые программы установили флаг sparse для ваших файлов. Он также может быть включен вручную с помощью fsutil sparse
PS D:\> fsutil file createnew zeros 0x100000 # create a blank file 0x100000 bytes long
File D:\zeros is created
PS D:\> fsutil sparse setflag .\zeros
PS D:\> fsutil sparse setrange .\zeros 0 0x100000 # set the range of zero bytes
PS D:\> fsutil file layout .\zeros
********* File 0x0015000000000e3d *********
File reference number : 0x0015000000000e3d
File attributes : 0x00000220: Archive | Sparse
File entry flags : 0x00000000
Link (ParentID: Name) : 0x0005000000000005: HLINK Name : \zeros
Creation Time : 13-12-2018 17:44:25
Last Access Time : 13-12-2018 17:45:48
Last Write Time : 13-12-2018 17:45:48
Change Time : 13-12-2018 17:45:48
# ... irrelevant data
Stream : 0x080 ::$DATA
Attributes : 0x00000200: Sparse
Flags : 0x00000008: No clusters allocated
Size : 1,048,576
Allocated Size : 0
Extents : 1 Extents
: 1: VCN: 0 Clusters: 256 LCN: -1
Как вы можете видеть выше, после установки нулевого диапазона выделенный размер в потоке ::$DATA
становится нулевым
Чтобы удалить флаг разрежения, вам просто нужно скопировать файл в новый, потому что, как сказано выше, он не включен по умолчанию
дальнейшее чтение