Windows上的fsutil文件createnew和Linux上的dd

时间:2017-11-16 10:04:43

标签: dd fsutil

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

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

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

1 个答案:

答案 0 :(得分:0)

来自Microsoft文档

  

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

从这里开始,你可以说文件必须全是零( [...],内容由零组成

但是,如果这是事实

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

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

当您使用 dd 这样的

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

你实际上正在写,&#34;逐字节&#34;,在新文件的每个字节中为零

你可以这样做:

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可以看到< em>(1099511627776 bytes = 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

必须返回相同的内容。

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