命令“fsutil file createnew”到底起什么作用?

命令“fsutil file createnew”到底起什么作用?

在 Windows 操作系统命令行中,当我需要快速创建任意大小的文件时,我使用以下命令:

fsutil file createnew <filename> <size_in_bytes>

我最近使用这个原生工具创建了一个 100GB 的文件,令我惊讶的是,创建文件所用的时间不到 500ms。我是在之前已存满数据的盘式硬盘上创建该文件的。

出于好奇,我用十六进制编辑器打开了该文件,结果文件看起来完全是空的(诚然,我没有手动检查所有 100GB)。我以为里面会充满硬盘的先前内容,因为它不可能在 500 毫秒内写入 100GB 的数据。

fsutil file createnew实际上在做什么?并且,根据它实际所做的操作,它是否可以用作低安全性快速擦除技术(单次通过)?

答案1

我原本以为里面会存满硬盘上以前的内容,

多用户操作系统通常不允许这种情况发生,因为这是一种绕过操作系统级文件保护功能的不必要且简单的方法,至少对于 Windows 来说,这是明确安全认证的一部分

fsutil file createnew 实际上在做什么?

至少有两个选项,我怀疑(但尚未检查)fsutil 使用第一个 - 它依赖于操作系统来跟踪“数据结束”。

  • 文件系统可能保留两个单独的指针——“文件结尾”和“有效数据结尾”。这正是 NTFS 在 Windows 中的工作方式。

    您可以致电设置文件结束()(对应Linuxftruncate())创建一个没有数据的大文件,“有效数据结束”和“文件结束”之间的空间在读取时会自动返回全部0x00字节。

    (特权帐户实际上可以使用 SetFileValidData() 调用来强制操作系统返回磁盘上已有的数据,但这不是一个常用的操作。)

  • 如果文件系统是基于扩展的,那么它跟踪的不是单个磁盘簇,而是组成文件的整个连续的“起始-结束”范围。这允许创建稀疏文件其中一些范围被简单地标记为根本没有任何物理分配(即“洞”) - 这些位置在读取时将返回 0x00(当然,直到其他内容写入那里)。

    一般来说,简单地寻求超出文件末尾并继续写入将自动产生稀疏文件(如果可能)。

fsutil 有子命令来检查文件的“有效数据”指针和范围列表。

有些文件系统不支持这些技术(例如 FAT),在这种情况下,操作系统将要需要明确将相应的磁盘区域清零。

并且,根据它的实际作用,它是否可以用作低安全性快速擦除技术(单次通过)?

不,不是在机械磁盘上​​。

相关内容