とりあえずでっかいファイルが欲しい
ファイルコピーのテストとか、ストレージを埋めたいとかで、サイズの大きなファイルを作りたい時があります。
今まではなんか適当な動画ファイルとかを使っていたのですが、
なんか良い方法はないかなと思って調べたら、
シェルのddコマンドを使った方法が速くて便利でした。
ゼロで埋まったファイルを作る
dd if=/dev/zero of=./big_file000 bs=1M count=1024
このコマンドで、0で埋まった1GBのファイル(big_file000)ができます。
ddはブロック単位でデータのコピーが行えるコマンドだそうです。
オプションの意味は以下のとおりです。
if=/dev/zero
入力として、必ずゼロを返す仮想デバイスを指定
of=./big_file000
出力ファイルのパス
bs=1M
ファイルに書き込むブロックサイズ
count=1024
繰り返しの数。bs * countがデータサイズになる。この場合は1GBになる。
1GBのファイルはあっという間にできてしまいます。
試しに以下のようにして、約50GBのデータを作ってみたところM1 MAXのMacBook Proで所要時間は20秒ほどかかりました。それでも大した速さだと思います。
dd if=/dev/zero of=./big_file000 bs=1M count=51200
ランダムな中身のファイルを作る
入力に /dev/urandam
を指定します。ランダムな値を返す仮想デバイスだそうです。
乱数の生成処理が挟まるのでファイルの作成時間は長くなります。
dd if=/dev/urandom of=./big_file000 bs=1M count=1024
任意の文字列の繰り返しのファイルを作る
特定のパターンでファイルを埋める場合は、pythonでやっちゃった方が早いみたいです。
python -c で直後の文字列を実行してくれるんですね。知らなかった。
python -c "f = open('./big_file000', 'w'); f.write('1234567890' * (1000000000 // 10)); f.close()"
Pythonのopen()関数でファイルを書き込みモードで開き、write()メソッドで指定した文字列を必要な回数繰り返し書き込んでいます。そして、close()メソッドでファイルを閉じています。
(1000000000 // 10)という部分は1GBを"1234567890"の長さ(10バイト)で割って繰り返しの回数を計算しています。