UNIXで大容量ファイルを作成する方法は?

UNIXで大容量ファイルを作成する方法は?

Windowsでこのようなことをする方法を見つけました。

echo "This is just a sample line appended  to create a big file. " > dummy.txt
for /L %i in (1,1,21) do type dummy.txt >> dummy.txt

http://www.windows-commandline.com/how-to-create-large-dummy-file/

UNIXでファイルをコピーして追加し、プロセスを繰り返す方法はありますか?それはまるでfor .. cat file1.txt > file1.txt

答え1

yes "Some text" | head -n 100000 > large-file

そしてcsh/ tcsh

repeat 10000 echo some test > large-file

そしてzsh

{repeat 10000 echo some test} > large-file

GNUシステムでは、以下も参照してください。

seq 100000 > large-file

または:

truncate -s 10T large-file

(10TiBスパースファイルの作成(非常に大きいがディスク容量を占有しない))および他の代替議論「0バイトが多いテストファイルの作成」


そうするのはcat file >> file悪い考えです。

catまず、出力ファイルと同じファイルの読み取りを拒否するいくつかの実装では機能しません。しかし、これを実行してこの問題を解決しても、内部バッファが内部バッファよりも大きいと、cat file | cat >> file以前に作成したデータが読み込まれるため、無限ループに陥ります。filecatcat

また、回転しているハードドライブがサポートするファイルシステムでは、(メモリ内の可能なサイズより大きいサイズに達した後)、ドライブがデータを読み取る場所と書き込む位置の間を前後に移動する必要があるため、かなり非効率的です。

答え2

次のコマンドを使用して、Solaris で大きなファイルを作成できます。

mkfile 10g /path/to/file

Solaris(およびLinux)で動作する別の方法:

truncate -s 10g /path/to file

可能:

dd if=/dev/zero of=/path/to/file bs=1048576 count=10240

答え3

Linuxシステムで大容量ファイルを生成する最も簡単な方法は次のとおりですfallocate

sudo fallocate -l 2G bigfile

fallocateファイルシステムを動作させると、基本的には実際にデータセクタを書き込まないので、極度に早く。欠点は、rootとして実行する必要があることです。

ループで継続的に実行すると、数秒で最大のファイルシステムを埋めることができます。

~からman fallocate

Fallocateは、ファイルに割り当てられたディスク容量を操作して割り当てをキャンセルまたは事前割り当てするために使用されます。
fallocate システムコールをサポートするファイルシステムの場合、データブロックに対する IO を必要とせずにブロックを割り当て、初期化されていないとマークすることで、事前割り当てが迅速に行われます。これは、ファイルをゼロで埋めることによって生成するよりもはるかに高速です。
XFS(Linux 2.6.38以降)、ext4(Linux 3.0以降)、Btrfs(Linux 3.7以降)、およびtmpfs(Linux 3.5以降)をサポートします。

答え4

私が正しく理解した場合は、次のようなものを探しています。

echo "test line" > file;
for i in {1..21}; do echo "test line" >> file; done

これにより、「テストライン」が22回繰り返されるファイルが生成されます。特定のファイルサイズが必要な場合は、次の方法を使用できます(Linux上)。 1024は1KBです。

while [ $(stat -c "%s" file) -le 1024 ]; do echo "test line" >> file; done

個人的に大容量ファイルを作成したい場合は、2つのファイルを使用し、1つを別のファイルに挿入する方法を使用します。必要なサイズ(ここでは1 MB)に達するまでプロセスを繰り返すことができます。

echo "test line" > file;
while [ $(stat -c "%s" file) -le 1048576 ]; do 
    cat file >> newfile
    cat newfile >> file
done

ファイルが制限を下回るとすべてが再び入る可能性があるため、このソリューションは必要なサイズを超えることがよくあります。

最後に、必要なサイズのファイルで実際に何も含める必要がない場合は、次のものを使用できますtruncate

truncate -s 1M file

関連情報