![是否有可能“立即”创建任意文件?](https://linux22.com/image/1324980/%E6%98%AF%E5%90%A6%E6%9C%89%E5%8F%AF%E8%83%BD%E2%80%9C%E7%AB%8B%E5%8D%B3%E2%80%9D%E5%88%9B%E5%BB%BA%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我见过以下技巧可以快速创建较大的空文件:
dd if=/dev/zero of=test.dat bs=1024 count=1024
但是,创建多 GB 文件时,这仍然需要一些时间。我推测这段时间主要用来将\0
s 从写入/dev/zero
到 的所有文件test.dat
。
有没有什么方法可以“立即”创建任意大小的文件,而无需实际将其内容初始化为任何东西?
答案1
是的,如果你的文件系统支持稀疏文件。
您的dd
方法实际上创建了文件并填充创建的文件包含零。实际上必须写入这些零,这需要时间。
如果您在文件中“跳过”而不写入,您仍会创建一个看似很大的文件,而实际上并没有写入文件。由于这个大文件实际上不占用磁盘空间,因此甚至可以创建比其所在的 FS 允许的更大的文件。
如果你想尝试一下,可以使用类似这样的方法
dd seek=123456 if=/dev/null of=sparse-file bs=1M
(使用不了解稀疏文件的软件进行备份和恢复时要小心)。