是否有可能“立即”创建任意文件?

是否有可能“立即”创建任意文件?

我见过以下技巧可以快速创建较大的空文件:

dd if=/dev/zero of=test.dat bs=1024 count=1024

但是,创建多 GB 文件时,这仍然需要一些时间。我推测这段时间主要用来将\0s 从写入/dev/zero到 的所有文件test.dat

有没有什么方法可以“立即”创建任意大小的文件,而无需实际将其内容初始化为任何东西?

答案1

是的,如果你的文件系统支持稀疏文件

您的dd方法实际上创建了文件并填充创建的文件包含零。实际上必须写入这些零,这需要时间。

如果您在文件中“跳过”而不写入,您仍会创建一个看似很大的文件,而实际上并没有写入文件。由于这个大文件实际上不占用磁盘空间,因此甚至可以创建比其所在的 FS 允许的更大的文件。

如果你想尝试一下,可以使用类似这样的方法
dd seek=123456 if=/dev/null of=sparse-file bs=1M

(使用不了解稀疏文件的软件进行备份和恢复时要小心)。

相关内容