ファイル断片化の調査

Microsoft 365以外のトピック
この記事は約6分で読めます。

ファイルの断片化

Windows に限らず、ディスクへのファイルの読み書きを繰り返していると、ファイルが断片化することがあります。「断片化」(フラグメンテーション)とは、ファイルがディスクの連続して読み書きできない物理的に離れた複数の場所に配置されることで、読み書きが繰り返されることでサイズが増大していくようなファイル(ログファイル、データベースファイル、Word や Excel などの編集可能なドキュメント ファイル)で発生しやすい現象です。

ハードディスク(HDD)ではファイルが断片化すると磁気ヘッドのシーク時間・サーチ時間が増大し、ファイル アクセス時間が長くなるため、システム全体のパフォーマンスに影響が出ます。SSD など現在のストレージではこのような影響はほぼ発生しませんので現在のシステム環境では無縁の問題のように思うかもしれませんが、大容量のデータディスクなどでハードディスクを利用するシナリオもありますので、断片化の影響を考慮する必要か完全に無くなるわけではありません。

断片化の調査

ディスクの断片化がどの程度発生しているのかは、コマンドを利用して調査できます。管理者として実行したコンソールで、

defrag c: /a /u

を実行すると、C ドライブの断片化の分析と結果の表示が行われます。「C:」の部分を他のドライブ名に置き換えれば、別のドライブの分析ができます。

また同様に管理者として実行した PowerShell コンソールで

Optimize-Volume -DriveLetter C -Analyze -Verbose

を実行しても、C ドライブの断片化の分析と結果の表示が行えます。-DriveLetter オプションに別のドライブ名を指定して、別のドライブの分析を行うこともできます(defrag コマンドと異なり、ドライブ名の後の “:” が不要である点に注意していください)。

なお、いずれの方法でも結果の表示に書かれているように 64MB より大きなサイズのファイルは断片化の分析から除外されています。また実際のデフラグでも 64MB 以上のサイズのファイルは対象となりません。これは大きなサイズのファイルは統計的に断片化によるパフォーマンスの低下に影響を与えないこと、大きなサイズのファイルの断片化の解消(再配置)にはコストがかかる(大きな連続空き領域を確保して再配置が必要なため処理が複雑になり時間もかかる)ことが理由です。

特定のファイルの断片化の確認

上記の方法でディスク全体の断片化の傾向は確認できますが、特定のファイルがどの程度断片化しているかを調べることもできます。パフォーマンスに影響のある特定のファイルのみ断片化を確認することが可能です。

特定のファイルの断片化状態を確認するには、以下のコマンドを管理者権限で実行します。<PATH> は調査対象のファイルのパスです。

fsutil file queryextents <PATH>

例えば、C:\Log\BigsizeLog.text の断片化は、以下のコマンドで確認できます。

fsutil file queryextents C:\Log\BigsizeLog.text>

以下は Windows のインストール イメージ ISOファイルについてコマンドでコマンドを実行したスクリーンショットです。このようにファイルが格納されている状態が表示されますので、断片化の状態を把握できます。ただしここで表示されているのは「エクステント」で、ファイル・システム内のファイル用に予約された連続したストレージ領域のことです。そのためエクステントが別れていても実際の配置が不連続とは限りません(エクステントは管理用の単位であって、物理的な単位ではないため)。

実際に物理的な断片化が発生してるかは、エクステントが連続しているかを確認する必要があります。この結果に表示されている VCN は仮想クラスター番号、LCN は論理クラスター番号で、「LCN の値+クラスターの値」と次の行の LCN の値が一致している場合、エクステントは連続しています。

この出力では以下のようにエクステントが不連続になっている部分が確認できます。これは断片化が発生していることを示しています。

クラスタ サイズ(4KB)より小さなサイズ(2KB)で断片化しないファイルであれば、以下のようにファイルが格納されるエクステントは1つになります。

計算が必要なので少し面倒ですが(目視でも明らかに LCN が飛んでいたり戻っていれば分かりますが)、これで特定のファイルの断片化状態が分かります。

最適化の実行

ディスク全体の断片化が進んでいる場合は、ディスクの最適化を行うことでパフォーマンスを改善できます。最適化は defrag コマンド、PowerSell の Optimazi-Volume コマンド、または「ドライブの最適化」ツールを使って実行できます。

最適化を行うと、ハードディスクではファイルの物理的な再配置が行われますが、SSD の場合は Trim コマンドの発行など SSD に固有の処理が行われ、物理的な再配置は行われません。

またデスクトップ Windows では既定でディスクの最適化がタスクとしてスケジュールされているので、通常は手動で最適化を行う必要性はありません。Windows Server の場合はスケジュールされたタスクでは「スラブ統合」が行われ、最適化の処理は行われません。必要に応じて手動または新規にタスクを作成して最適化を行います。「スラブ統合」については以下を参照してください。

なお、ディスクにダーティ ビットが設定されている場合は最適化が行えません。ダーティ ビットは、ファイル システムが一貫性のない状態になっている可能性がある場合に設定されるフラグです。この場合はダーティ ビットをクリアしてから最適化を行う必要があります。ダーティ ビットが設定されているかどうかは以下のコマンドで確認できます(C: ドライブを確認する場合)。

fsutil dirty query c:

ダーティ ビットのあるドライブは Windows の起動時に自動的にディスクのチェックが行われ、完了して正常性が確認されればダーティ ビットがクリアされます。そのためダーティ ビットが設定されていたら、再起動するか手動で chkdsk を実行してください。

この記事を書いた人

MurachiAkira
タイトルとURLをコピーしました