如何在Linux(Red Hat Linux)系统上快速创建大文件?
dd将完成这项工作,但是/dev/zero当您需要一个数百GB的文件进行测试时,读取和写入驱动器可能需要很长时间......如果您需要重复这样做,那么时间真的会增加.
我不关心文件的内容,我只是想快速创建它.如何才能做到这一点?
使用稀疏文件不适用于此.我需要为文件分配磁盘空间.
可能重复:
在Windows系统上快速创建大文件?
出于测试目的,我希望能够创建和删除非常大的文件(几个GB).我没有必要写任何特定于他们的东西.它们可能是随机数据.有没有办法通过简单地分配磁盘上的空间来生成一个大文件?如果没有,写这样一个文件的最快方法是什么?要在几秒钟内创建文件是可取的.
我需要在Python脚本中执行此操作,并且在Windows 7上执行此操作.
为了测试压缩,我需要能够创建大文件,理想情况下是文本,二进制和混合格式.
为了创建二进制文件,我可以新建一个大缓冲区并在循环中执行System.Random.NextBytes后跟FileStream.Write,如下所示:
Int64 bytesRemaining = size;
byte[] buffer = new byte[sz];
using (Stream fileStream = new FileStream(Filename, FileMode.Create, FileAccess.Write))
{
while (bytesRemaining > 0)
{
int sizeOfChunkToWrite = (bytesRemaining > buffer.Length) ? buffer.Length : (int)bytesRemaining;
if (!zeroes) _rnd.NextBytes(buffer);
fileStream.Write(buffer, 0, sizeOfChunkToWrite);
bytesRemaining -= sizeOfChunkToWrite;
}
fileStream.Close();
}
Run Code Online (Sandbox Code Playgroud)
使用足够大的缓冲区,比方说512k,这相对较快,即使对于超过2或3gb的文件也是如此.但内容完全是随机的,这不是我想要的.
对于文本文件,我采用的方法是使用Lorem Ipsum,并通过StreamWriter将其重复发送到文本文件中.内容是非随机且不均匀的,但它确实有许多相同的重复块,这是不自然的.此外,由于Lorem Ispum块非常小(<1k),因此需要很多循环并且需要非常长的时间.
这些都不是我满意的.
我已经看到了在Windows系统上快速创建大文件的答案?.这些方法非常快,但我认为它们只是用零或随机数据填充文件,这两者都不是我想要的.如果需要,我可以运行像contig或fsutil这样的外部进程.
测试在Windows上运行.
而不是创建新文件,仅使用文件系统中已存在的文件更有意义吗?我不知道任何足够大的东西.
如何从单个现有文件开始(对于文本文件可能是c:\ windows\Microsoft.NET\Framework\v2.0.50727\Config\enterprisesec.config.cch)并多次复制其内容?这适用于文本或二进制文件.
目前我有一种方法可行,但运行时间太长.
有没有人解决过这个问题?
编写文本文件比通过StreamWriter快得多吗?
建议?
编辑:我喜欢马尔可夫链的想法,以产生更自然的文本.但仍需要面对速度问题.