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

ege*_*eek 22 files dd

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

dd if=/dev/urandom of=10Gfile bs=5G count=10
Run Code Online (Sandbox Code Playgroud)

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

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

head -c 10G </dev/urandom >myfile
Run Code Online (Sandbox Code Playgroud)

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

此外,我希望创建多个具有相同(伪)随机模式的文件进行比较。有谁知道这样做的方法吗?

Col*_*ing 18

使用 fallocate 怎么样,这个工具允许我们为文件预分配空间(如果文件系统支持这个特性)。例如,将 5GB 的数据分配给名为“example”的文件,可以这样做:

fallocate -l 5G example
Run Code Online (Sandbox Code Playgroud)

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

  • 这些块在文件系统级别被标记为未初始化,但是当您读取它们时,返回到用户空间的块将被零填充。如果您写入数据,那么它将进入分配的空间。这就是稀疏文件的工作方式,我希望您正在使用未分配的归零文件块,但始终不知道这一点。fiemap() IOCTL 将向您显示许多文件是稀疏的,并且其中存在您永远不知道的漏洞。最新版本的 cp 甚至使用这种机制,因此它们可以加快备用数据块的复制速度。 (2认同)

xia*_*jie 12

您可以使用dd来创建仅由零组成的文件。例子:

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

这非常快,因为只有一个字节真正写入物理磁盘。但是,某些文件系统不支持此功能。

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

dd if=/dev/urandom of=random.img count=1024 bs=10M
Run Code Online (Sandbox Code Playgroud)

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


Ala*_*Ali 6

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

dd if=/dev/urandom of=test1 bs=1M count=10240
Run Code Online (Sandbox Code Playgroud)

count 以兆字节为单位。

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

  • 我刚刚尝试了 `dd if=/dev/urandom of=10Gfile bs=500M count=20`,它在不到 20 分钟内给了我 10237226010 字节。 (2认同)