Windows Server 2012 以降でのデフラグ処理とスラブ統合の動作について

Last Update: feedback 共有

※ 本記事は弊社の Technet から移行した記事です。
いつも弊社製品をご利用いただきまして誠にありがとうございます。日本マイクロソフトの Windows サポートチームです。

■ デフラグ処理とは?

デフラグ処理は、ハード ディスクに保存されたデータの配置を整理し、最適化を行うことを指します。最適化を行うと、より効率的にファイルの作成やファイルへのアクセスができるようになります。

最近では仮想技術が進歩し、シン プロビジョニング対応ディスク (仮想プロビジョニング対応ディスク) が普及してきました。シン プロビジョニング対応ディスクでは、必要な量の記憶域が必要なタイミングでストレージから割り当てられる動作をとるため、従来のデフラグ処理を行う必要がありません。一方で、ストレージから記憶域を割り当てられる記憶域を効率的に利用するために、スラブ統合という概念が生まれました。

■ スラブ統合とは?

シン プロビジョニング対応ディスクの特徴として、必要なタイミングで必要な分の領域がストレージから割り当てられる仕組みになっています。割り当ては “スラブ” と呼ばれるストレージ割り当ての管理単位で行われ、データのサイズに合わせてスラブが必要な個数、仮想ディスクに対して割り当てられます。

例) 100 GB の仮想プロビジョニング対応ディスクを 1 つ作成した場合、ストレージから100 GB の利用可能な記憶域が即時に割り当てられるわけではなく、初めは最小限のサイズでディスクが作成され、その後、必要に応じて 100 GB まで拡張される動作を取ります。

日々の運用の中でデータの変更や削除が発生した場合に、使用率の低いスラブや空のスラブが発生しますので、ストレージの記憶域を効率的に利用するためには、スラブ内のデータを整理し、空になったスラブをストレージへ返却する必要があります。このスラブの整理とストレージへの返却の動作を、”スラブ統合” と呼びます。

“最適化” という意味合いにおいては、デフラグ処理とスラブ統合は同じことを指しているため、実施のコマンドも同じく defrag を使用し、付加するオプションで動作を切り替えます。

■ Defrag のコマンドについて

Defrag には様々なオプションがあります。オプションによって、従来のデフラグ処理を行うか、スラブ統合を行うかを指定することができます。コマンドの使用方法について本節ではご紹介します。

  1. 従来通りのデフラグ処理 (ハード ディスクに対する最適化処理)を行いたい場合
    オプションなし、もしくは /D オプションを付加し、その後に対象のドライブを指定することで従来通りのデフラグ処理を対象ドライブに対して実行します。実際の現場では、すべてのドライブに対してデフラグ処理を行う場合も多いため、その場合は /C オプションを付加します。

    例) 物理サーバーのハード ディスク ドライブ “C ドライブ” に対して従来のデフラグ処理を行う

    >Defrag /D C: (もしくは >Defrag C: )  

    例) 物理サーバーの全てのドライブに対して従来のデフラグ処理を行う

    >Defrag /C /D  
  2. シン プロビジョニング対応ドライブに対してスラブ統合を行いたい場合
    スラブ統合を行いたい場合は、/K のオプションを付加します。

    例) 仮想サーバーのシン プロビジョニング対応ドライブ “C ドライブ” に対してスラブ統合を行う

    >Defrag /K C:  

    なお、スラブ統合は、シン プロビジョニング対応ディスクに対してのみ行われますので、物理ディスクや容量固定の仮想ディスクの場合は実行されません。

■ Windows Server 2012 以降でのデフラグ処理について

Windows Server 2012 以降では、メンテナンス タスクの一環として、スラブ統合の処理がタスク スケジューラに規定で組み込まれています。タスクは、[タスク スケジューラ] -> [タスク スケジューラ ライブラリ] -> [Microsoft] -> [Windows] -> [Defrag] に “SchduledDefrag” として存在していることを確認できます。

[トリガー] タブは空欄となっておりますが、内部ロジックにより、週 1 回の頻度でタスクが実行されております。[操作] タブでは、defrag コマンドのオプションが登録されています。/K のオプションが付加されていますので、従来のデフラグ処理ではなく、スラブ統合が実行されています。

従って、既定の “SchduledDefrag” のタスクでは、一般的なローカル ディスクであるハード ディスク ドライブに対して最適化は行われていません。ハード ディスク ドライブに対して、従来のデフラグ処理による最適化を定期的に行いたい場合は、既定のタスクではなく、新規のタスクを作成して実行する必要があります。

■ “ドライブのデフラグと最適化” ツールについて

タスク スケジューラからではなく、[管理ツール] 内の [ドライブのデフラグと最適化] ツールからも各ドライブの最適化の状況や、前回の実行日などを確認することが可能です。[スケジュールされた最適化] の項目では、タスク スケジューラと連動した、既定の “SchduledDefrag” タスクの実行/停止の設定や頻度の変更ができます。このツールで最適化を “オフ” にすると、タスク スケジューラ側でも、タスクが無効化されます。

■ よくあるお問い合わせ “ソース:Defrag、ID:257 のエラーのイベント ログについて”

Windows Server 2012 以降では、スラブ統合が既定でスケジュールされていますが、スラブ統合はスラブのサイズが 8 MB 以下の場合には実行されません。スラブ サイズが十分に小さい (8 MB 以下) 場合、使用率の低いスラブが発生しにくいため、スラブ統合を実施せずともストレージを効率よく利用できていると判断します。システムへの影響は全くないため、本エラーのイベント ログは無視していただいて構いません。

公開情報:
Windows Server 2012 以降の OS でイベント ログに、エラー Microsoft-Windows-Defrag ID:257 (0x8900002D) が記録される

上記の公開情報では、defrag コマンドのオプションをスラブ統合からトリム処理のみへ変更することでエラーを回避する方法をご紹介しております。これ以外にも、タスク スケジューラの “SchduledDefrag” タスクそのものを無効化することでも回避できます。

■ スラブ サイズの確認方法と変更方法について

以下の Windows PowerShell のコマンドでスラブ サイズを確認することができます。

PS>Optimize-Volume -DriveLetter X -SlabConsolidate -WhatIf -Verbose  

※X は対象ボリュームのドライブレター

公開情報:
Optimize-Volume

なお、スラブ サイズはストレージによって決まっておりますので、OS 側から変更することは出来ません。また、スラブ サイズを OS 側から確認する上記の PowerShell コマンドについても、ストレージによってはスラブ サイズが表示されない場合もあります。ご了承ください。

今回はデフラグ処理とスラブ統合の動作について、ご紹介させていただきましたが、いかがでしたでしょうか。本ブログが少しでも皆様のお役に立てますと幸いです。