セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ メモ. 依頼品: 記憶域スペースダイレクト(S2D)のディスク障害をコマンドで監視したい
2024年07月12日配信
2024年07月24日更新
執筆者:山内 和朗
弊社製品「BOM for Windows Ver.8.0 SR1」(以下、BOM)を使用して、記憶域スペースダイレクト(S2D)の容量の監視やディスク障害の監視ができないかという相談がありました。PowerShellやコマンドからS2Dの状態を取得できないかということです。BOMによる監視の活用例については、製品ブログで今後詳しく紹介することになると思いますが、今回はS2Dの物理ディスクの状態の取得と、仮想環境を利用したディスク障害のシミュレーションの方法について紹介します。
追記:
この記事で説明しているS2Dの監視テクニックをBOMによる監視に応用したサンプルについては、製品コラム「記憶域スペースダイレクト(S2D)の容量、障害監視ーBOM for Windows活用例」をご覧ください。
Windows ServerのフェールオーバークラスターやAzure Stack HCIのHCIクラスターでは、各サーバー(ノード)のローカルに接続された物理ディスクを1つの記憶域プールとして束ね、仮想ディスクを作成し、クラスター共有ボリュームなどクラスターストレージとして利用可能にする「記憶域スペースダイレクト(Storage Spaces Direct≪S2D≫)」を利用することができます。S2Dを使用すると、高機能、高性能なRAIDシステムなどNIC(ネットワークインターフェイス)やSAS/Fibre Channel HBA(ホストバスアダプター)を介して全ノードに接続される共有記憶域装置を導入しなくても、一般的な物理ディスクやSSD(ソリッドステートドライブ)、NVMeドライブを使用して、高可用性やキャッシュ、記憶域階層、シン(仮想)プロビジョニング機能などを備えた高機能なクラスターストレージを用意することができます。
クラスターでEnable-ClusterS2D(またはEnable-ClusterStorageSpacesDirect)を実行してS2Dを有効化すると、プール可能な未使用の物理ディスク(それまでPrimordalプールにリストされていたディスク)は、OS(DISKPARTや「ディスクの管理」スナップイン)から非表示になり、記憶域プールのメンバーとなります。記憶域プールから領域を切り出して、可用性オプション(シンプル、ミラー、パリティ)などを指定して仮想ディスク(VHDやVHDXとは異なります)を作成し、ボリュームを作成すると、クラスターストレージとして利用可能になります。そしてOSから非表示になった物理ディスクは、仮想ディスク/ボリュームとして物理ディスクと同じように見えるようになります。
S2Dで使用されている物理ディスクは、記憶域プールを構成する物理ディスクとして、「サーバーマネージャー」の「ファイルサービスと記憶域サービス¥ボリューム¥記憶域プール」の「物理ディスク」にリストされ、その状態を確認することができます(画面1)。また、「Windows Admin Center(WAC)」の「クラスターマネージャー」の「ドライブ¥インベントリ」から確認することもできます。
画面1 S2Dで使用されている物理ディスクはOSには非表示になり、S2Dの仮想ディスク/ボリュームに置き換えれる。物理ディスクの状態は「サーバーマネージャー」の「記憶域プール」から参照可能
サーバーマネージャーやWACを使用すれば、物理ディスクの状態は一目瞭然です。しかし、PowerShellで同様の情報を取得するにはどうすればよいのでしょうか。Hyper-Vの仮想マシン(VM)環境で、2ノードのフェールオーバークラスターを作成し、1ノード3台ずつのVHDXを追加して、S2Dを有効化していろいろと試してみました。
その結果、次の3つのコマンドレットを使用すれば、目的を達成できることがわかりました。
Get-StorageSubsystem(Microsoft)
Get-PhysicalDisk(Microsoft)
Get-StorageNode(Microsoft)
S2Dの記憶域プールには、「Clusterd Windows Storage on <クラスター名>」という名前の記憶域サブシステムが使用されています。その記憶域サブシステム(オブジェクト)に接続された物理ディスクを取得するには、次のコマンドラインを実行します(画面2)。
PS C:¥> Get-StorageSubsystem -FriendlyName "Cluster*"| Get-PhysicalDisk |
画面2 S2Dのクラスターストレージで使用されている物理ディスクのリストとその状態。状態(HealthStatus)が“Healthy”であれば正常。それ以外(Warining、Unhealthy、Unknown)は障害または切断の可能性
まだ物理ディスクが接続されているノードの情報が取得できていません。それにはディスクオブジェクトに対して、Get-StorageNode -PhysicallyConnectedを実行します(画面3)。ちなみに、-PhysicallyConnectedパラメーターを付けないで実行すると、すべてのディスクが複数回(ノード数分だけ)リストされます。これは、論理的にはS2Dの物理ディスクは全ノードに接続されているからです。
画面3 物理ディスクが物理的に接続されているノードはGet-StorageNode -PhysicallyConnectedで判断できる
次の簡単なスクリプトを実行することで、接続先ノードを含む物理ディスクのリストを取得できます。なお、ディスクが切断されている場合はGet-StorageNodeは何も返すことができないため、「unknown」と表示するようにしています。
Hyper-V VMの仮想環境でS2Dが有効なフェールオーバークラスターを作成した場合、意図的に障害を発生させて、スクリプトによる監視が行えるかどうか試してみることができます(VMを停止状態でスナップショットを作成しておくことを強く推奨)。
Hyper-V VMの現在のスナップショットを作成してから、S2Dで使用しているVHDXの1つを削除すれば、切断状態(Warining)を作り出すことができます。削除したディスク状態(.avhdx)を再接続すれば正常な状態に戻るでしょう。戻らなかった場合は、停止状態のスナップショットまで戻ってください。
大きなのデータをS2Dのボリュームに書き込んだ後に、現在のディスクとは整合性のない過去のスナップショットのディスク状態(.avhdx)や差分ディスク(元のVHDと同じ親の差分.vhdx)と入れ替えれば、接続された状態のまま正常でない状態(WariningやUnhealty)にすることができる場合があります(画面4、画面5)。その場合、しばらく待つと、再同期され正常な状態(Healthy)に戻るはずです。正常な状態に戻らなかったら、停止状態のVMのスナップショットまで戻ればよいのです。
画面4 ノードからS2Dの物理ディスクのVHDXを削除するか、過去のディスクの状態(.avhdx)や差分ディスク(.vhdx)と入れ替えることで、障害をシミュレートする
画面5 1台の物理ディスクの異常を検出したスクリプト。VHDXを切断(削除)した場合、ノード名はunknownになる