如何在Linux (Red Hat Linux)系统中快速创建大文件?

dd可以完成这项工作,但是从/dev/zero读取并写入驱动器可能会花费很长时间,因为您需要一个几百gb大小的文件进行测试……如果你需要重复这样做,时间就会增加。

我不关心文件的内容,我只想快速创建它。如何做到这一点呢?

使用稀疏文件不能解决这个问题。我需要为文件分配磁盘空间。


当前回答

其中seek是你想要的文件的大小,单位是字节- 1。

dd if=/dev/zero of=filename bs=1 count=1 seek=1048575

其他回答

一种方法是:如果可以保证不相关的应用程序不会以冲突的方式使用这些文件,那么只需在特定目录中创建一个大小不同的文件池,然后在需要时创建指向它们的链接。

例如,有一个文件池叫做:

/ home / bigfiles 512M-A / home / bigfiles 512M-B / home / bigfiles 1024M-A / home / bigfiles 1024M-B

然后,如果你有一个应用程序需要一个1G的文件,名为/home/oracle/logfile,执行“ln /home/bigfiles/1024M-A /home/oracle/logfile”。

如果它在单独的文件系统上,则必须使用符号链接。

可以使用A/B/etc文件来确保不相关的应用程序之间没有冲突的使用。

链接操作已经尽可能快了。

你可以使用https://github.com/flew-software/trash-dump 您可以创建任意大小和随机数据的文件

这里有一个命令,你可以在安装垃圾转储(创建一个1GB的文件)后运行

$ trash-dump --filename="huge" --seed=1232 --noBytes=1000000000

顺便说一下,这是我创造的

GPL mkfile只是dd的一个(ba)sh脚本包装器;BSD的mkfile只是memsets一个非零的缓冲区,并重复写入它。我不期望前者的性能优于dd。后者可能略微优于dd if=/dev/zero,因为它省略了读取操作,但任何性能明显更好的可能只是创建一个稀疏文件。

如果没有一个系统调用实际为文件分配空间而不写入数据(Linux和BSD缺乏这个,可能Solaris也是如此),您可能会通过使用ftrunc(2)/truncate(1)将文件扩展到所需的大小,将文件mmap到内存中,然后将非零数据写入每个磁盘块的第一个字节(使用fgetconf查找磁盘块大小)来获得性能上的小幅改进。

你也可以使用“yes”命令。语法相当简单:

#yes >> myfile

按“Ctrl + C”停止它,否则它将耗尽所有可用空间。

要清除该文件,请执行以下命令:

#>myfile

将清除此文件。

创建一个1gb的文件:

dd if=/dev/zero of=filename bs=1G count=1