作为标题,我想知道windows中的fsutil如何能够如此快速地创建一个非常大的文件。它是否真的为该文件分配真正的集群,或者只是写下文件的元数据?请考虑以下两个命令:
fsutil file createnew testFile <1Tb>
dd if=/dev/zero of=testFile bs=1024M count=1024
所以我创建了一个大小为1Tb的文件,问题在于fsutil,文件几乎是立即创建的,但是使用dd,它需要1个多小时才能完成。 因此,我猜fsutil只将元数据写入文件头,真正的文件群集将随时扩展。我认为对吗?
答案 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
必须返回相同的内容。
注意 :为了更快地证明您的观点,您可以使用更小的文件进行测试。