次の方法で共有


マルチパス I/O で拡張ストレージ要求ブロックがサポートされるようになりました

プラットフォーム

サーバー – Windows Server 2012

形容

Windows Server 2012 の新しい構造では、STORAGE_REQUEST_BLOCK (拡張 SRB) によって、コア ストレージ スタック内のSCSI_REQUEST_BLOCK (レガシ SRB) が置き換えられます。 拡張された SRB は、従来の SRB の機能をレプリケートしますが、拡張性と拡張性も備えています。

マルチパス I/O (MPIO) は拡張 SRB をサポートし、デバイス固有のモジュール (DSM) でも拡張 SRB サポートを指定できます。 ただし、マルチパス デバイスのストレージ スタックで拡張 SRB を使用するには、スタック内のすべてのコンポーネント 、DSMを含む拡張 SRB をサポートする必要があります。 Microsoft のインボックス DSM MSDSM は拡張 SRB をサポートしています。

拡張 SCSI パススルーはコマンド ライン デバッガー (CDB) に応じて可変サイズになる可能性があるため、SCSI_PASS_THROUGH_EX構造体は拡張 MPIO パススルー構造の一部ではありません。 代わりに、拡張 MPIO パススルーには、拡張 MPIO パススルー構造体の先頭からSCSI_PASS_THROUGH_EX構造体へのオフセットを記述するフィールドがあります。 呼び出し元は、適切なサイズのバッファーを割り当て、SCSI パススルー オフセットを正しく設定する必要があります。 呼び出し元が拡張 SCSI パススルーの規則に従っている限り、拡張 MPIO パススルーを使用するための追加の作業は必要ありません。

手記

DSM が拡張 SRB をサポートしていない場合、MPIO は、MPIO_IOCTL_FLAG_INVOLVE_DSM フラグが設定された拡張 MPIO パススルー要求に失敗します。

 

顕現

DSM を含むデバイスのストレージ スタックの一部が拡張 SRB をサポートしていない場合、ストレージ スタックは従来の SRB の使用に戻ります。

解決

DSM がSTORAGE_REQUEST_BLOCKSをサポートするには、次の 2 つの MPIO 要件しかありません。

  • DSM は、その型を DsmType6 として報告する必要があります
  • DSM は、DSM_ADDRESS_TYPE_SUPPORTED関数を提供する必要があります。

DSM が DsmType6 を報告しない場合、または DsmType6 を報告するが、DSM_ADDRESS_TYPE_SUPPORTED関数を提供しない場合、MPIO は DSM が拡張 SRB をサポートしていないと見なします。

DSM_ADDRESS_TYPE_SUPPORTED関数は 2 つのパラメーターを受け取ります。そのうちの 1 つはアドレス型です。 このアドレスの種類は、srb.h で定義されている STORAGE_ADDRESS_TYPE_* 値のいずれかである必要があります。 DSM は、指定されたアドレスの種類をサポートしている場合は TRUE を返す必要があり、サポートされていない場合は FALSE を返す必要があります。 "サポート" の定義は、最終的には DSM にかかいます。 MPIO はこの関数を使用して、指定された型のSTOR_ADDRESS構造を持つ拡張 SRB が DSM に渡された場合に、DSM が誤動作しないようにします。 そのため、MPIO は通常、マルチパス デバイスが列挙されている場合にこの関数を呼び出しますが、この関数はいつでも呼び出せる可能性があります。

DSM が拡張 SRB のSTOR_ADDRESSに触れることがない場合は、有効な STORAGE_ADDRESS_TYPE_* 値に対して TRUE を返すことができます。 WDK のサンプル DSM を確認します。

その他の重要な注意事項

  • 拡張 SRB をサポートする DSM は、SCSI_REQUEST_BLOCK構造体とSTORAGE_REQUEST_BLOCK構造体の両方を処理できる必要があります。 DSM が拡張 SRB をサポートしていると報告したからといって、拡張 SRB のみを受け取るわけではありません。 拡張された SRB に加えて、任意の数のレガシ SRB を受け取る可能性があるため、両方を処理できる必要があります。
  • 拡張 SRB とレガシ SRB の両方を処理する必要があるドライバーを支援するインライン関数を含む srbhelper.h という名前のヘッダー ファイルを WDK に用意しました。 サンプル DSM では、このヘッダーを使用して、これらの関数を使用する方法の例として使用できます。
  • 拡張 SRB をサポートしていない DSM では、拡張 SRB を処理する必要はありません。
  • DSM が特定のSTORAGE_ADDRESS_TYPE_* をサポートしていない (ただし、それ以外の場合は拡張 SRB をサポートしている) 場合、MPIO によってストレージ スタックがレガシ SRB にフォールバックする可能性があります。
  • "BTL8" は、Windows Server 2012 で現在定義されている唯一のSTORAGE_ADDRESS_TYPE_*です。