Windows(或 NTFS)是否支持具有虚假大小的占位符文件?

Windows(或 NTFS)是否支持具有虚假大小的占位符文件?

每次启动 Photoshop 时,它都会立即在缓存所在的硬盘上创建一个 2GB 的临时文件。这是一个盘片驱动器,我听不到通常与写入 2GB 数据相关的任何硬盘噪音。是否可以创建一个具有“假”大小的空占位文件来保留空间,以防它稍后确实需要缓存一些数据?

答案1

有两种不同的方法可以在 NTFS 卷上实现此操作。

SetEndOfFile功能在 NTFS 文件系统上,为文件保留磁盘空间,但不填充任何内容。这里可能会有一些磁盘活动,用于更新 NTFS 簿记。当程序对文件执行任何操作时,如果超出了之前写入的最后一个字节,NTFS 会在最后写入(最后一个“有效”)字节和请求的字节之间进行涂抹(以避免安全问题)并更新有效数据指针。

然后是稀疏文件. 与使用 扩展的普通文件不同SetEndOfFile,NTFS 会跟踪哪些扇区中有实际数据,而不仅仅是哪个字节是最后一个包含有效数据的字节。未写入任何内容的长串零不会存储在物理磁盘上。

您可以使用文件路径来检查文件是否稀疏fsutil sparse queryflag。如果不是稀疏的,则程序使用第一种方法。

进一步阅读:为什么我的单字节写入要花很长时间?

答案2

是的,这就叫“稀疏文件”。

NTFS 和 ReFS 支持它,但 FAT32 和 ExFAT 不支持。

程序可以明确地告诉操作系统文件的哪些字节范围应该在磁盘上有空间(默认情况下,是所有字节)。如果程序读取其他未分配的部分,则将其视为仅包含大量值为 0 的字节。

在文件属性对话框中,您将看到一个“正常”文件大小(即“假”文件大小),以及磁盘上使用的大小(即分配的部分)(加上一些字节以获得完整的 HDD 块)。

另请参阅https://en.wikipedia.org/wiki/Sparse_file

答案3

内置工具文件系统工具可以快速创建一个充满零的非稀疏文件,使用fsutil file createNew <filename> <bytes>。它将占用磁盘空间,但不需要写入零块(假设您使用的是 NTFS 或类似文件系统)。

以下是创建 10GB 文件的示例。硬盘可用空间将减少 10GB,但该操作应该会非常快地发生。

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

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

相关内容