仮想プロビジョニング
概要
シン プロビジョニングは、物理ストレージ リソースの割り当てを最適化するストレージ管理手法です。 これにより、管理者は、割り当てられたストレージがすべて同時に使用されるわけではないことを前提に、物理的に使用可能な量よりも大きな仮想ストレージをアプリケーションに割り当てることができます。
仮想プロビジョニングは、ジャスト イン タイムの割り当てを提供するエンド ツー エンドのストレージ プロビジョニング ソリューションです。 ホストおよびクライアント アプリケーションでのストレージのデプロイと実行の計画が必要です。
Windows Server の仮想プロビジョニング機能は、仮想プロビジョニング対応ストレージとホスト サーバーの間のインターフェイスとして機能します。 仮想プロビジョニング機能は次のとおりです。
- 仮想プロビジョニング論理ユニット (LUN) の識別
- しきい値通知
- リソース不足の処理
- 高可用性でスケーラブルなストレージ プロビジョニング サービスをエンド ユーザーに提供するための領域の再利用
仮想プロビジョニング LUN の識別
Windows Server では、Windows Server 2012 以降の仮想プロビジョニング論理ユニット (LUN) を識別するための T10 SCSI ブロック コマンド 3 (SBC3) 標準仕様が採用されました。
初期ターゲット デバイスの列挙中に、Windows Server はターゲット デバイスからすべてのプロパティ パラメーターを収集し、プロビジョニングの種類と UNMAP および TRIM 機能を識別します。 ストレージ デバイスは、SBC3 仕様に従って、プロビジョニングの種類と UNMAP および TRIM 機能を報告します。
ストレージ デバイスが現在の機能を正確に報告しない場合は、デバイスの互換性の問題が発生している可能性があります。 たとえば、ストレージ デバイスが UNMAP コマンドをサポートしているが UNMAP コマンドをサポートしていないと報告した場合、ディスク形式のハングの問題が発生している可能性があります。 プロビジョニングの種類の情報が正確な場合、ストレージ スタックは、ストレージ プロビジョニングの種類に応じて、より優れた I/O 処理を提供できます。
実行時プロビジョニングの種類または LUN 容量の変更
ストレージ管理者は、プロビジョニングの種類または LUN の容量を変更できます。 プロビジョニングの種類または LUN 容量が変更されると、ストレージ アレイは、センス データ要求時に正しい情報を返す UNIT ATTENTION センス条件を発生させます。 Windows Server は、システム イベントをログに記録して、プロビジョニングの種類または LUN 容量の変更についてシステム管理者に警告します。
しきい値とリソース不足の処理
通常、仮想プロビジョニング LUN は、LUN のサイズよりも少ない物理ディスク領域で作成されます。 しきい値通知は、ストレージ スペース消費状態のホストおよびクライアント アプリケーションにアラートを出すために必要な機能です。
ほとんどの仮想プロビジョニング ストレージ アレイでは、しきい値に達してもイベントは報告されません。 これらの仮想プロビジョニング ストレージ ソリューションは、独自のストレージ管理ユーティリティを使用してしきい値通知を解決します。 そのため、ホストおよびクライアント アプリケーションの場合、このようなストレージ アレイが報告する唯一のイベントは、永続的なリソース不足です。 シン プロビジョニング ストレージ デバイスでは、次のいずれかのハンドルを使用して、記憶域スペースの使用量が容量に近い場合にシステム管理者またはクライアント アプリケーションにアラートを送信できます。
- しきい値通知ハンドル。
- 一時的なリソース枯渇ハンドル。
- 永続的なリソース枯渇ハンドル
仮想プロビジョニングのしきい値の通知
ストレージ管理ユーティリティは、仮想プロビジョニングのしきい値を設定します。 Windows Server は、ストレージ管理ユーティリティによって設定されたしきい値をオーバーライドしません。 仮想プロビジョニング LUN の場合、ストレージ管理者は、平均ストレージ消費率に従ってしきい値を指定する必要があります。 書き込みコマンドがストレージ ターゲット デバイスによって設定されたしきい値を超えると、ターゲット デバイスはセンス データを使用してコマンドを終了し、"THIN PROVISIONING SOFT THRESHOLD REACHED" メッセージを送信します。 Windows Server が一致したセンス データを受信すると、次の処理が行われます。
- システム イベントがログに記録され、LUN デバイスでリソースの使用状況または可用性のしきい値に達したことをホスト管理者に警告します。
- 使用済みおよび使用可能なマップされたリソースに関する情報は、ターゲット デバイスのログ ページのシステム イベント ログに報告されます。 この報告を行うには、Windows Server がシステム イベントを生成するために、ストレージ アレイが論理ブロック プロビジョニングのログ ページ仕様をサポートする必要があります。
- 終了したコマンドが再試行されます。
このエラーがログに記録された後に送信された書き込みコマンドは、FILE_FLAG_WRITE_THROUGH が設定されていないと、永続的なリソース枯渇状態を引き起こす場合があり、失われる可能性があります。
一時的なリソース不足
ストレージ アレイが LUN で自動拡張機能を有効にすると、管理者は一時的なリソース不足通知を使用して、ストレージ デバイスが 4 秒以内により多くの領域を LUN に割り当てられるようにすることができます。 書き込みコマンドによって一時的なリソース不足状態が発生すると、ストレージ デバイスは、センス データを使用して操作を要求するコマンドを終了し、"SPACE ALLOCATION IN PROGRESS" メッセージを返します。 一時的なリソース不足は、次のように処理されます。
- 再試行間隔を 1 秒に設定して、元の要求を 4 回再試行します。
- すべての再試行が失敗した場合、要求はアプリケーションにフェール バックされます。
- ストレージ デバイスが一時的なリソース不足を処理しない場合、Windows Server は、永続的なリソース不足状態を返すことによって、ストレージ デバイスが次の書き込み要求に失敗することを想定しています。
永続的なリソース不足
永続的なリソース枯渇状態は、仮想プロビジョニング LUN が記憶域スペースの上限に達したことを示します。 書き込みコマンド中に永続的なリソース不足が発生すると、ストレージ デバイスはセンス データを使用して操作を終了し、"SPACE ALLOCATION FAILED WRITE PROTECT" メッセージを送信します。 永続的な不足は次のように処理されます。
- コマンドに FILE_FLAG_WRITE_THROUGH が設定されている場合、書き込みコマンドはアプリケーションにフェールバックされます。
- 書き込みコマンドに FILE_FLAG_WRITE_THROUGH が設定されていない場合、アプリケーションは、要求が完了してもいない、物理メディアにフラッシュもされていない状態で、成功応答を受け取る可能性があります。
- "永続的なリソース枯渇" エラー メッセージを含むシステム イベントがログに記録されます。
- エラー コードはパーティション マネージャーに戻され、LUN はオフラインになります。
UNMAP コマンドを使用したストレージ スペースの再利用
次のシナリオでは、領域の再利用をトリガーできます。
- ファイルの削除。
- ファイル システム レベルのトリミング。
- ストレージの最適化操作。
ファイル システム レベルのトリミングは、トリミングまたはマップ解除操作の後に "読み取り戻し 0" を実行するように設計されたストレージ デバイスに対して有効になります。
ストレージ スタックでのスペースの再利用操作
Windows Server は、次の場合、ファイルの削除またはトリミングの通知を対応する UNMAP 要求に変換します。
- 大きなファイルがファイル システムから削除されたとき。
- ファイル システム レベルのトリミングがトリガーされたとき。
記憶域ポート ドライバー スタックは、ストレージ デバイスのプロトコルの種類に応じて、UNMAP 要求を SCSI UNMAP コマンドまたは ATA TRIM コマンドに変換します。 ストレージ デバイスの列挙中に、Windows ストレージ スタックは、ストレージ デバイスが UNMAP または TRIM コマンドをサポートしているかどうかに関する情報を収集します。 デバイスに SCSI UNMAP または ATA TRIM 機能がある場合は、UNMAP 要求のみがストレージ デバイスに送信されます。 Windows Server には、ストレージ ターゲット デバイスで LBA のマッピングを解除するための API 実装も用意されています。 Windows Server では、T10 SCSI WRITE SAME コマンド セットは採用されていません。
Hyper-V ゲスト オペレーティング システムからの UNMAP 要求
仮想マシン (VM) の作成時に、Hyper-V ホストは、仮想ハード ディスク (VHD) が存在するストレージ デバイスが UNMAP または TRIM コマンドをサポートしているかどうかに関する照会を送信します。 VM ゲスト OS のファイル システムから大きなファイルが削除されると、ゲスト OS は、仮想マシンの仮想ハード ディスク (VHD) または VHD ファイル (または VHDX ファイル) にファイル削除要求を送信します。 VM の VHD または VHDX ファイルは、次のように、SCSI UNMAP 要求を Windows Hyper-V ホストのクラス ドライバー スタックにトンネルします。
- VM に VHD ファイルがある場合、VHD は SCSI UNMAP または ATA TRIM コマンドをデータ セット管理 I/O 制御コードの TRIM 要求に変換し、その要求をホスト ストレージ デバイスに送信します。
- VM に VHDX ファイルがある場合、VHD ファイル システムは SCSI UNMAP または ATA TRIM コマンドをファイル システム レベルのトリミング要求に変換し、その要求をホスト オペレーティング システムに送信します。
Windows Hyper-V では、ゲスト オペレーティング システムからの IOCTL DSM TRIM 呼び出しもサポートされています。
Windows Optimize Drives ユーティリティ
エンド ユーザーまたはシステム管理者は、手動要求を作成するか、スケジュール構成を最適化することで、ドライブの最適化ユーティリティを使用してスペースを再利用できます。 ディスク ドライブが仮想プロビジョニング LUN の場合、ディスク ドライブのメディアの種類は "仮想プロビジョニング ドライブ" と表示されます。
システム管理者は、ドライブの最適化ユーティリティを使用してストレージ スペースの統合をスケジュールできます。 また、このユーティリティーは、システムが 3 回連続してスケジュールされた実行を見逃した場合に、システム管理者に通知することもできます。
スラブ マッピング状態の取得
仮想プロビジョニング LUN では、すべての論理ブロックがスラブ (クラスター) にグループ化されます。 ストレージ デバイスが報告する OPTIMAL UNMAP GRANULARITY パラメーターにより、スラブ サイズは設定されます。 すべてのスラブは、マップ済み、割り当て解除済み、またはアンカー状態に分類されます。 Windows Server では、割り当て解除状態とアンカー状態の両方がマップされていない状態として扱われます。 Windows Server には、記憶域管理操作の仮想プロビジョニング LUN から LBA プロビジョニング状態を取得するための API 実装または IOCTL DSM 割り当てが用意されています。 アプリケーションは、IOCTL DSM 割り当てルーチンを呼び出して SCSI コマンドを送信し、特定の範囲の各スラブのマップ済みまたはマップ解除済みの状態を取得できます。 返された LBA プロビジョニングの状態で割り当て範囲全体が記述されていない場合、アプリケーションは別の SCSI コマンドを送信して、残りの LBA 範囲のプロビジョニング状態を取得します。
ストレージ デバイスは、LBA 範囲全体を一度に処理する必要はありません。 元の要求の部分的な LBA 範囲が返された場合は、別のコマンドが送信され、残りの LBA 範囲のマッピング状態が取得されます。