記憶域プールで「削除の準備」が表示されない時に、物理ディスクを削除する方法

# 概要
Windowsには便利なSoftware Defined Storage機能として記憶域プールと呼ばれる機能があります。
これを利用するといわゆるRAID1やRAID5のような領域を構築でき、かつ柔軟に管理できます。具体的には構築後の物理ディスクの追加や削除、またストレージ容量の異なる物理ディスクの組み合わせによる活用等が可能です。まぁ要は便利なわけ。

https://support.microsoft.com/ja-jp/windows/%E8%A8%98%E6%86%B6%E5%9F%9F%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%AEwindows-b6c8b540-b8d8-fb8a-e7ab-4a75ba11f9f2

そんな便利なはずの記憶域プールをメンテナンスしていたのですが、便利じゃない事象にぶち当たってしまいます。
「空き容量もあるはずなのに、何故かディスクが削除できない。」

![image (59).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/030937bc-3f40-39a6-bf38-3320437b2339.png)

最終的に解決させたわけなのですが、明らかに忘れそうなのでメモっておきます。



# やりたかったこと
下記のような構成で記憶域プール(パリティ)を構築していました。

- 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で確認した名前と同じなわけなのですが)
```powershell
Get-PhysicalDisk | Select FriendlyName,FirmwareVersion
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/b1ec150d-f838-d0f5-979e-0771f81f2e42.png)

そして確認した名前のディスクを `Retired` させます。
```powershell
Set-PhysicalDisk -FriendlyName "確認した削除する物理ディスクのFriendlyName"  -Usage Retired
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/58e6d141-1b5c-ca56-57d0-9d4e0025672d.png)

これで再度 `Get-PhysicalDisk` を叩くと `Retired` になったことがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/a4ff6189-6df2-5dd3-946f-96958b1becff.png)

## 意気揚々と `Remove-PhysicalDisk` してみる (失敗)
プール名を念のために確認しておきます。(私はプール名をミスるという凡ミスをしたので、ここはちゃんとチェックしておきましょう)
```powershell
Get-StoragePool
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/e50b4daf-415c-65e4-6008-5edde652c802.png)

`Remove-PhysicalDisk` を実行してみます。
```powershell
$PhysicalDiskToRemove = Get-PhysicalDisk -Friendlyname "確認した削除する物理ディスクのFriendlyName"
Remove-PhysicalDisk -PhysicalDisks $PhysicalDiskToRemove -StoragePoolFriendlyName "対象の記憶域プールなFriendlyName"
```

しかし「Remove-PhysicalDisk : Not enough available capacity」という容量不足っぽいエラーで死にます。 (`StorageWMI 40000,Remove-PhysicalDisk`)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/8049f209-9f53-d645-4ab6-a95b96ddb0db.png)

「Recommended Actions」として下記が記載されていました。まぁ知ってる。
- Add more physical disks to the storage pool.
- Free capacity by deleting unneeded virtual disks.

## Virtual Diskの容量を減らしてみる
とりあえず「ディスクの管理」から対象のパーティションを縮小してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/0dc086d3-79fe-53f5-931a-fd4fdb382397.png)

しかしながらエラーは出たままです。

よく見るとこれの縮小限界が概ねプールの `AllocatedSize` とイコールになっているっぽいですね。ってことは最悪サードパーティツールでパーティションを縮小すればなんとかなるってことかな？

## `Repair-VirtualDisk` と `Optimize-StoragePool` をそれぞれ実行 (これで好転)
半分諦めムードで色々ガチャガチャしてみました。

```powershell
Get-PhysicalDisk -SerialNumber "確認した削除する物理ディスクのFriendlyName" | Get-VirtualDisk | Repair-VirtualDisk
Get-StoragePool -FriendlyName "対象の記憶域プールなFriendlyName" | Optimize-StoragePool -Asjob
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/2099dd46-b1ed-afbe-3172-f4b7aee9a723.png)

とりあえず `Get-StorageJob` したところ、何かが走り始めているような感じです。
そして、なんと当該ディスクが「削除の準備中」に！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/98b6cf60-11ad-22b6-d59d-61c75fc520f0.png)
(この `記憶域-Regeneration` ってやつが効いたのかも。だとしたら `Get-PhysicalDisk` の方が効いているかもしれません。)

## 若干ストレージ容量が足りないみたいなのでサードパーティーツールで縮小する
足りない…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/e300456e-b18b-6cd3-a4e5-d27431c5c42a.png)

慣れ親しんだEaseUS Partition Master Freeを使おうかと思いましたが、8TB以上のドライブには対応していないらしいのでMiniTool Partition Wizard 無料版の方を使うことに。(これ大丈夫なソフトなのか？と昔から思っていましたが、まぁ試しに使ってみましょう)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/5da78606-3a61-2679-237f-2ff218fcdb36.png)

とりあえずガッツリ減らしてみます。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3133333636362f63343735396430392d346165352d323532632d666265342d3661616531633530303437652e706e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/1dc7ce28-a774-c83c-0526-f93345dbed62.png)

## やっと削除できるようになりました
やったー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/abda60f9-0f81-0468-9c01-4b9a61220ed1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133666/9c58ed61-78ec-09fd-25b6-3b99a2baf423.png)


# 結論
どうやらVirtualDisk上の物理的なデータの並びがAllocatedSizeに直接影響しているみたいです。「ディスクの管理」でうまく縮小できなければ、サードパーティーツールを使って何とかすると良いのかな？まぁなかなかに力技ですが…

# 所感
何とかうまく行ったわけなんですけど、かなりWindowsらしい謎挙動に悩まされたなーという感想です。
そういえばその昔は皆サードパーティ製のデフラグソフトとかでデフラグしていたわけで「物理層の痒いところに手が届くような実装って案外OSには入ってないものなんだよなぁー」みたいな謎の懐かしい気持ちになっていました。

# 参考文献
https://mitomoha.hatenablog.com/entry/2018/03/28/021524

https://nyanshiba.com/blog/powershell-storagepool/

2つ目の記事がかなり役に立ちました。同じようなガチャガチャをいっぱいしてらっしゃいそう。感謝。