概要
Windowsには便利なSoftware Defined Storage機能として記憶域プールと呼ばれる機能があります。
これを利用するといわゆるRAID1やRAID5のような領域を構築でき、かつ柔軟に管理できます。具体的には構築後の物理ディスクの追加や削除、またストレージ容量の異なる物理ディスクの組み合わせによる活用等が可能です。まぁ要は便利なわけ。
そんな便利なはずの記憶域プールをメンテナンスしていたのですが、便利じゃない事象にぶち当たってしまいます。
「空き容量もあるはずなのに、何故かディスクが削除できない。」
最終的に解決させたわけなのですが、明らかに忘れそうなのでメモっておきます。
やりたかったこと
下記のような構成で記憶域プール(パリティ)を構築していました。
- DiskA: 4TB
- DiskB: 4TB
- DiskC: 2TB
- DiskD: 2TB
- DiskE: 2TB
これに対してDiskF: 3TBを追加した後にDiskEを削除。
- DiskA: 4TB
- DiskB: 4TB
- DiskC: 2TB
- DiskD: 2TB
DiskE: 2TB- DiskF: 3TB
その後再度DiskEを追加してDiskFを削除…ということをやりたかった感じでした。
- DiskA: 4TB
- DiskB: 4TB
- DiskC: 2TB
- DiskD: 2TB
- DiskE: 2TB ←再度投入した
- DiskF: 3TB ←これを消したいけど消せない
しかし前述のようにうまく行かない。困った。中身のファイルは変わってないからうまくいくはずでは?
GUIはアレらしいのでPoweShellで試してみる
弊社情シスな部署に所属している友人氏に聞いてみたところ「記憶域プールのGUIはイケてないのでPowerShellでやるべき」との助言を頂いたので、それでやってみる
とりあえずリタイア状態に
調べてみるとどうやらリタイア状態ってステータスがあるらしいです。適当にPowerShellでポチポチしてみましょう。(要管理者権限で実行)
下記で物理ディスク名(FriendlyName
)を確認します。(GUIで確認した名前と同じなわけなのですが)
Get-PhysicalDisk | Select FriendlyName,FirmwareVersion
そして確認した名前のディスクを Retired
させます。
Set-PhysicalDisk -FriendlyName "確認した削除する物理ディスクのFriendlyName" -Usage Retired
これで再度 Get-PhysicalDisk
を叩くと Retired
になったことがわかります。
意気揚々と Remove-PhysicalDisk
してみる (失敗)
プール名を念のために確認しておきます。(私はプール名をミスるという凡ミスをしたので、ここはちゃんとチェックしておきましょう)
Get-StoragePool
Remove-PhysicalDisk
を実行してみます。
$PhysicalDiskToRemove = Get-PhysicalDisk -Friendlyname "確認した削除する物理ディスクのFriendlyName"
Remove-PhysicalDisk -PhysicalDisks $PhysicalDiskToRemove -StoragePoolFriendlyName "対象の記憶域プールなFriendlyName"
しかし「Remove-PhysicalDisk : Not enough available capacity」という容量不足っぽいエラーで死にます。 (StorageWMI 40000,Remove-PhysicalDisk
)
「Recommended Actions」として下記が記載されていました。まぁ知ってる。
- Add more physical disks to the storage pool.
- Free capacity by deleting unneeded virtual disks.
Virtual Diskの容量を減らしてみる
とりあえず「ディスクの管理」から対象のパーティションを縮小してみました。
しかしながらエラーは出たままです。
よく見るとこれの縮小限界が概ねプールの AllocatedSize
とイコールになっているっぽいですね。ってことは最悪サードパーティツールでパーティションを縮小すればなんとかなるってことかな?
Repair-VirtualDisk
と Optimize-StoragePool
をそれぞれ実行 (これで好転)
半分諦めムードで色々ガチャガチャしてみました。
Get-PhysicalDisk -SerialNumber "確認した削除する物理ディスクのFriendlyName" | Get-VirtualDisk | Repair-VirtualDisk
Get-StoragePool -FriendlyName "対象の記憶域プールなFriendlyName" | Optimize-StoragePool -Asjob
とりあえず Get-StorageJob
したところ、何かが走り始めているような感じです。
そして、なんと当該ディスクが「削除の準備中」に!
(この 記憶域-Regeneration
ってやつが効いたのかも。だとしたら Get-PhysicalDisk
の方が効いているかもしれません。)
若干ストレージ容量が足りないみたいなのでサードパーティーツールで縮小する
慣れ親しんだEaseUS Partition Master Freeを使おうかと思いましたが、8TB以上のドライブには対応していないらしいのでMiniTool Partition Wizard 無料版の方を使うことに。(これ大丈夫なソフトなのか?と昔から思っていましたが、まぁ試しに使ってみましょう)
やっと削除できるようになりました
結論
どうやらVirtualDisk上の物理的なデータの並びがAllocatedSizeに直接影響しているみたいです。「ディスクの管理」でうまく縮小できなければ、サードパーティーツールを使って何とかすると良いのかな?まぁなかなかに力技ですが…
所感
何とかうまく行ったわけなんですけど、かなりWindowsらしい謎挙動に悩まされたなーという感想です。
そういえばその昔は皆サードパーティ製のデフラグソフトとかでデフラグしていたわけで「物理層の痒いところに手が届くような実装って案外OSには入ってないものなんだよなぁー」みたいな謎の懐かしい気持ちになっていました。
参考文献
2つ目の記事がかなり役に立ちました。同じようなガチャガチャをいっぱいしてらっしゃいそう。感謝。