検索
連載

【Windows 11対応】巨大サイズのファイルをfsutilコマンドで簡単に作るTech TIPS

fsutilコマンドを使うと、数百GBや数TBといったサイズの巨大なファイルを非常に簡単に、素早く作成できる。こうして作成したファイルを使うと、ディスク上の領域を強制的に確保したり、ディスクやネットワークの性能測定などに利用したりできる。

Share
Tweet
LINE
Hatena
「Tech TIPS」のインデックス

連載目次

より正確なパフォーマンスを測定するために、転送完了まで時間のかかる巨大なファイルを用意したい 巨大サイズのファイルを「fsutil」コマンドで簡単かつ素早く作る

対象OS:Windows 8.1/Windows 10/Windows 11、Windows Server 2012/Windows Server 2012 R2/Windows Server 2016/Windows Server 2019/Windows Server 2022


巨大なファイルを使ってディスクやネットワークの速度を測定する

 ディスクやネットワークなどの性能(速度)がどのくらい出ているかを手っ取り早く調べるには、ある程度大きなデータファイルを用意しておいて、その読み書き速度や送受信速度を調べると簡単だ。

 厳密なベンチマークツールがなくても、ファイルをコピーさせながら、その速度をタスクマネージャーやパフォーマンスモニターで見たり、完了するまでの時間を測定したりするだけでも大まかな速度は計測できる。

ファイルのコピーによる読み書き速度の測定
ファイルのコピーによる読み書き速度の測定

 これを行うには、数十〜数百GB以上のサイズのテストファイルが必要になる。本Tech TIPSでは、「fsutil.exe」というコマンドを利用して、こうした巨大なファイルを簡単かつ素早く作成する方法を紹介する。

fsutilコマンドで巨大なファイルを作成する

 Windows OSで巨大なファイルを作成するには「fsutil.exe」というコマンドがとても便利だ。これはコマンドプロンプトなどで利用できるCUIのツールで、Windows OSには標準でインストールされているため、事前の作業なしにすぐ使える。

 fsutilには数多くのサブコマンド(オプション)が存在する。その中に「指定されたサイズのファイルを作成する」という非常に単純な機能のサブコマンドがある。

fsutil file createnew <ファイル名> <サイズ>

<ファイル名>: 作成したいファイルの名前。すでに同名のファイルやフォルダが存在しているとエラーなので、必要ならあらかじめ削除しておくこと
<サイズ>: 作成するファイルのサイズ。10進数か、「0x」で始まる16進数形式で指定する。指定可能な最大サイズは対象となるファイルシステムや空き領域サイズによる



 このコマンドでは、指定された名前のファイルを、指定されたサイズで作成する。例えば100GBちょうど(100×1024×1024×1024=107,374,182,400=0x19 0000 0000)のファイル「testfile」を作成するには、次のようにする。

※10進数指定の場合
fsutil file createnew testfile 107374182400

※16進数指定の場合
fsutil file createnew testfile 0x1900000000



fsutilで100GBのファイルを作成する
fsutilで100GBのファイルを作成する
fsutil file createnewコマンドを使うと、ボリュームいっぱいになるような大きなファイルでも簡単に素早く作成できる。これはWindows 11上での実行例。Windows OSのバージョンによって、fsutilで利用できるサブコマンドは少しずつ異なる。

 このコマンドを実行する場合、基本的には管理者権限は不要である(一部のWindows OSでは必要。その場合は管理者権限でコマンドプロンプトを起動して実行すること)。書き込みが許可されていて、ボリューム上に作成のための十分な空き領域があればファイルを作成できる。

 このコマンドを使ってファイルを作成する場合、対象となるファイルがNTFSやReFSボリューム上ならば、どんなに大きなファイルでも、すぐに作成される(Tech TIPS「NTFSとReFSの違い」も参照)。ボリュームの空き領域が少なかったり、非常に低速なマシンなどを使っていたりするとしばらく待たされることがあるものの、それでもせいぜい数秒以内で作成される。

 一方、FATファイルシステムやexFAT上だと、指定したファイルサイズが大きいほど作成完了までに時間がかかる。特にFAT/exFATでフォーマットされたSDカードやUSBメモリでは、作成がなかなか終わらないこともあるので注意したい。

