記憶域スペースで記憶域プールから物理HDDを取り外す場合の対処方法や記憶域スペースを管理するPowerShellのCmdletで、ディスクの交換手順について解説をしていましたが、記事を記載してからWindows 8.1、Windows Server 2012 R2が登場して動作に差異が生じていたり、その後明らかになってきた情報もあることから、内容のアップデートをします。
(エンクロージャーを利用する場合は特に)同一メーカーの同一モデルを利用が基本
記憶域スペース/記憶域プールを利用する場合、同一メーカーのモデルを利用することが推奨されます。SSDとHDDが混在する場合、SSD、HDDそれぞれでモデルを統一します。また、ファームウェアも最新のものに統一します。
同一モデルが利用できない場合、メーカーやディスク回転を極力揃えるよう心がけます。
ディスク交換のスケジューリングと回復性の設定
定期メンテ時における手動での交換を行う場合
エンタープライズ環境では、データセンターへの入室が制限されていたり、稼働している環境に手を加えることは予め計画された作業の中で行う必要があるといった理由で、物理ディスクの交換がすぐには行えない場合があるでしょう。こういった場合、記憶域スペース(仮想ディスク)の回復性のタイプは2台の物理ディスク障害に耐えられるよう、3方向ミラーあるいはデュアルパリティ(デュアルパリティは2012 R2以降のサーバーOSのみ利用可能)に設定しておくことが推奨されます。
即時の交換を行う場合
ディスク容量の使用効率や必要となるHDD台数の制約、パフォーマンスの観点等から、3方向ミラーやデュアルパリティを利用できない場合、ディスク障害を検知した場合は即座に物理ディスクの交換を行う必要があります。
プール内の物理ディスクの障害が発生した場合、多くの場合は同時期に導入した同一型番、同一製造ロットのストレージが利用されているでしょうから、他の物理ディスクの障害が間近に控えているケースが想定されます。また、大容量の仮想ディスクほど、その修復にはかなりの時間を要することになります。マイクロソフトのTechNetの記事では、4TBの仮想ディスクの修復には12時間からそれ以上を要するを記載されており、その間に他の物理ディスク障害が発生すると、ミラーやパリティなど1台の物理ディスク障害にしか耐えられない回復性タイプの場合、仮想ディスクの修復はできず仮想ディスクはオフラインになるだけでなく、データを復旧することもできなくなります。
Windows 8.1, Windows Server 2012 R2までの記憶域スペース/記憶域プールでは、SMARTレベルの物理ディスク障害検知に対応出来ておらず、手遅れになる事態が多々発生しています。CrystalDiskInfo等のツールを併用しながら、物理ディスクの状態を定期的に調査することを推奨します。
物理ディスクの交換は必ず1台ずつ行う
仮に複数の物理ディスクの障害が発生した場合も、記憶域プールの物理ディスクの交換、仮想ディスクの修復は各物理ディスクに割り当てられたスラブの再割り当て等で混乱が生じないよう、1台の物理ディスク交換ごとに行います。
JBODエンクロージャーを利用する場合
JBODエンクロージャーを利用する場合、JBOCエンクロージャー全体の障害が発生した場合の障害にも備えるには、Enclosure Awarenessを有効にし、回復性のタイプに応じたエンクロージャーを接続する必要があります。
障害が発生したディスクの交換
物理ディスクに障害が発生した際、物理ディスクを交換して新しい物理ディスクを追加する前に記憶域プールの設定を変更しないように注意します。物理ディスクを交換する前に、記憶域プールの構成を変更する操作を行うと、I/Oエラーが発生したり、仮想ディスクの修復操作がトリガーされ、データの消失に繋がったり記憶域プールの修復が出来なくなるなどの障害の原因となる可能性があります。
障害が発生した物理ディスクのOS上での特定
物理ディスクに障害が発生した場合、対象の物理ディスクを特定する必要があります。Windowsロゴ認定を取得したSESに対応したJBODエンクロージャーを利用している場合、OSからディスクスロットのLEDを点滅させることで対象のディスクを特定することができます。
内蔵ディスクを利用する場合等、太宗のケースではLEDは利用できないため、他の方法で対象の物理ディスクを特定する必要があります。
イベントビューアー
イベントビューアーで、プロバイダー(イベントソース)がDiskのイベントログを検索します。
イベントIDにもよりますが、ディスクIDあるいは対象ディスクのGUIDがログに記載されてます。
GUIDが特定出来た場合、PowerShellから対象のディスクを特定することができます
- GUIDから物理ディスクを特定する場合
-
Get-PhysicalDisk | Where-Object -Property { $_.ObjectId.Contains( $PhysicalDiskGUID ) }
障害が発生した物理ディスクの物理的特定
Windowsロゴ認定を取得したJBODエンクロージャーでは、SESに対応しており、Windows OSからディスクスロットの通知LEDをコントロールすることができます。
LEDの点灯は、サーバーマネージャーあるいはPowerShellからコントロールすることができます。
- PowerShell
以下のコマンドで、障害が発生している物理ディスクのLEDを点灯させることができます。$FailedDisk = Get-PhysicalDisk | Where-Object –Property HealthStatus –ne Healthy $FailedDisk | Get-PhysicalDisk | Enable-PhysicalDiskIndication
JBODエンクロージャーを利用していない場合、LEDでの確認はできないため、モデルやシリアルナンバーから特定する必要があります。
Get-PhysicalDisk -FriendlyName <対象ディスクのフレンドリー名> | FL
物理ディスクの交換
物理ディスクを特定できたら、対象の物理ディスクを取り外し、新しい代わりのディスクを接続します。
新しいディスクのファームウェアの更新
必要に応じ、新しい物理ディスクのファームウェアを最新のファームに更新します。各ディスクのファームウェアバージョンは同一種類のディスクは同一ファームに更新をします。
各ディスクのファームウェアバージョンは、以下のコマンドレットで確認することができます。
Get-PhysicalDisk | Select FriendlyName,FirmwareVersion
JBODエンクロージャーを利用している場合、以下のコマンドを利用します。
Get-StorageEnclosure | Get-PhysicalDisk | Select FriendlyName,FirmwareVersion
プロバイダーキャッシュの更新
ディスクを入れ替え、ファームウェアの更新が完了したら、ディスクプロバイダーのキャッシュを更新するため、以下のコマンドを実行します。このコマンドは、Windows Server 2012 R2(おそらくWindows 8.1でも)では既知の問題があることから、必ず同一コマンドを2回実行します。
Update-StorageProviderCache –DiscoveryLevel Full Update-StorageProviderCache –DiscoveryLevel Full
新しいディスクを記憶域プールに追加する
新しいディスクを記憶域プールに追加します。
- Windows Server 2012 R2(Windows 8.1)の場合
新しいディスクの割り当ては、”自動”を選択します。 - Windows Server 2012 (Windows 8)の場合
新しいディスクは、”ホットスペア”に割り当てます。
完了後、以下のコマンドで”Detached”状態にある仮想ディスクを接続します。あるいはGUIから仮想ディスクを接続します。
Get-VirtualDisk | Where-Object -Filter { $_.OperationalStatus -eq "Detached" } | Connect-VirtualDisk
仮想ディスクを修復する
接続が完了したら、仮想ディスクの修復を実行します。
Get-Virtualdisk | Where-Object –Property HealthState –ne Healthy | Repair-VirtualDisk -Asjob
古いディスクを記憶域プールから削除する
記憶域プールからディスクを削除する際には、以下の2点が満たされる必要があります。
- 記憶域プールに十分な空き領域が存在していること
記憶域プールの中に既に存在している物理ディスクの数が列の数を上回っていて、プールに十分な空き領域があることを確認します。あるいはホットスペアディスクを利用する場合、(JBODエンクロージャーを利用している場合、同一エンクロージャー内の)ホットスペアを加えることで上記が満たされることを確認します。これが充足されていないと、記憶域プールから物理ディスクを削除することができません。 - 物理ディスクが削除される前に、”retired”に変更されること
物理ディスクのUsage属性が”retired”に変更されると、当該の物理ディスクには以降の新しいデータ保存は実施されなくなります。データは残りの正常な他のディスクにも保存されているため、それらを利用して仮想ディスクが本来持つべきデータのコピーの数を満たすよう、仮想ディスクの修復が実施されます。
前の手順で、新しいディスクの追加が実施されたことで、上記の2点は充足されているはずです。障害が発生したディスクのUsage属性の”retired”への変更も通常は自動的に行われます。
Usage属性を”retired”に変更
何らかの事情で自動的に”retired”になっていない場合、以下の手順で対象のディスクのUsage 属性を変更します。
Set-PhysicalDisk –FeiendlyName <対象の物理ディスクのFriendlyName> –Usage Retired
その後、物理ディスクが属していた記憶域プール上に存在する仮想ディスクの修復を、手動で実行します。
Get-StoragePool –FriendlyName <storagepoolfriendlyname> | Get-Virtualdisk | Repair-VirtualDisk -Asjob
記憶域プールから物理ディスクを削除
サーバーマネージャーから対象の物理ディスクを削除するには、物理ディスクペインで対象のディスクを右クリックし、[削除]を押下します。クライアントOSではコントロールパネルの記憶域の管理から削除ができます。
PowerShellでは以下のコマンドを実行します。
$PDToRemove = Get-PhysicalDisk -Friendlyname “PhysicalDisk1” Remove-PhysicalDisk -PhysicalDisks $PDToRemove -StoragePoolFriendlyName “記憶域プール”
参考:Windows Server での記憶域スペースの失敗したディスクと修復の Jbod を置き換える