0

作为标题,我想知道 Windows 中的 fsutil 如何如此快速地创建一个非常大的文件。它真的为该文件分配了真正的集群还是只是写下了文件的元数据?考虑以下两个命令:

fsutil file createnew testFile <1Tb>
dd if=/dev/zero of=testFile bs=1024M count=1024

所以我创建了一个 1Tb 大小的文件,问题出在 fsutil 上,文件几乎是立即创建的,但是使用 dd 需要 1 个多小时才能完成。因此,我猜fsutil只是将元数据写入文件头,真正的文件集群会在需要时扩展。我觉得对吗?

4

1 回答 1

0

来自微软文档

createnew 创建一个具有指定名称和大小的文件,其内容由零组成。

从这里,您可以说文件必须全为零([...] 内容由零组成

但是,如果这是真的

[...]the file is nearly created immediately[...]

我认为您是对的:fsutil可能会在执行时创建带有标记为空闲字节的文件,但不会写入这些字节

当你像这样使用dd

dd if=/dev/zero of=testFile bs=1024M count=1024

您实际上是在“逐字节”写入新文件的每个字节中的零

你可以这样做:

fsutil file createnew testFile_fsutil <1Tb>   #(on Windows)

dd if=/dev/zero of=testFile_dd bs=1024M count=1024   #(on Linux)

然后,您可以在任何 hexeditor 上查看 testFile_fsutil内容,并查找非零字节,或者更准确地说,您可以从 Linux 中查找( 1099511627776 字节 = 1 Tebibyte )

cmp --bytes=1099511627776 testFile_fsutil testFile_dd

或者

cmp --bytes=1099511627776 testFile_fsutil /dev/zero

甚至使用哈希:

dd if=/dev/zero bs=1024M count=1024 | sha1sum

返回

fea475204f4ad1348f21fad930a7c721a2858971

所以,

dd if=testFile_fsutil bs=1024M count=1024 | sha1sum

必须返回相同的。

注意:为了更快地证明您的观点,您可以使用更小的文件进行测试。

于 2018-01-23T20:15:45.903 回答