conf t

インフラエンジニアのメモ

Linuxでサイズ指定してダミーファイルを作成する方法

Linuxでサイズ指定してダミーファイルを作成する際は、fallocateコマンドを使います。

# fallocate -l 1G 1gig_f

書式
fallocate -l <サイズ> <ファイル名>

ddコマンドでも同様のことができますが、fallocateを使うことを推奨します。
ddはファイル作成完了までに時間がかかるためです。
ddコマンドはファイル作成の際に実際にゼロを書き込んで作成しているためファイル作成完了まで遅いです。
一方fallocateはディスク領域を予約しているだけで実際にはディスク書き込みは発生しないため素早く処理が完了します。
さらにddコマンドはオプションが覚えずらく、毎回使い方をグーグル先生に聞くというデメリットもあります。

試しに1Gのファイル作成で何秒かかるかtimeコマンドで測定してみました。
まずはfallocate。一瞬で終わりました。

# time fallocate -l 1G 1gig_f

real    0m0.003s
user    0m0.000s
sys     0m0.001s

次にdd。
18秒かかりました。やはり遅いです。

# time dd if=/dev/zero of=01GBfile bs=1024 count=$((1024 * 1024))
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB) copied, 18.5482 s, 57.9 MB/s

real    0m18.567s
user    0m0.153s
sys     0m3.162s

次はさらに5Gのファイル作成で試してみました。

まずはfallocate。作成時間が1Gの時とほとんど変わりません。
ディスクサイズを予約しているだけなので、サイズが増えても時間は変わらないわけですね。

# time fallocate -l 5G 5gig_f

real    0m0.011s
user    0m0.001s
sys     0m0.006s

次に。dd 2分8秒かかりました。おそーい。
実際にディスクに書き込んでいるため、 作成するファイルのサイズが大きくなればそれに比例して作成時間もかかります。

# time dd if=/dev/zero of=10GBfile bs=1024 count=$((1024 * 1024* 5))
5242880+0 records in
5242880+0 records out
5368709120 bytes (5.4 GB) copied, 128.645 s, 41.7 MB/s

real    2m8.648s
user    0m0.778s
sys     0m15.276s

参考:

dd vs fallocate vs truncate - making big files quick - kossboss Quickly create a large file on a Linux system? - Stack Overflow