Windows Server 2012 / 2012R2 以降のデフラグの変更点

こんにちは、Windows プラットフォーム サポートの鎌滝です。

デフラグは Windows XP/2003 世代から実施されていたファイル システム レベルのメンテナンスであり、断片化の起きたファイルのディスク I/O のパフォーマンスを向上させるために実施されます。今回は Windows Server 2012 以降のデフラグに追加された機能とデフラグを実施する必要性について、ご紹介したいと思います。

本項は Windows Server 2012 以降のデフラグにについて書かれた以下のブログをもとに、日本語での説明を行います。

What's New in Defrag for Windows Server 2012/2012R2

 

1. デフラグの有効性

そもそも、デフラグは何のために行われるのか、実施する必要はあるかについて、説明します。なお、ここで議論するデフラグはファイルの断片化を解消する "従来のデフラグ" です。
ファイルへの書込み、消去、サイズ変更が継続的に実施される環境で、物理ディスク上で継続した領域を確保できない場合に、その変更は別の空き領域に書き込まれるため、ファイルの断片化が起こるのは自然な現象です。ファイルに断片化が起きた場合、そのファイルの読み書きには断片化が起きていないファイルより多くの時間を要するため、ディスク I/O のパフォーマンスの観点からデフラグは有効です。
また、デフラグを実施することで、ディスク上に連続した空き領域を確保できます。 Windows Server バックアップなどでボリューム シャドウ コピー サービス (VSS) を使用する場合、スナップショットの準備に Diff Area と呼ばれる連続した領域が必要になります。極度な断片化を解消し、連続した空き領域確保する観点からもデフラグは有効です。
では、この "従来のデフラグ" を実施する必要はあるのか、の説明の前に、デフラグ コマンドに追加されたオプションについて次項で説明します。結論はその後の項番 3 で触れたいと思います。

 

2. Windows Server 2012 以降で追加されたデフラグ コマンドの機能

Windows server 2012 のデフラグ機能には大幅な機能強化と変更点があります。その影響で以下のオプションが追加されています。

       /D     従来の最適化を実行します (これが既定値です)。
       /K     指定したボリュームに対してスラブ統合を実行します。
       /L     指定したボリュームに対してトリムを再実行します。
       /O     各メディア タイプに適した最適化を実行します。

さらに、Windows Server 2012 R2 では以下のオプションが追加になりました。

       /G    指定したボリュームの記憶域階層を最適化します。

Windows Server 2012 以降では、ディスクの種類 (メディア タイプ) ごとに適切なストレージの最適化を行えるように考慮された設計となっています。近年はストレージも仮想化が進み、複数のサーバーで 1 台のストレージ装置を共用すること多くあります。そのような環境では、シンプロビジョニングというプロビジョニング方式によりディスクを割り当てることがあります。シンプロビジョニングとは、ストレージの仮想化を行う技術のひとつで、OS に割り当てられたディスク容量のうち、実際に利用している容量のみの物理ストレージを割り当てることで、全体の物理ストレージを効率よく利用するためのディスクの割り当て方法です。また、Windows Server OS としても、"記憶域スペース" という機能により、ストレージの仮想化を行うための "記憶域" を作成することができます。このメディア タイプは管理ツールのドライブのデフラグと最適化 (GUI) の "メディアの種類" という項目から確認することができ、ハード ディスクやシンプロビジョニング対応ドライブ、記憶域などの種類があります。

/K /L のオプションはシンプロビジョニング対応ドライブに対して実行可能なオプションです。通常のハード ディスクを指定しても、エラーとなり実行されません。また、/K で指定するスラブ統合の処理には /L で指定するトリムも含まれます。

/O オプションはメディア タイプに応じてストレージの最適化を行います。メディア タイプがハード ディスクの場合は /D オプション、シンプロビジョニング対応ドライブでは /K および /L オプションなど、デフラグ ツールが実行対象のドライブのメディア タイプを内部的に判断し、そのメディア タイプで実行可能なすべてのデフラグのオプションを指定して実行します。

スラブの統合やトリムなどのストレージ最適化については、トピックが長くなりますので本ブログでは触れませんが、詳細は以下をご参照ください。

Optimizing Windows Server 2012 storage management via PowerShell for both performance and resiliency

また、/G オプションは記憶域階層の最適化を行うオプションです。Windows Server 2012 R2 の新機能として追加された SSD やハード ディスク ドライブを組み合わせたストレージ プールの記憶域階層についての詳細も以下をご参照ください。

Storage Spaces Overview Storage Spaces: How to configure Storage Tiers with Windows Server 2012 R2  What's New in Storage Spaces in Windows Server 2012 R2

 

3. "従来のデフラグ" が必要かどうかの判断方法

ここで冒頭の質問に戻ります。結論から述べると、"従来のデフラグ"  の必要性は環境や使用状況に依存します。
デフラグはパフォーマンスに深刻な問題がある場合は必要ですが、それ以外は時間やリソースを利用する割に、効果が得られず、割にありません。また、パフォーマンスが悪い原因はファイルの断片化だけではありません。例えば、ボリュームに断片化した多くのファイルがあっても、あまり頻繁にアクセスされていない場合は、パフォーマンスに影響をほとんど与えないと考えられます。デフラグが必要かどうかを判断するためには、断片化に比例して、徐々にパフォーマンスを遅くなっているかを定常的に確認する必要があります。また、断片化が問題と判断した場合でも、デフラグを長時間実行することや全体的なコスト(CPU などのシステム リソース) を踏まえ、どれだけ効果的かの検証が必要です。

