Windows Server 2022における新機能「Storage Bus Cache」の構築

## まずStorage Bus Cacheとは？
「Storage Bus Cache」（記憶域バスキャッシュ）は、Windows Server 2022(以下WinSV2022)より追加された新機能です。
従来より構築可能だった階層記憶域に対する追加機能で、高速Tierの一部をキャッシュとして利用することで、階層記憶域で発生していた高速Tierの領域切れによる低速化を緩和するシロモノです。

https://learn.microsoft.com/ja-jp/windows-server/storage/storage-spaces/storage-spaces-storage-bus-cache

今までもクラスタ構成の記憶域ならば構築できた様ですが、WinSV2022からはスタンドアロンで構築できるようになりました。

実際に実機で構築しましたので、その覚え書きを以下に記載します。
気になっている方などの一助になれば幸いです。

## 実際のハードウェア構成
何の変哲もない自作サーバです。
今回の記憶域バスキャッシュ構成を組むまではvSANクラスタを組んでいたので、その時のHDDやSSDをまとめて載せています。なのでちょっとだけ豪勢です。
でもメモリが半端なのはお金がないからです。現実はつらい。

　CPU：Intel Xeon Silver 4214Y x2
　M/B：ASUS WS C621E SAGE
　MEM：DDR4-2400 LR-DIMM ECC 128GB x4 (CPU毎デュアルチャンネル) 
　GPU：Nvidia RTX2070 (余ってたので)
　SSD：Intel DC P4800X 375GB
　SSD：Intel DC P3700 800GB x4
　HDD：WD Black 3TB x2
　HDD：WD Red Plus 3TB x5
　HDD：TOSHIBA 3TB
　PSU：750w

あとは10GbEのNIC等が入っています。
HBAカードやRAIDカードは無く、全てのHDDをM/BのSATAに接続しています。
SSDはP4800XだけPCIe直で、P3700はU.2接続です。

今回はSSDを4つとHDDを8つでMirror/Parityの階層記憶域を作ります。

## 構築手順
#### 1. OSインストール
まずは手頃なSSDにWinSV2022をインストールします。
エディションはStandardでもDataCenterでも試用版でもなんでも大丈夫です。
また、OSを入れたSSDは記憶域では利用できないので注意しましょう。

#### 2. 役割と機能の追加
次は記憶域バスキャッシュを利用するための機能をインストールします。
「サーバーマネージャー」から「役割と機能の追加」を開き、「機能」の項目まで「次へ」をクリックして進めます。
「機能」の項目まで来たら、「フェールオーバー クラスタリング」にチェックを入れ、インストールを実施します。
![IMG_6069.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717253/8498d484-9ab5-0be8-483f-e3767ae7f416.jpeg)

#### 3. モジュールのインポート
ここからはpowershellでの操作となります。
管理者権限でpowershellを起動して、「Storage Bus Cache」のモジュールをインポートします。
```powershell
Import-Module StorageBusCache
```

#### 4. ディスクの確認
以下コマンドを実行して、物理ディスクの確認を行います。
```powershell
Get-PhysicalDisk
```
ディスクの本数が合っているか、「MediaType」に間違いがないか等を確認しましょう。
また、「CanPool」の項目が「True」のディスクは全て記憶域バスキャッシュの対象となります。
（私が知る限りでは変更はできないみたいです。）
![IMG_6068.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717253/4c6136f0-a445-2319-9797-9d0ab842ad0b.jpeg)

#### 5. 記憶域バスキャッシュの有効化
記憶域バスキャッシュを有効化します。
```powershell
Enable-StorageBusCache
```
進捗が表示され進んでいきます。正常に終われば結果は何も帰りません。
エラーが表示された場合は、エラー内容をググって対処しましょう。


#### 6. 記憶域バスキャッシュの状態確認
以下コマンドを実行して、「Enabled」が「True」なら、記憶域バスキャッシュは有効化されています。
```powershell
Get-StorageBusCache
```
![IMG_6070.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717253/edb31aa5-4c48-4710-bc1a-92eedea02140.jpeg)

#### 7. 記憶域プールの確認
ここまで来れば、既に記憶域プールが作成されている状態になっています。
自動で作成されるプール名は以下のとなります。
`Storage Bus Chache on "デバイス名"`
以下コマンドを入力して確認することもできます。
```powershell
Get-StoragePool
```

#### 8. 階層記憶域の作成
あとは従来通りの方法で階層記憶域を作成してドライブレターを割り当てれば、エクスプローラーから参照できる状態になります。
お好きな条件で高速Tierと低速Tierを作成しましょう。
私は以下の想定で階層記憶域を作成しています。
　高速Tier RAID10相当
　低速Tier RAID6相当
 余談ですが、いつの間にか記憶域プールでのDualParityは「ディスク枚数-2/ディスク枚数」の容量で組めるようになっていました。WinSV2012の頃は「ディスク枚数-3/ディスク枚数」の容量だったハズなので、嬉しい変化ですね。

階層記憶域の容量を決めるときは各ディスクの容量が90%未満になるように値を調整してください。
高速Tier側は記憶域バスキャッシュのキャッシュ領域（デフォルトでは15%）があるため、容量計算が少し大変です。

```powershell
$SSDTier = New-StorageTier -StoragePoolFriendlyName "Storage Bus Cache on [デバイス名]" -FriendlyName SSDTier -MediaType SSD -ResiliencySettingName Mirror -ProvisioningType Fixed -NumberOfColumns 2
$HDDTier = New-StorageTier -StoragePoolFriendlyName "Storage Bus Cache on [デバイス名]" -FriendlyName HDDTier -MediaType HDD -ResiliencySettingName Parity -ProvisioningType Fixed -PhysicalDiskRedundancy 2 -NumberOfColumns 8

New-Volume -FriendlyName "ShareDisk" -DriveLetter Z -FileSystem ReFS -WriteCacheSize 16GB -StorageTiers $SSDTier, $HDDTier -StorageTierSizes 1222694771097, 16195951735603
```

![IMG_6071.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717253/82aabb32-32a2-d4ec-b06b-18e11e0df64e.jpeg)

![IMG_6072.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717253/ab223d21-ac7e-1353-6bb1-700b37a79988.jpeg)

#### 9. 動作確認とReFSファイル整合性オプション
ボリュームの作成がエラー無く帰ってきたら、エクスプローラー開けば構築した階層記憶域が鎮座しているハズです。
上の画像でやってしまっていますが、以下コマンドを入力することでReFSのファイル整合性オプションを有効にできます。
```powershell
Set-FileIntergrity Z: -Enable $True
```
ファイルの破損や腐敗に耐性が付くので、NASの様な用途で使うなら有効化したほうが良いかもですね。
なお、パフォーマンスは結構極端に落ちてしまいます。
![IMG_6065.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3717253/5e39e914-674a-ccd4-9635-13786c80b458.jpeg)
ファイル整合性無効時の速度はIntel DC P3700を4本でRAID0したときの速度くらいですね。
有効にすると単体動作時よりちょっと速いくらいの速度になります。
個人的には十分だと思ったので、私は有効にして運用しています。

## おわりに
記憶域バスキャッシュは体感で速いストレージをHDDのキャパシティで構築できるので、個人的には最高のソリューションです。
旧来のRAID等とは違い、障害時にはWindows側の機能で確認や復旧が出来るのも良いポイントです。
RAIDカードから復旧するのは面倒でしたからね...。

## 参考
https://www.dtc.co.jp/blog/windows_storagebuscache

https://se-abeaver.com/storage-bus-cache-1/