作为标题,我想知道windows中的fsutil如何能够这么快地创建一个非常大的文件。它真的为该文件分配了真正的集群,还是只是记录了文件的元数据?考虑以下两个命令:
fsutil file createnew testFile <1Tb>
dd if=/dev/zero of=testFile bs=1024M count=1024所以我创建了一个1Tb大小的文件,问题是fsutil,文件几乎是立即创建的,但是对于dd,它需要超过1个小时才能完成。因此,我猜想fsutil只将元数据写入文件头,真正的文件集群将在需要时扩展。我想得对吗?
发布于 2018-01-23 20:15:45
来自Microsoft文档
createnew创建指定名称和大小的文件,其内容由零组成。
从这里,您可以说文件必须是所有零(由零组成的...with内容)。
但是,如果这是真的
[...]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)然后,您可以在任何十六进制编辑器上看到testFile_fsutil的内容,并查找非零字节,或者更准确地说,从Linux中可以找到( 1099511627776字节=1 tebi字节)。
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必须返回同样的。
Note__:为了更快地证明您的观点,您可以使用一个更小的文件进行测试。
https://stackoverflow.com/questions/47326725
复制相似问题