web-dev-qa-db-ja.com

短時間で大きなサイズのファイルを作成する

ゼロとランダムな値で満たされた最大10Gの大きなファイルを作成します。私は使用してみました:

dd if=/dev/urandom of=10Gfile bs=5G count=10

約2Gbのファイルを作成し、終了ステータス「0」で終了します。理由を理解できませんか?

私も使用してファイルを作成しようとしました:

head -c 10G </dev/urandom >myfile

作成には約28〜30分かかります。しかし、私はそれがより速く作成されることを望みます。誰にも解決策がありますか?

また、比較のために同じ(擬似)ランダムパターンで複数のファイルを作成したいと思います。誰でもそれを行う方法を知っていますか?

17
skane

Fallocateの使用方法については、このツールを使用して、ファイル用のスペースを事前に割り当てることができます(ファイルシステムがこの機能をサポートしている場合)。たとえば、5GBのデータを「example」というファイルに割り当てると、次のことができます。

fallocate -l 5G example

これはddよりもはるかに高速で、スペースを非常に迅速に割り当てます。

12
Colin Ian King

ddを使用して、ゼロのみで構成されるファイルを作成できます。例:

dd if=/dev/zero of=zeros.img count=1 bs=1 seek=$((10 * 1024 * 1024 * 1024 - 1))

実際に物理ディスクに書き込まれるのは1バイトだけなので、これは非常に高速です。ただし、一部のファイルシステムはこれをサポートしていません。

擬似ランダムコンテンツを含むファイルを作成する場合は、次を実行します。

dd if=/dev/urandom of=random.img count=1024 bs=10M

バッファサイズとして10Mを使用することをお勧めします(bs)。これは、10Mが大きすぎないためですが、それでも十分なバッファーサイズが得られるためです。それはかなり速いはずですが、常にディスクの速度と処理能力に依存します。

8
xiaodongjie

Ddを使用すると、ランダムデータで満たされた10 GBのファイルが作成されます。

dd if=/dev/urandom of=test1 bs=1M count=10240

countはメガバイト単位です。

ソース: stackoverflow-Linuxで特定のサイズのファイルを作成する方法?

5
Alaa Ali

質問の最初の部分に答える:

カーネルが一度に5GBのバッファーを書き込もうとすることは、おそらくお勧めできません。いずれの場合でも、パフォーマンス上の利点はありません。一度に1Mを書き込むことは適切な最大値です。

1
cprn

この質問は5年前に開かれました。私はこれに偶然出会ったばかりで、私の調査結果を追加したかったのです。

単に使用する場合

dd if=/dev/urandom of=random.img count=1024 bs=10M

xiaodongjieが説明したように、かなり高速に動作します。ただし、eatmydataのように使用すると、さらに高速化できます

eatmydata dd if=/dev/urandom of=random.img count=1024 bs=10M

eatmydataは、fsyncを無効にしてディスクの書き込みを高速化します。

詳しくは https://flamingspork.com/projects/libeatmydata/ をご覧ください。

0
GMishx