conf t

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

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

Linuxでサイズ指定でダミーファイルを作成したい!

Linuxでダミーファイルを手っ取り早く作りたい時ありませんか?

私の場合は自分で作成したシェルスクリプトをテストする時に必要になりました。

monaski.hatenablog.com

しかしこのスクリプト、ファイルサイズによって分岐していましたので、
ダミーファイルのサイズを指定したかったんです。
そこで今回はファイルサイズを指定してダミーファイルを作成する方法をご紹介いたします!

Linuxでサイズ指定でダミーファイルを作成するコマンド

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

# fallocate -l 1G 1gig_f

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

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

fallocateとddの比較 1Gのファイル作成完了時間

試しに1Gのファイル作成で何秒かかるかtimeコマンドで測定してみました。

fallocateの完了時間

まずはfallocate。一瞬で終わりました。

# time fallocate -l 1G 1gig_f

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

ddの完了時間

次に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

fallocateとddの比較 5Gのファイル作成完了時間

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

fallocateの完了時間

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

# time fallocate -l 5G 5gig_f

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

ddの完了時間

次に。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

参考:

http://ram.kossboss.com/dd-fallocate-truncate-making-big-files-quick/ Quickly create a large file on a Linux system? - Stack Overflow