如何在Linux (Red Hat Linux)系统中快速创建大文件?
dd可以完成这项工作,但是从/dev/zero读取并写入驱动器可能会花费很长时间,因为您需要一个几百gb大小的文件进行测试……如果你需要重复这样做,时间就会增加。
我不关心文件的内容,我只想快速创建它。如何做到这一点呢?
使用稀疏文件不能解决这个问题。我需要为文件分配磁盘空间。
如何在Linux (Red Hat Linux)系统中快速创建大文件?
dd可以完成这项工作,但是从/dev/zero读取并写入驱动器可能会花费很长时间,因为您需要一个几百gb大小的文件进行测试……如果你需要重复这样做,时间就会增加。
我不关心文件的内容,我只想快速创建它。如何做到这一点呢?
使用稀疏文件不能解决这个问题。我需要为文件分配磁盘空间。
当前回答
不义之词:OTFFS提供了一个文件系统,可以提供任意大的文件系统。Exabytes是当前的限制)文件生成的内容。它只支持linux,使用纯C语言,并且处于早期alpha版本。
见https://github.com/s5k6/otffs。
其他回答
Linux和所有文件系统
xfs_mkfile 10240m, 10gigs文件
Linux &和一些文件系统(ext4, xfs, btrfs和ocfs2)
fallocate -l 10G 10Gigfile
OS X, Solaris, SunOS,可能还有其他的unix系统
mkfile 10240m 10Gigfile
hp - ux
prealloc 10Gigfile 10737418240
解释
尝试mkfile <size> myfile作为dd的替代。使用-n选项,大小会被注明,但直到数据写入磁盘块时才会分配磁盘块。如果没有-n选项,则空间为零,这意味着写入磁盘,这意味着花费时间。
mkfile派生自SunOS,并不是到处都可用。大多数Linux系统都有xfs_mkfile,它以完全相同的方式工作,而且不只是在XFS文件系统上(尽管名称相同)。它包含在xfsprogs (Debian/Ubuntu)或类似的命名包中。
大多数Linux系统也有fallocate,它只在某些文件系统上工作(比如btrfs、ext4、ocfs2和xfs),但它是最快的,因为它分配所有的文件空间(创建非空洞文件),但不初始化任何文件。
你可以使用https://github.com/flew-software/trash-dump 您可以创建任意大小和随机数据的文件
这里有一个命令,你可以在安装垃圾转储(创建一个1GB的文件)后运行
$ trash-dump --filename="huge" --seed=1232 --noBytes=1000000000
顺便说一下,这是我创造的
一种方法是:如果可以保证不相关的应用程序不会以冲突的方式使用这些文件,那么只需在特定目录中创建一个大小不同的文件池,然后在需要时创建指向它们的链接。
例如,有一个文件池叫做:
/ 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文件来确保不相关的应用程序之间没有冲突的使用。
链接操作已经尽可能快了。
我不认为你会比dd快很多,瓶颈是磁盘;无论你怎么做,写入几百GB的数据都将花费很长时间。
But here's a possibility that might work for your application. If you don't care about the contents of the file, how about creating a "virtual" file whose contents are the dynamic output of a program? Instead of open()ing the file, use popen() to open a pipe to an external program. The external program generates data whenever it's needed. Once the pipe is open, it acts just like a regular file in that the program that opened the pipe can fseek(), rewind(), etc. You'll need to use pclose() instead of close() when you're done with the pipe.
如果你的应用程序需要文件有一定的大小,它将由外部程序来跟踪它在“文件”中的位置,并在到达“结束”时发送一个eof。
创建一个1gb的文件:
dd if=/dev/zero of=filename bs=1G count=1