10対応:巨大サイズのファイルを簡単に作る(fsutilコマンド編)fsutilコマンドを使うと、数GBや数TBといったサイズの巨大なファイルを非常に簡単に、素早く作成できる。して作成したファイルを使うと、ディスク上の領域を強制的に確保したり、ディスクやネットワークの性能測定などに利用したりできる。2016巨大なファイルを使ってディスクやネットワークの速度を測定するディスクやネットワークなどの性能(速度)がどのくらい出ているかを手っ取り早く調べるには、ある程度大きなデータファイルを用意しておいて、その読み書き速度や送受信速度を調べると簡単だ。厳密なベンチマークツールがなくても、ファイルをコピーさせながら、その速度をパフォーマンスモニターで見たり、完了するまでの時間を測定したりするだけでも大まかな速度は分かるだろう。大きなファイルをコピーさせ、そのときのパフォーマンスモニターの値などを確認すれば、ディスクやネットワークなどの速度を簡単に調べることができる。これを行うには、数十〜数百GB以上のサイズのテストファイルが必要になるが、そのためには「fsutil.exe」というコマンドがとても便利だ。OSのコマンドプロンプト上で利用できるCUIのツールである。fsutilには数多くのサブコマンド(オプション)があるが、その中に「指定されたサイズのファイルを作成する」という非常に単純な機能のサブコマンドがある。使い方は次の通りである。<サイズ><ファイル名>:作成したいファイルの名前。同名のファイルやフォルダが存在しているとエラーなので、必要ならあらかじめ削除しておくこと<サイズ>:作成するファイルのサイズ。10進数か、0xで始まる16進数形式で指定する。指定可能な最大サイズは対象となるファイルシステムや空き領域サイズによるこのコマンドでは、指定された名前のファイルを、指定されたサイズで作成する。100GBちょうど(100×1024×1024×1024=107,374,182,400=0x1900000000)のファイル「testfile」を作成するには、次のようにする。createnewコマンドを使うと、ボリュームいっぱいになるような大きなファイルでも非常に簡単に素早く作成できる。OSのバージョンによって、fsutilで利用できるサブコマンドは少しずつ異なる。7など、一部のOSでは必要。その場合は管理者権限でコマンドプロンプトを起動して実行すること)。書き込みが許可されていて、ボリューム上に作成のための十分な空き領域があればファイルを作成できる。このコマンドを使ってファイルを作成する場合、対象となるファイルがNTFSやReFSボリューム上ならば、どんなに大きなファイルでも、すぐに作成される(TIPS「NTFSとReFSの違い」も参照)。ボリュームの空き領域が少なかったり、非常に低速なマシンなどを使っていたりするとしばらく待たされることがあるが、それでもせいぜい数秒以内で作成される。[注意]fsutilで作成されたファイルの内容はゼロデータのみfsutilコマンドで作成されたファイルを読み出すと、全てゼロばかりが返ってくる。16進数でいうと、0x00というバイトデータばかりが詰まったファイルに見える。ゼロ以外の値を返すようにはできない。このファイルから読み出しを行っても、実際にディスクからゼロデータ(が含まれたブロック)を読み出してくることはない。ディスク上のブロックとしては確保されているが、その部分のデータは「無効(validではない)」という状態になっている。そのため、ディスクにアクセスすることなく、ゼロデータが直ちに返される(仕組みについては後述)。このような特性があるため読み出し速度の測定などに使う場合は注意が必要である。別のファイルにコピーするか(こうすると実際にディスクに書き込まれ、以後は本当にディスクから読み出すことになる)、負荷なしでゼロデータを読み出せる特殊なファイルと割り切って、主に書き込みテストに利用するとよいだろう。ネットワーク越しに読み出した場合はネットワーク部分がボトルネックになるので、実際にディスクから読み出しているかどうかは問題にはならないだろう。作成した巨大なファイルの使い方このように、fsutilコマンドを使えば巨大なファイルを簡単に作成できるが、いったいそれが何の役に立つのか、とお考えかもしれない。いろいろな使い方があるが、例えば次のような利用が考えられる。(テストなどで使うための)固定長のダミーデータファイルとして利用するディスク(ファイルシステム)の読み書き速度を測定するネットワーク(ファイル共有サービス)の送受信速度を測定するボリュームをわざと満杯(に近い状態)にして、ディスクフル時のシステムの挙動をテストするなるべく連続したブロックにファイルが割り当てられるように、あらかじめファイル全体の領域を確保しておくこのようなファイルを使って、実際にディスクやネットワークの速度を測定する方法などについては、今後別TIPSで紹介する。createnewコマンドでは、ディスクにデータを書き込むことなくファイルを作成している。そのためファイルの作成はすぐに完了する。NTFSやReFSには、ファイルとして利用する領域(ディスク上のブロック)は確保するが、実際にはデータは書き込まないという機能があり、それを使っているのでファイルの作成はすぐに終わる。データを読み出そうとすると、実際にはディスクから読み出すことなく、ゼロデータが返される。データを書き込むと、次回からは実際にそのブロックから読み出すことになるので、読み出しのための時間がかかる。スパースファイル(疎なファイル→こちら参照)と違って、実際にファイルデータのためのブロックは割り当てているので、ディスクの空き領域は作成されたファイルの分だけ減少する。このような挙動は、NTFSやReFSにおけるファイルとそのデータ用ブロックの割り当ての仕組みに基づいている。Length)」という属性がある。ファイルの先頭から末尾EOFまでの距離がいわゆる「ファイルサイズ」であり、dirコマンドなどではこれがファイルサイズとして表示されている。VDLとは、ファイルに書き込まれているデータの実際のバイトサイズである。createnewコマンドでファイルを作成すると、VDLが0(=ファイルの先頭位置)になっている。VDLからEOFまでの間のデータが要求されると、ゼロデータが返される。これが、ファイルがゼロデータばかりに見える理由である。queryvaliddataコマンドを使うと、有効なデータ部分の長さの情報が得られる。createnewで作成したファイルはVDLが0だが、コピーしたファイル(通常のファイル)のVDLは、ファイルサイズと一致している。createnewコマンドを実行すると、実際に書き込みが完了するまで戻ってこない。FATでは最大ファイルサイズが2GB(もしくは4GB)に制限されているので、その点にも注意していただきたい。TIPS「ファイルシステムの制限—2G/4GBytes超のファイルに注意」も参照のこと。【2019/02/06】最新状況に合わせて、内容を更新しました。XP以降のOSを対象OSに加え、記述を一部修正しました。【2002/09/28】初版公開。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。