私はWindows Server 2012 R2 Essentials のサーバー フォルダーの一部を記憶域プール上に指定しています。
先日ファイル システムをReFSからNTFSへ変更し、同タイミングで回復性の種類をパリティに変更しましたが、障害発生後の復旧手順をテストしていなかったので確認作業をしてみました。
今回は、PowerShell を使って(記憶域プールの)パリティの障害から復旧手順をメモ。
環境
環境は下記の通り。
- ホスト サーバー
Windows Server 2012 R2 Essentials with Hyper-V - 仮想マシン
Windows 8.1 Pro Update 64bit - 仮想ディスク
32GB HDDを4本(OS用:1本、記憶域プール用:3本) - 記憶域プール
回復性の種類はパリティ、シンプロビジョニングで200GBの仮想ディスク
正しい手順を理解し操作する事が一番の近道
Technet フォーラムの質問「記憶域プールのパリティで運用中、6台中1台だけ故障したのですが、記憶域全体がアクセス不可」で回答するため、いくつかのシナリオを検証しました。
上記環境においても質問された現象が発生。
検証した事で分かった事は、
- 記憶域プールのテクノロジーを(ある程度)理解しておく(特にパリティ)
- 正しい復旧手順を把握しておく
- 復旧手順の訓練をしておく
3点が非常に大切です。
復旧手順
復旧手順の詳細は後程説明しますが、簡単な手順は下記の通りとなります。
- 新しいHDDを物理的に追加
- 破損したHDDのUsageをRetiredに変更
- Set-PhysicalDisk -FriendlyName <問題のHDD> -Usage Retired
- 新しいHDDを記憶域プールに追加
- Add-PhysicalDisk -PhysicalDisks <新しいHDD> -StoragePoolFriendlyName <記憶域プール名>
- 修復
- Repair-VirtualDisk -FriendlyName <仮想ディスク名>
- (問題のHDDを)取り外し
- Remove-PhysicalDisk -PhysicalDisks <問題のHDD> -StoragePoolFriendlyName <記憶域プール名>
- 破損したHDDを物理的に取り外す
検証によって分かった非常に大切な事は、
- 新しいHDDを追加出来るHW構成にしておく
※ホットスペアとして接続済みが理想 - 破損したHDDをすぐに取り外さない事
です。
よくありそうなシナリオですが、SATAポートorSASポートの空きがないため破損したHDDを取り外し新しいHDDを追加する。
このシナリオだと、検証した限り復旧出来ませんでした。
パリティの障害から復旧させる手順
#現在の記憶域プールを確認
PS C:\Windows\system32> Get-StoragePool
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------ ----------------- ------------ ------------ ----------
Primordial OK Healthy True False
StoragePool Degraded Warning False False
PS C:\Windows\system32> Get-VirtualDisk
FriendlyName ResiliencySettingNa OperationalStatus HealthStatus IsManualAttach Size
me
------------ ------------------- ----------------- ------------ -------------- ----
VirtualDisk Parity Degraded Warning False 200 GB
#問題のHDDはPhysicalDisk-1,ステータスがLost Communication
#新規追加したHDDはPhysicalDisk1
PS C:\Windows\system32> Get-PhysicalDisk
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
------------ ------- ----------------- ------------ ----- ----
PhysicalDisk-1 False Lost Communication Warning Auto-Select 31.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 31.25 GB
PhysicalDisk2 False OK Healthy Auto-Select 31.25 GB
PhysicalDisk1 True OK Healthy Auto-Select 32 GB
PhysicalDisk0 False OK Healthy Auto-Select 32 GB
PS C:\Windows\system32> Set-PhysicalDisk -FriendlyName PhysicalDisk-1 -Usage Retired
PS C:\Windows\system32> Get-PhysicalDisk
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
------------ ------- ----------------- ------------ ----- ----
PhysicalDisk-1 False Lost Communication Warning Retired 31.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 31.25 GB
PhysicalDisk2 False OK Healthy Auto-Select 31.25 GB
PhysicalDisk1 True OK Healthy Auto-Select 32 GB
PhysicalDisk0 False OK Healthy Auto-Select 32 GB
PS C:\Windows\system32> $addDisk = Get-PhysicalDisk -FriendlyName PhysicalDisk1
PS C:\Windows\system32> Add-PhysicalDisk -PhysicalDisks $addDisk -StoragePoolFriendlyName StoragePool
PS C:\Windows\system32> Get-PhysicalDisk
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
------------ ------- ----------------- ------------ ----- ----
PhysicalDisk-1 False Lost Communication Warning Retired 31.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 31.25 GB
PhysicalDisk2 False OK Healthy Auto-Select 31.25 GB
PhysicalDisk1 False OK Healthy Auto-Select 31.25 GB
PhysicalDisk0 False OK Healthy Auto-Select 32 GB
PS C:\Windows\system32> Get-StoragePool
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------ ----------------- ------------ ------------ ----------
Primordial OK Healthy True False
StoragePool Degraded Warning False False
#この時点でRetiredしたHDDを削除するとエラーになります。
PS C:\Windows\system32> $removeDisk = Get-PhysicalDisk -FriendlyName PhysicalDisk-1
PS C:\Windows\system32> Remove-PhysicalDisk -PhysicalDisks $removeDisk -StoragePoolFriendlyName StoragePool
確認
この操作を実行しますか?
Removing a physical disk will cause problems with the fault tolerance capabilities of the following storage pool:
"StoragePool".
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"): y
Remove-PhysicalDisk : One of the physical disks specified could not be removed because it is still in use.
発生場所 行:1 文字:1
+ Remove-PhysicalDisk -PhysicalDisks $removeDisk -StoragePoolFriendlyName StorageP ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (StorageWMI:ROOT/Microsoft/..._StorageCmdlets) [Remove-PhysicalDisk], CimE
xception
+ FullyQualifiedErrorId : StorageWMI 51004,Remove-PhysicalDisk
PS C:\Windows\system32> Get-PhysicalDisk
FriendlyName CanPool OperationalStatus HealthStatus Usage Size
------------ ------- ----------------- ------------ ----- ----
PhysicalDisk-1 False Lost Communication Warning Retired 31.25 GB
PhysicalDisk3 False OK Healthy Auto-Select 31.25 GB
PhysicalDisk2 False OK Healthy Auto-Select 31.25 GB
PhysicalDisk1 False OK Healthy Auto-Select 31.25 GB
PhysicalDisk0 False OK Healthy Auto-Select 32 GB
#仮想ディスクを修復します
PS C:\Windows\system32> Repair-VirtualDisk -FriendlyName VirtualDisk
PS C:\Windows\system32> Get-StoragePool
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------ ----------------- ------------ ------------ ----------
Primordial OK Healthy True False
StoragePool Degraded Warning False False
#RetiredしたHDDを取り外します
PS C:\Windows\system32> Remove-PhysicalDisk -PhysicalDisks $removeDisk -StoragePoolFriendlyName StoragePool
確認
この操作を実行しますか?
Removing a physical disk will cause problems with the fault tolerance capabilities of the following storage pool:
"StoragePool".
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"): y
#取り外すと記憶域プール及び仮想ディスクは正常に戻ります
PS C:\Windows\system32> Get-StoragePool
FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------ ----------------- ------------ ------------ ----------
Primordial OK Healthy True False
StoragePool OK Healthy False False
PS C:\Windows\system32> Get-VirtualDisk
FriendlyName ResiliencySettingNa OperationalStatus HealthStatus IsManualAttach Size
me
------------ ------------------- ----------------- ------------ -------------- ----
VirtualDisk Parity OK Healthy False 200 GB
実際に触って分かった注意点
- パリティの1本に障害が発生しExplorerからアクセスすると反応が非常に悪い
この状態から復旧させるため、下記2点を実行する。 - Exploereを閉じる、又は開かない
- PowerShellを起動し各種コマンドレットを実行する
- ホットスペアの設定済みならばExplorerは不安定にならない
ホットスペアの設定を施した物理HDDを記憶域プールに追加しておき、Repair-VirtualDisk コマンドレットを実行すればExplorerが不安定にはならない。
結論:パリティの場合は、ホットスペアが必要
パリティの特徴・動作をある程度把握した限り、パリティを使うならばホットスペア用HDDを追加した方が安全・安心できます。お金がかかるじゃないか?!
お金は非常に大切ですが、そもそも耐障害性を上げるためのテクノロジーを選定している訳ですからね。
そこはしょうがないのではないかと。
それか、パリティではなく2方向ミラーや3方向ミラーを選定してみてはどうでしょうか。
ディスク サイズは減りますが、予想管理は楽でしょう。