文書の過去の版を表示しています。
Windows Storage Server 2016の起動SSDの空き領域で記憶域階層を構築
前書き
Windowsの記憶域プールでは、構成するドライブを丸ごと割り当てている事例が多く、またそうしなければならない印象がある。実際には別用途で使っているドライブを組み込み、既存データと記憶域プールでドライブを共有することも出来るようだ。
というわけで、Windows Storage Server 2016が入っているRAID-1なSSDアレイを既存のOS領域はそのままに、記憶域プールに組み込み記憶域階層として使えるか試してみた。
1つのRAIDアレイをOS用と記憶域用で共有するなら、RAIDカードの機能で以てそれぞれ論理ドライブとするのがふつー(?)だと思うが、HP B140iでは論理ドライブが使えなかったため、已む無く今回の構成&実験を行ったというのが実情だったりする。
試した環境
| マシン | HP ProLiant ML150 Gen9 |
|---|---|
| CPU | Xeon E5-2620v3 (6C12T/2.4GHz) |
| メモリ | DDR4-2133 16GB (8GBx2) |
| ストレージ | B140i/ZM
|
| OS | Windows Storage Server 2016 Standard |
手順
現在のディスクを確認
PS C:\> Get-PhysicalDisk | ft FriendlyName,SerialNumber,CanPool,BusType,DeviceId,MediaType,Size FriendlyName SerialNumber CanPool BusType DeviceId MediaType Size ------------ ------------ ------- ------- -------- --------- ---- HP LOGICAL VOLUME True RAID 0 SSD 800132521984 HP LOGICAL VOLUME True RAID 1 Unspecified 12002258673664
対象のディスクはRAIDアレイになっている。DeviceIdの0番がRAID-1のSSDアレイ、1番がRAID-10のHDDアレイである。本来はデバイスを直接記憶域システムで管理するのが望ましいとされている。
プールを構成するディスクを列挙&確認
PS C:\> $Disks = Get-PhysicalDisk -CanPool $true PS C:\> $Disks FriendlyName SerialNumber CanPool OperationalStatus HealthStatus Usage Size ------------ ------------ ------- ----------------- ------------ ----- ---- HP LOGICAL VOLUME True OK Healthy Auto-Select 745.18 GB HP LOGICAL VOLUME True OK Healthy Auto-Select 10.92 TB
記憶域プールを作成
ここがミソ、といってもふつーにOSが入っているSSD含めてPhsicalDisksに含めて渡してるだけなんだけど、なかなか気づかないよねっていう。
PS C:\Users\Administrator> New-StoragePool -FriendlyName TieredPool -PhysicalDisks $Disks -StorageSubSystemUniqueId (Get -StorageSubSystem).UniqueId -LogicalSectorSizeDefault 4096 FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly ------------ ----------------- ------------ ------------ ---------- TieredPool OK Healthy False False
物理ディスクとして渡したら、既存のデータ全消去されてディスク全体が使われそうに思うじゃん…
記憶域プールを確認
PS C:\> Get-StoragePool TieredPool | Get-PhysicalDisk FriendlyName SerialNumber CanPool OperationalStatus HealthStatus Usage Size ------------ ------------ ------- ----------------- ------------ ----- ---- HP LOGICAL VOLUME False OK Healthy Auto-Select 745 GB HP LOGICAL VOLUME False OK Healthy Auto-Select 10.92 TB
メディアタイプの強制設定
記憶域階層を作るには、プールにSSDとHDDが最低1つずつ必要である。デバイスの種類は自動的に識別されるが、今回のようにデバイスが直接露出してない場合は往々にして識別できないので、手動で設定してやる。
メディアタイプを確認。
PS C:\> Get-StoragePool TieredPool | Get-PhysicalDisk | ft FriendlyName,DeviceId,MediaType,Size FriendlyName DeviceId MediaType Size ------------ -------- --------- ---- HP LOGICAL VOLUME 0 SSD 799937658880 HP LOGICAL VOLUME 1 Unspecified 12002017673216 <code> なぜかSSDの方は正しく見えている(RAIDの設定ツール側でSSDは別扱いになっているので、そのせいもあるかも。) よってDeviceID 1の方にHDDと指定してやる。 <code> PS C:\> Get-StoragePool TieredPool | Get-PhysicalDisk | where DeviceId -eq 1 | Set-PhysicalDisk -MediaType HDD PS C:\> Get-StoragePool TieredPool | Get-PhysicalDisk | ft FriendlyName,DeviceId,MediaType,Size FriendlyName DeviceId MediaType Size ------------ -------- --------- ---- HP LOGICAL VOLUME 0 SSD 799937658880 HP LOGICAL VOLUME 1 HDD 12002017673216
SSD層とHDD層の設定
PS C:\> Get-StoragePool TieredPool | New-StorageTier -FriendlyName SSDtier -MediaType SSD
ObjectId : {1}\\WIN-JCFBFMM4427\root/Microsoft/Windows/Storage/Providers_v2\SPACES_StorageTier.ObjectId="
{fd905169-74f9-11e8-9d72-806e6f6e6963}:ST:{f1f261c1-646f-4ff3-90a2-985826bc72ca}{2305468e-37dc
-4b4a-87c8-770d886dba14}"
PassThroughClass :
PassThroughIds :
PassThroughNamespace :
PassThroughServer :
UniqueId : {2305468e-37dc-4b4a-87c8-770d886dba14}
AllocatedSize : 0
AllocationUnitSize : Auto
ColumnIsolation : PhysicalDisk
Description :
FaultDomainAwareness : PhysicalDisk
FootprintOnPool : 0
FriendlyName : SSDtier
Interleave : 262144
MediaType : SSD
NumberOfColumns : Auto
NumberOfDataCopies : 2
NumberOfGroups : 1
ParityLayout :
PhysicalDiskRedundancy : 1
ProvisioningType : Fixed
ResiliencySettingName : Mirror
Size : 0
Usage : Data
PSComputerName :
PS C:\> Get-StoragePool TieredPool | New-StorageTier -FriendlyName HDDtier -MediaType HDD
ObjectId : {1}\\WIN-JCFBFMM4427\root/Microsoft/Windows/Storage/Providers_v2\SPACES_StorageTier.ObjectId="
{fd905169-74f9-11e8-9d72-806e6f6e6963}:ST:{f1f261c1-646f-4ff3-90a2-985826bc72ca}{9811c7f1-a66e
-45e9-af52-9269998e5bda}"
PassThroughClass :
PassThroughIds :
PassThroughNamespace :
PassThroughServer :
UniqueId : {9811c7f1-a66e-45e9-af52-9269998e5bda}
AllocatedSize : 0
AllocationUnitSize : Auto
ColumnIsolation : PhysicalDisk
Description :
FaultDomainAwareness : PhysicalDisk
FootprintOnPool : 0
FriendlyName : HDDtier
Interleave : 262144
MediaType : HDD
NumberOfColumns : Auto
NumberOfDataCopies : 2
NumberOfGroups : 1
ParityLayout :
PhysicalDiskRedundancy : 1
ProvisioningType : Fixed
ResiliencySettingName : Mirror
Size : 0
Usage : Data
PSComputerName :
記憶域階層に仮想ディスクを作成
SSD, HDDそれぞれのティアを取得
PS C:\> $SSD = Get-StorageTier -FriendlyName SSDtier PS C:\> $HDD = Get-StorageTier -FriendlyName HDDtier
記憶域階層に仮想ディスクを作成
PS C:\> Get-StoragePool TieredPool | New-VirtualDisk -FriendlyName TieredDisk -ResiliencySettingName Simple -StorageTiers $SSD,$HDD -WriteCacheSize 8GB -StorageTierSizes 632GB,10.9TB
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size ———— ——————— —————– ———— ————– —- TieredDisk OK Healthy False 11.52 TB </code>
ライトキャッシュは8GBにしてみた(デフォルトでは1GB)。この指定はSSD層を構成するSSD毎のキャッシュ量らしいので注意。
セクタサイズとライトキャッシュを確認してみる。
PS C:\> Get-VirtualDisk -FriendlyName TieredDisk | ft LogicalSectorSize,PhysicalSectorSize,WriteCacheSize
LogicalSectorSize PhysicalSectorSize WriteCacheSize
----------------- ------------------ --------------
4096 4096 8589934592
ベンチマーク
ライトキャッシュが8GBなので、テーストデータ4GB/16GB/32GBでCrystalDiskMarkを実行した。
データがキャッシュに全部載るかどうかで違いが出ると予想していたが、殆ど同じ結果となった。16GB以上でも全部SSDに大して書き込まれてるように見える…。記憶域階層の最適化でSSDが良く使われるデータで一杯になれば、また違いがでるのかしら?


