如何在Linux (Red Hat Linux)系统中快速创建大文件?
dd可以完成这项工作,但是从/dev/zero读取并写入驱动器可能会花费很长时间,因为您需要一个几百gb大小的文件进行测试……如果你需要重复这样做,时间就会增加。
我不关心文件的内容,我只想快速创建它。如何做到这一点呢?
使用稀疏文件不能解决这个问题。我需要为文件分配磁盘空间。
如何在Linux (Red Hat Linux)系统中快速创建大文件?
dd可以完成这项工作,但是从/dev/zero读取并写入驱动器可能会花费很长时间,因为您需要一个几百gb大小的文件进行测试……如果你需要重复这样做,时间就会增加。
我不关心文件的内容,我只想快速创建它。如何做到这一点呢?
使用稀疏文件不能解决这个问题。我需要为文件分配磁盘空间。
当前回答
创建一个1gb的文件:
dd if=/dev/zero of=filename bs=1G count=1
其他回答
GPL mkfile只是dd的一个(ba)sh脚本包装器;BSD的mkfile只是memsets一个非零的缓冲区,并重复写入它。我不期望前者的性能优于dd。后者可能略微优于dd if=/dev/zero,因为它省略了读取操作,但任何性能明显更好的可能只是创建一个稀疏文件。
如果没有一个系统调用实际为文件分配空间而不写入数据(Linux和BSD缺乏这个,可能Solaris也是如此),您可能会通过使用ftrunc(2)/truncate(1)将文件扩展到所需的大小,将文件mmap到内存中,然后将非零数据写入每个磁盘块的第一个字节(使用fgetconf查找磁盘块大小)来获得性能上的小幅改进。
这是我在以下约束条件下所能做到的最快速度(并不快):
大文件的目标是填满磁盘,因此不能压缩。 使用ext3文件系统。(fallocate不可用)
这是它的要点……
// include stdlib.h, stdio.h, and stdint.h
int32_t buf[256]; // Block size.
for (int i = 0; i < 256; ++i)
{
buf[i] = rand(); // random to be non-compressible.
}
FILE* file = fopen("/file/on/your/system", "wb");
int blocksToWrite = 1024 * 1024; // 1 GB
for (int i = 0; i < blocksToWrite; ++i)
{
fwrite(buf, sizeof(int32_t), 256, file);
}
在我们的情况下,这是一个嵌入式linux系统,这工作得很好,但更喜欢更快的东西。
供您参考,命令dd if=/dev/urandom of=outputfile bs=1024 count = XX速度太慢,无法使用。
来自其他答案的Dd是一个很好的解决方案,但它的速度较慢。在Linux(和其他POSIX系统)中,我们有fallocate,它使用所需的空间,而不必实际写入它,与大多数现代基于磁盘的文件系统一起工作,非常快:
例如:
fallocate -l 10G gentoo_root.img
我对Linux不太了解,但这是我多年前在DC共享上编写的伪造大文件的C代码。
#include < stdio.h >
#include < stdlib.h >
int main() {
int i;
FILE *fp;
fp=fopen("bigfakefile.txt","w");
for(i=0;i<(1024*1024);i++) {
fseek(fp,(1024*1024),SEEK_CUR);
fprintf(fp,"C");
}
}
你可以使用https://github.com/flew-software/trash-dump 您可以创建任意大小和随机数据的文件
这里有一个命令,你可以在安装垃圾转储(创建一个1GB的文件)后运行
$ trash-dump --filename="huge" --seed=1232 --noBytes=1000000000
顺便说一下,这是我创造的