デフラグ前に Sysinternal ツールの Contig.exe で断片化のレベル チェックができます。
Contig v1.8
以下が出力例です。

この例の場合、空き領域が 13,486 に断片化 (Free space fragments) されていますが、デフラグは必要ないと言えます。
理由は C ドライブには約 96 GB の空き領域があり、最も大きい連続した空き領域 (Largest free space block) は約 54 GB あることから、データはディスク全体に分散していないので、I/O 処理は滞ることはなく、デフラグをしても有効性はありません。

基本的には、バックアップなどの VSS を使用するアプリケーションが Diff Area のための連続した空き領域を確保できないことが原因で失敗した場合など、"従来のデフラグ" の必要性ができたタイミングに手動でデフラグを実行することを推奨します。バックアップの失敗がシステムに大きな影響を与える場合や、継続的に同じ理由で失敗する場合以外は、スケジュールで "従来のデフラグ" を実行することは推奨しません。

 

4. 自動メンテナンス タスクで定期的に実行されるデフラグ

Windows のバージョンごとの既定でスケジューリングされたデフラグ タスクは以下の通りです。なお、"-c" は "/C" と同じオプション指定です。

Windows Server 2008R2: defrag.exe –c
Windows Server 2012: defrag.exe –c –h –k
Windows Server 2012 R2 / 2016: defrag.exe –c –h –k –g
クライアント OS: defrag.exe –c –h –o

Windows Server 2008 R2 では、ストレージの特性 (SCSI ディスク / RAID / シンプロビジョニング対応ドライブ等) は考慮されず、すべてのボリュームに対して "従来のデフラグ" を行っていました。一方、Windows server 2012  / 2012 R2 以降では、"通常" の優先度レベル (既定は "低" ) ですべてのボリュームのスラブ統合 (/K オプション) や記憶域階層の最適化 (/G オプション) を行います。つまり、これらのオプションに対応していないハード ディスクに対してはなにも処理が実行されません。

なお、クライアント OS では /O オプションが指定されており、ハード ディスクには "従来のデフラグ" が実行されるようになっています。

 

5. ドライブのデフラグと最適化 (GUI) からのデフラグ

デフラグの GUI ツールである "ドライブのデフラグと最適化" (dfrgui.exe) から実施する [分析] ボタンと [最適化] ボタンの挙動について紹介します。

[分析] ボタン: デフラグ コマンドの /A オプションと同等の処理が実行されます。
[最適化] ボタン: デフラグ コマンドの /O オプションと同等の処理が実行されます。

 

6. 手動で "従来のデフラグ" を実施する方法

先述のとおり、従来のデフラグは多くの環境に実行する必要がないものとなっています。特に SSD やシンプロビジョニング対応ドライブなどはファイルの断片化がパフォーマンスに影響を与えることがないため、GUI ツールの操作から従来の最適化を実施することができなくなっています。また、先述の通り、Server OS では通常のハード ディスクであっても、OS による自動メンテナンス タスク内で "従来のデフラグ" が行われないよう、設計が変更されております。

そのため、Windows Server 2012 以降、SSD やシンプロビジョニング対応ドライブに対し、連続した空き領域の確保の目的など手動で "従来のデフラグ" を実行する必要がある場合は、defrag コマンドの /D オプションを明示的に指定し、デフラグを実行する必要があります。

また、/O オプションを指定することで、デフラグ ツール内でメディアのタイプ (ハード ディスクやシンプロビジョニング対応ドライブ) を自動的に判断するため、通常のハード ディスクにのみ "従来のデフラグ" を実行したい場合には、/O オプションをご利用ください。

 

7. 仮想環境でのデフラグ

最後に、Hyper-V などの仮想マシン内の OS のデフラグについて、少しだけ触れたいと思います。

基本的には、物理環境と同じように "従来のデフラグ" は必要ありません。仮想ディスク ファイル (Hyper-V では VHD/VHDX) 内で仮想マシン OS は同じような動作をし、仮想ディスク自体の内部にファイルの断片化が発生します。連続した空き領域を確保できないためにバックアップが失敗するなどの理由がある場合にのみ、実施を検討してください。なお、Hyper-V 環境の仮想ディスクは容量固定であっても、仮想マシン内部 OS からはシンプロビジョニング対応ドライブと認識されます。そのほかの仮想環境では、メディアの種類を GUI ツールから確認してください。

仮想環境でのデフラグについて、以下にフォーラムで議論された内容をまとめた情報が公開されておりますので、こちらをご参照ください。

Hyper-V: Defragmentation

 

[参考資料]

Windows Server 2012 以降の OS でイベント ログに、エラー Microsoft-Windows-Defrag ID:257 (0x8900002D) が記録される Windows Server 2012 R2 のクラスターの共有ボリュームにおける Defrag および Chkdsk コマンドの実行について