「1GBのテストデータを用意してくれ。至急だ」
開発の現場で、あるいはインフラの移行作業中に、そんな指示が飛んでくることがあります。あなたならどうしますか?1GB分の画像やドキュメントをかき集め、フォルダに詰め込み、コピーが終わるのをじっと待つ。あるいは、適当なテキストファイルを力技で巨大化させるスクリプトを自作する。
しかし、そんな「泥臭い作業」は今日で終わりにしましょう。1GBの壁を、わずか1行の呪文で越える。それが、Windowsに標準搭載された「fsutil」という魔法です。
この記事では、PowerShellやコマンドプロンプトを使い、文字通り「一瞬」で指定サイズのダミーファイルを生成する技術を解説します。もはやファイル作成はコピーの待ち時間ではありません。あなたの「宣言」の瞬間、そこに巨大な構造体が出現するのです。
なぜわざわざダミーファイルを作るのか?
「中身のないファイルに、何の価値があるのか?」と疑問に思うかもしれません。しかし、システム開発やサーバー運用の世界において、この「中身のない巨大な存在」は、撮影スタジオの背景板(書き割り)のような重要な役割を果たします。遠目には豪華な街並みに見える背景板がなければ映画が撮れないように、ダミーファイルがなければ検証できないシナリオが山ほどあるのです。
テスト環境での容量不足シミュレーション
最も頻繁に直面するのは、ストレージの限界を試すシーンです。例えば、「ディスク容量が残り1%になったとき、基幹システムは正しくアラートを出すか?」「ログファイルが溢れた際に、自動削除スクリプトは正常に動作するか?」といった検証です。
実際に運用データが溜まるのを待っていては、検証だけで数週間かかってしまいます。そこでダミーファイルの出番です。fsutilを使えば、100GBでも1TBでも、ストレージの空き領域を瞬時にピンポイントで埋めることができます。「SNSでは『ストレージ負荷をかけずに容量枯渇の挙動を再現できる手段として必須』と語られることも多い」ほど、現場では重宝されている手法です。
これは、Amazonの巨大な箱に空気だけを入れて届けるようなもの。物流(ストレージ占有)の負荷だけを試したいなら、中身が空気であっても、その「体積」という事実さえあれば十分なのです。
【最短】fsutilコマンドによる生成レシピ
それでは、実際に1GBのファイルを生成してみましょう。手順は極めてシンプルですが、一点だけ注意があります。この操作には「管理者権限」が必要です。fsutilはファイルシステム(MFT:マスターファイルテーブル)というOSの根幹に直接作用するため、一般ユーザーの権限では実行できないようロックがかかっています。
コマンドと数理変換(1GB = 1,073,741,824バイト)
PowerShellまたはコマンドプロンプトを「管理者として実行」し、以下のコマンドを打ち込んでください。
fsutil file createnew dummy.dat 1073741824
実行した瞬間に、カレントディレクトリに「dummy.dat」という名前の1GBのファイルが出現します。あまりの速さに、「本当に成功したのか?」と疑うかもしれません。しかし、ファイルのプロパティを開けば、しっかりと1,073,741,824バイトと表示されているはずです。
ここで重要なのが、サイズ指定が「バイト単位」であるという点です。Windowsのプロパティ上の表記と一致させるには、以下の計算が必要になります。
- 1KB = 1,024バイト
- 1MB = 1,024 × 1,024 = 1,048,576バイト
- 1GB = 1,024 × 1,024 × 1,024 = 1,073,741,824バイト
「1GBなのに、なぜ1,000ではなく1,024で割るのか?」という質問を新人から受けることは少なくありませんが、コンピュータの世界では2の10乗(1,024)を単位の区切りとするのが標準です。この「単位の罠」にハマると、期待したサイズより微妙に小さいファイルが出来上がってしまうため、数理変換は慎重に行いましょう。
注意点は?管理者権限とスパースファイルの違い
fsutilによるファイル生成がなぜこれほど速いのか。その理由は、このコマンドが「実体のない銀行の信用創造」のような仕組みで動いているからです。
なぜ「一瞬」で終わるのか?仕組みの解説
通常のファイル作成は、ディスク上の領域に「0」などのデータを実際に書き込んでいきます。そのため、1GBのファイルを作るには、1GB分のデータを物理的にディスクへ流し込む時間が必要です。
一方、fsutil(createnew)は、「この場所に1GBの領域を確保したことにする」というインデックス情報だけをファイルシステムに書き込みます。これは、実際に料理が並んでいないのに「100名様貸切」の予約札をテーブルに置くようなもの。客(OS)からはその席が埋まっているように見えますが、厨房(ディスクI/O)は何も動いていません。
ただし、ここに一つの落とし穴があります。この方法で作られたファイルの中身はすべて「NULL(空)」です。「業界内では、圧縮機能や重複排除が効くストレージ上では『正しい検証』にならない場合があるという見方が広がっています」。例えば、クラウドストレージや最新鋭のNASにこのファイルをアップロードすると、中身がないと判定され、データ転送がスキップされたり、一瞬で圧縮されたりすることがあります。
実データとしての負荷(ネットワーク転送速度など)を厳密に測る必要がある場合は、fsutilではなく、ランダムデータを生成するスクリプトを検討すべきでしょう。この「実態」と「形式」の分離を理解して使い分けることこそ、プロの道具選びと言えます。
PowerShellでの自動化スクリプト例
さて、毎回「1073741824……」と暗記した数字を打ち込むのはスマートではありません。PowerShellの強みを活かして、サイズを自由に指定できる関数を作っておきましょう。
サイズを指定してサクッと作る関数化のコツ
以下のコードをPowerShellのプロファイルに追加するか、スクリプトとして保存してください。
function New-DummyFile {
param (
[string]$Name = "dummy.dat",
[int]$GB = 1
)
$bytes = [int64]$GB * 1024 * 1024 * 1024
fsutil file createnew $Name $bytes
Write-Host "成功:$GB GBのダミーファイル '$Name' を生成しました。" -ForegroundColor Cyan
}
# 使い方:3GBのファイルを作りたい場合
# New-DummyFile -GB 3 -Name "test_3gb.bin"
この関数を使えば、「1GBの粘土をこねる作業」を「1GBと書かれた看板を立てる作業」に変換できます。さらに大きなテラバイト(TB)級の検証を行う場合は、定数リストをスクリプトに組み込んでおくのも良いでしょう。
「SNSや技術ブログでは、CI/CD(自動テストパイプライン)の中にこのステップを組み込み、環境構築を自動化している例も見かける」ほど、このテクニックは拡張性に優れています。手作業によるコピー待ちで発生していた年間数十時間のロスは、この数行のスクリプトで、丸数日分の休暇に相当する時間に変わるはずです。
まとめ
この記事では、fsutilを活用して1GBのダミーファイルを一瞬で生成する「黒魔術」のようなテクニックを紹介しました。
要点をまとめると以下の通りです。
- fsutilは「予約札」を置くだけの技術。 物理的な書き込みをスキップするため、サイズに関わらず生成は一瞬。
- 管理者権限とバイト計算が必須。 1GBは「1,073,741,824バイト」であることを忘れずに。
- 用途を見極める。 容量不足のシミュレーションには最適だが、重複排除が効く環境では注意が必要。
今日からあなたができる最小のアクションは、まず管理者権限でPowerShellを開き、1MB程度の小さなダミーファイルを試しに作ってみることです。そのスピードを体感した瞬間、これまでの苦労がいかに不要なものだったかに気づくでしょう。
ディスクを支配する。中身を語らずに。この1行の呪文を使いこなし、待ち時間という名のタイムロスから自分自身を解放してください。その先にこそ、より創造的で本質的な「テストと開発」の時間が待っています。
コメント