大きなファイルをすばやく作成するにはどうすればよいですか?


回答:


36

ゼロフィル法(ここでは避けるように修正潜在的なメモリのボトルネックは)SSDの10ギガバイトのファイルを作成するために17秒かかったとUbuntuのグラフィカルインターフェイスが応答しなくなった原因。

$ time sh -c 'dd if=/dev/zero iflag=count_bytes count=10G bs=1M of=large; sync'
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 17.2003 s, 624 MB/s

real    0m17.642s
user    0m0.008s
sys     0m9.404s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
10737422336     large

fallocateは、ファイルに割り当てられたディスクスペースを直接操作することで、すぐに大きなファイルを作成します。

$ time sh -c 'fallocate -l 10G large; sync'

real    0m0.038s
user    0m0.000s
sys     0m0.016s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
10737422336     large

truncateも即座に機能し、後でデータが書き込まれるまで実際のディスク容量を使い果たしないスパースファイルを作成します

$ time sh -c 'truncate -s 10G large; sync'

real    0m0.014s
user    0m0.000s
sys     0m0.004s
$ du -B 1 --apparent-size large
10737418240     large
$ du -B 1 large
0       large

dd ... bs=2G count=12 GBをメモリに読み込みます(1回のread(2)呼び出しで)。あなたがメモリのプレッシャーを持っているならば、それはおそらく行く方法ではありません。より多くの小さなブロックは、ページングが少ないことを意味する場合は高速になる可能性があります。
クレイメーション

19

簡単な方法は、ddコマンドを使用してゼロでいっぱいのファイルを書き込むことです。

dd if=/dev/zero of=outputFile bs=2G count=1
  • if =入力ファイル
  • of =出力ファイル
  • bs =バイト

コンピューター(1024 * 1024 * 1024)ギガバイトが必要な場合はサイズ引数でGを使用し、人間(1000 * 1000 * 1000)ギガバイトが必要な場合はGBを使用します。


1
すべてをゼロにしたくない場合は、if = / dev / randomを選択できます
-Denwerko

/ dev / randomはもっと時間がかかりますが。
con-f-use

10
/ dev / randomの使用には非常に時間がかかります。/dev/urandomその場合に使用します(非ブロッキングですが、同じレベルのランダム性を持つことは保証されません)。いずれかから2 GBを引き出すと、ほぼ確実にシステムのエントロピーが完全に使い果たされるため、しばらくの間暗号化を行わないでください。
CVn

1

ftp://ftp.fsf.hu/testfiles/maketestfiles.sh

またはSeekは、必要なファイルのサイズ(バイト単位)-1です。

dd if=/dev/zero of=filename.big bs=1 count=1 seek=1048575 # 1 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=10485759 # 10 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=104857599 # 100 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=1073741823 # 1024 MByte

dd if=/dev/zero of=filename.big bs=1 count=1 seek=42949672959 # 40960 MByte
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.