Bashでテスト用に1GiBの大容量ファイル(バイナリ/テキスト)を作成する方法いろいろ
はじめに
アップロード・ダウンロード速度、通信速度を確認するために、サイズの大きなファイルを作成したいときがあります。
よく知られた方法ばかりですが、1GB の大容量のファイルを作成する方法を紹介します。
検証環境
NULL 文字(0x00)で埋められた「バイナリファイル」を作成
最もかんたんかつ高速なのは、 dd
コマンドを使って NULL 文字(0x00)で埋められたバイナリファイルを作成する方法 です。
bs でブロックサイズ 1024bytes を指定しています。
このブロックを、count の回数分、つまり 1024**2
回書き込みます。
合計サイズは 1024**3 = 1073741824
となります。
作成されたファイルの容量を確認してみます。
$ ls -l 1Gi
-rw-r--r-- 1 root root 1073741824 3月 8 08:43 1Gi
$ stat 1Gi
File: 1Gi
Size: 1073741824 Blocks: 2097160 IO Block: 4096 通常ファイル
Device: 40h/64d Inode: 7086333 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-03-08 08:43:17.848731009 +0900
Modify: 2022-03-08 08:43:20.304731010 +0900
Change: 2022-03-08 08:43:20.304731010 +0900
Birth: 2022-03-08 08:43:17.848731009 +0900
サイズは 1024 ** 3 = 1073741824 bytes
となりました。
ランダムデータで埋められた「バイナリファイル」を作成
NULL 文字で埋められたファイルですが、
すべての内容が同じ NULL 文字ですので 処理の過程で圧縮が適用されるような仕組み(ファイルシステムやネットワーク通信)では
想定よりも高性能で扱われてしまう可能性があります。
テスト用の巨大ファイルといえどランダムデータのほうが良い場合は、 dd
コマンドの引数を少し書き換えてやります。
サイズだけを見ると先程のファイルと同じサイズで違いがわかりません。
両方のファイルの先頭 8 バイトを確認してみます。
od
コマンドで確認すると、
- 先ほどの
if=/dev/zero
オプションを指定して作成したファイルはすべての0
となっています。 - 対して今回作成した
if=/dev/urandom
オプションを指定して作成したファイルはランダムな値となっています。
圧縮してみると更に違いがわかります。
すべて NULL 文字で詰められたファイルの圧縮済みファイルのサイズは非常に小さいです。
対して、 if=/dev/urandom
オプションを指定したファイルは圧縮率が低く、サイズがあまり変わっていません。
ランダムデータで埋められた「テキストファイル」を作成
ここまでは バイナリファイル の作成コマンドでしたが、次は テキストファイル の作成方法について紹介します。
/dev/urandom
を使うのは同じですが、出力内容をテキストに変換してやります。
head
コマンドに -c
オプションを付けて、指定したバイト数だけ抽出しています。
先頭の数行を出力し確認してみます。
テキストファイルとなっています。
ファイルサイズも確認してみます。
$ ls -l
合計 1048576
-rw-r--r-- 1 root root 1073741824 3月 8 09:10 1Gi.txt
$ stat 1Gi.txt
File: 1Gi.txt
Size: 1073741824 Blocks: 2097152 IO Block: 4096 通常ファイル
Device: 40h/64d Inode: 7086334 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-03-08 09:09:59.648677000 +0900
Modify: 2022-03-08 09:10:02.640677002 +0900
Change: 2022-03-08 09:10:02.640677002 +0900
Birth: 2022-03-08 09:09:59.648677000 +0900
1024**3 = 1073741824 bytes
となっています。
サイズは 1GiB となっていますね。
macOS の場合は mkfile
コマンドも利用可能
macOS 環境では、 mkfile
コマンドを使うこともできます。
中身を見ると NULL 文字 で満たされているようなので、 dd
コマンドと同じですね。
ひとこと
巨大なバイナリファイルの作成例は紹介されていることが多いですが、
巨大なテキストファイルの作成例は参考にしていただけるのではないでしょうか?
ディスカッション
コメント一覧
まだ、コメントがありません