[注意]fsutilで作成されたファイルの内容はゼロデータのみ

 fsutilコマンドで作成されたファイルを読み出すと、全て「0(ゼロ)」ばかりが返ってくる。16進数でいうと、「0x00」というバイトデータ(ゼロデータ)ばかりが詰まったファイルに見える。ゼロ以外の値を返すようにはできない。

 また、このファイルから読み出しを行っても、実際にディスクからゼロデータ(が含まれたブロック)を読み出してくることはない。ディスク上のブロックとしては確保されているものの、その部分のデータは「無効(validではない)」という状態になっている。そのため、ディスクにアクセスすることなく、ゼロデータが直ちに返される(仕組みについては後述)。

 このような特性があるため、読み出し速度の測定などに使う場合は注意が必要である(一瞬で読み出しが完了するので、実際よりはるかに高い速度が計測されてしまう)。いったん別のファイルにコピーするか(こうすると実際にディスクに書き込まれ、以後は本当にディスクから読み出すことになる)、負荷なしでゼロデータを読み出せる特殊なファイルと割り切って、主に書き込みテストに利用するとよいだろう。なお、ネットワーク越しに読み出した場合はネットワーク部分がボトルネックになるので、実際にディスクから読み出しているかどうかは問題にはならないだろう。

作成した巨大なファイルの使い方

 このように、fsutilコマンドを使えば巨大なファイルを簡単に作成できる。だが、いったいそれが何の役に立つのか、と思うことだろう。例えば次のような使い方が考えられる。

  • (テストなどで使うための)固定長のダミーデータファイルとして利用する
  • ディスク(ファイルシステム)の読み書き速度を測定する
  • ネットワーク(ファイル共有サービス)の送受信速度を測定する
  • ボリュームをわざと満杯(に近い状態)にして、ディスクフル時のシステムの挙動をテストする
  • なるべく連続したブロックにファイルが割り当てられるように、あらかじめファイル全体の領域を確保しておく

[補足]fsutil file createnewで作成されるファイルの仕組み

 fsutil file createnewコマンドでは、ディスクにデータを書き込むことなくファイルを作成している。そのためファイルの作成はすぐに完了する。NTFSやReFSには、ファイルとして利用する領域(ディスク上のブロック)は確保しても、実際にはデータは書き込まないという機能があり、それを使っているのでファイルの作成はすぐに終わる。そしてデータを読み出そうとすると、実際にはディスクから読み出すことなく、ゼロデータが返される。

 だがいったんデータを書き込むと、次回からは実際にそのブロックから読み出すことになるので、読み出しのための時間がかかる。またスパースファイルと違って、実際にファイルデータのためのブロックは割り当てているので、ディスクの空き領域は作成されたファイルの分だけ減少する(「スパースファイル」については、「Windows 2000とは何か?」の「6.Windows 2000 Professionalの概要(4)」内の「巨大なファイルを操作可能にするSparse File」参照のこと)。

 このような挙動は、NTFSやReFSにおけるファイルとそのデータ用ブロックの割り当ての仕組みに基づいている。

 NTFSやReFSにおけるファイルには、「長さ(ファイルサイズ)」の他に、もう一つ「有効なデータ長(VDL:Valid Data Length)」という属性がある。ファイルの先頭から末尾EOFまでの距離がいわゆる「ファイルサイズ」であり、dirコマンドなどではこれがファイルサイズとして表示されている。

 VDLとは、ファイルに書き込まれているデータの実際のバイトサイズである。通常、この値はファイルサイズと一致している(EOFの直前がVDL)。ところが、fsutil file createnewコマンドでファイルを作成すると、VDLが「0」(=ファイルの先頭位置)になる。そしてVDLからEOFまでの間のデータが要求されると、ゼロデータが返される。これが、ファイルがゼロデータばかりに見える理由である。

 ファイルのVDLを確認するには、次のコマンドラインを実行する。

fsutil file queryvaliddata <ファイル名>



「fsutil file queryvaliddata」コマンドでVDL情報を確認する
「fsutil file queryvaliddata」コマンドでVDL情報を確認する

 FATファイルシステムやexFATにはこのような機能はないため、これらのファイルシステムに対してfsutil file createnewコマンドを実行すると、実際に書き込みが完了するまで戻ってこない。またFATでは最大ファイルサイズが2GB(もしくは4GB)に制限されているので、その点にも注意していただきたい。TIPS「ファイルシステムの制限―2G/4GBytes超のファイルに注意」も参照のこと。

■この記事と関連性の高い別の記事


■更新履歴

【2022/03/16】Windows 11に対応しました。

【2019/02/06】最新状況に合わせて、内容を更新しました。

【2011/06/27】Windows XP以降のOSを対象OSに加え、記述を一部修正しました。

【2002/09/28】初版公開。


「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る