在更短的时间内创建大尺寸文件

在更短的时间内创建大尺寸文件

我想创建一个约 10G 的大文件,其中充满零和随机值。我尝试过使用:

dd if=/dev/urandom of=10Gfile bs=5G count=10

它创建一个约 2Gb 的文件并以退出状态“0”退出。我不明白为什么?

我还尝试使用以下方法创建文件:

head -c 10G </dev/urandom >myfile

创建它大约需要 28-30 分钟。但我希望它创建得更快。有人有解决方案吗?

我还希望创建具有相同(伪)随机模式的多个文件以供比较。有人知道怎么做吗?

答案1

如何使用 fallocate,此工具允许我们为文件预分配空间(如果文件系统支持此功能)。例如,为名为“example”的文件分配 5GB 的数据,可以执行以下操作:

fallocate -l 5G example

这比 dd 快得多,并且能非常快速地分配空间。

答案2

您可以使用dd创建一个仅由零组成的文件。例如:

dd if=/dev/zero of=zeros.img count=1 bs=1 seek=$((10 * 1024 * 1024 * 1024 - 1))

由于实际写入物理磁盘的只有一个字节,因此速度非常快。但是,有些文件系统不支持此功能。

如果要创建一个包含伪随机内容的文件,请运行:

dd if=/dev/urandom of=random.img count=1024 bs=10M

我建议你使用 10M 作为缓冲区大小(bs)。这是因为 10M 不是太大,但它仍然为你提供了良好的缓冲区大小。它应该相当快,但它始终取决于你的磁盘速度和处理能力。

答案3

使用 dd,这将创建一个充满随机数据的 10 GB 文件:

dd if=/dev/urandom of=test1 bs=1M count=10240

count以兆字节为单位。

来源:stackoverflow - 如何在 Linux 中创建具有给定大小的文件?

答案4

回答问题的第一部分:

尝试一次写入 5GB 的缓冲区并不是一个好主意,因为您的内核可能不支持这一点。无论如何,这不会给您带来任何性能优势。一次写入 1M 是一个不错的最大值。

相关内容