※ | このコンテンツは、以前「WS16TP4 で SSD + HDD の階層作る」として公開していたのを、Windows Server 2016 製品版用に書き直したものです。 |
Windows Server 2016 には「記憶域プール」と呼ばれるストレージを束ねる機能があります。
更に、Windows Server では SSD と HDD
を階層化させ、パフォーマンスアップとビット単価ダウンを両立させることができます。
この環境に慣れてしまうと、素の HDD
環境は使いたくなくなるくらいの中毒性があります。
どのくらいの性能差があるかは、これを見てもらえると一目でわかると思います。
素の HDD(最近買ったHDD) |
SSD + HDD で階層化(数年前に買ったSSD&HDD) |
Windows Server 2016 では、SSD x1 と HDD x1
を階層化して、安価で高速なストレージ環境を作る事が出来ます。
(TP4 では SSDxN HDDxN : N >= 2
でしか階層化はできなかったのですが、製品版では SSDx1 HDDx1 構成が可能になりました)
ただし、階層化をする場合にフルサイズを割り当てようとするとエラーになるので、1割引きサイズで割り当てをします。(仕様なのか bug なのか不明)
フルサイズを割り当てるとエラーになる
1割引きにする
それでは、PowerShell で構築する際の手順です。
# 物理ディスク確認 Get-PhysicalDisk | ft FriendlyName,SerialNumber,CanPool,BusType,DeviceId,EnclosureNumber,MediaType,Size -AutoSize ### ストレージプールに組み込むディスク # ディスクを選択する場合 # $SerialNumbers = "CVMP227602BH120BGN", "W1D05S2A" # $Disks = Get-PhysicalDisk | ?{$SerialNumbers -Contains $_.SerialNumber} # 組み込み可能な全てのディスクを組み込む $Disks = Get-PhysicalDisk -CanPool $true # プールに組み込むディスク確認 $Disks # ストレージプール作成 New-StoragePool -FriendlyName Pool01 -PhysicalDisks $Disks -StorageSubSystemUniqueId (Get-StorageSubSystem).UniqueId # ストレージプール確認(作成時に詳細が表示さるので、必要に応じて) # Get-StoragePool Pool01 # プールに組み込まれた物理ディスク確認 Get-StoragePool Pool01 | Get-PhysicalDisk | ft FriendlyName,SerialNumber,CanPool,BusType,DeviceId,EnclosureNumber,MediaType, Size -AutoSize ### 物理ディスクの MediaType がセットされていなかったら設定 # Get-StoragePool Pool01 | Get-PhysicalDisk | ? [条件] | Set-PhysicalDisk -MediaType SSD # Get-StoragePool Pool01 | Get-PhysicalDisk | ? [条件] | Set-PhysicalDisk -MediaType HDD # プールに組み込まれている物理ディスク確認 # Get-StoragePool Pool01 | Get-PhysicalDisk | ft FriendlyName,SerialNumber,CanPool,BusType,DeviceId,EnclosureNumber,MediaType,Size -AutoSize # ストレージ階層作成 Get-StoragePool Pool01 | New-StorageTier -FriendlyName SSDtier -MediaType SSD Get-StoragePool Pool01 | New-StorageTier -FriendlyName HDDtier -MediaType HDD # ストレージ階層確認(作成時に詳細が表示さるので、必要に応じて) # Get-StorageTier -FriendlyName SSDtier # Get-StorageTier -FriendlyName HDDtier # 階層のサイズを求める(1割引き) $SsdSize = 0 Get-StoragePool Pool01 | Get-PhysicalDisk | ?{$_.MediaType -eq "SSD"} | % {$SsdSize += $_.Size} $SsdSize *= 0.9 $HddSize = 0 Get-StoragePool Pool01 | Get-PhysicalDisk | ?{$_.MediaType -eq "HDD"} | % {$HddSize += $_.Size} $HddSize *= 0.9 # Simple で仮想ディスク作成 $SSD = Get-StorageTier -FriendlyName SSDtier $HDD = Get-StorageTier -FriendlyName HDDtier Get-StoragePool Pool01 | New-VirtualDisk -FriendlyName VirtualDisk01 -ResiliencySettingName Simple -StorageTiers $SSD,$HDD -StorageTierSizes $SsdSize,$HddSize # 仮想ディスク確認(作成時に詳細が表示さるので、必要に応じて) # Get-StoragePool Pool01 | Get-VirtualDisk |
削除する場合の手順
# 仮想ディスク削除 Get-VirtualDisk | Remove-VirtualDisk -Confirm:$false # ストレージ階層削除 Get-StorageTier | Remove-StorageTier -Confirm:$false # 記憶域プール削除 Get-StoragePool | ? IsPrimordial -eq $false | Remove-StoragePool -Confirm:$false |
実際に構築した際のログはこんな感じです。
PS C:\> # 物理ディスク確認 PS C:\> Get-PhysicalDisk | ft FriendlyName,SerialNumber,CanPool,BusType,DeviceId,EnclosureNumber,MediaType,Size -AutoSize FriendlyName SerialNumber CanPool BusType DeviceId EnclosureNumber MediaType Size ------------ ------------ ------- ------- -------- --------------- --------- ---- TOSHIBA DT01ACA300 93640AEKS False SATA 2 HDD 3000592982016 INTEL SSDSC2CT060A3 CVMP220201YB060AGN False SATA 0 SSD 60022480896 INTEL SSDSC2CT120A3 CVMP227602BH120BGN True SATA 1 SSD 120034123776 ST1000DM003-9YN162 W1D05S2A True SATA 3 HDD 1000204886016 PS C:\> PS C:\> ### ストレージプールに組み込むディスク PS C:\> # ディスクを選択する場合 PS C:\> # $SerialNumbers = "CVMP227602BH120BGN", "W1D05S2A" PS C:\> # $Disks = Get-PhysicalDisk | ?{$SerialNumbers -Contains $_.SerialNumber} PS C:\> PS C:\> # 組み込み可能な全てのディスクを組み込む PS C:\> $Disks = Get-PhysicalDisk -CanPool $true PS C:\> PS C:\> # プールに組み込むディスク確認 PS C:\> $Disks FriendlyName SerialNumber CanPool OperationalStatus HealthStatus Usage Size ------------ ------------ ------- ----------------- ------------ ----- ---- INTEL SSDSC2CT120A3 CVMP227602BH120BGN True OK Healthy Auto-Select 111.79 GB ST1000DM003-9YN162 W1D05S2A True OK Healthy Auto-Select 931.51 GB PS C:\> PS C:\> # ストレージプール作成 PS C:\> New-StoragePool -FriendlyName Pool01 -PhysicalDisks $Disks -StorageSubSystemUniqueId (Get-StorageSubSystem).UniqueId FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly ------------ ----------------- ------------ ------------ ---------- Pool01 OK Healthy False False PS C:\> # ストレージプール確認(作成時に詳細が表示さるので、必要に応じて) PS C:\> # Get-StoragePool Pool01 PS C:\> PS C:\> # プールに組み込まれた物理ディスク確認 PS C:\> Get-StoragePool Pool01 | Get-PhysicalDisk | ft FriendlyName,SerialNumber,CanPool,BusType,DeviceId,EnclosureNumber,MediaType,Size -AutoSize FriendlyName SerialNumber CanPool BusType DeviceId EnclosureNumber MediaType Size ------------ ------------ ------- ------- -------- --------------- --------- ---- INTEL SSDSC2CT120A3 CVMP227602BH120BGN False SATA 1 SSD 119990648832 ST1000DM003-9YN162 W1D05S2A False SATA 3 HDD 1000190509056 PS C:\> ### 物理ディスクの MediaType がセットされていなかったら設定 PS C:\> # Get-StoragePool Pool01 | Get-PhysicalDisk | ? [条件] | Set-PhysicalDisk -MediaType SSD PS C:\> # Get-StoragePool Pool01 | Get-PhysicalDisk | ? [条件] | Set-PhysicalDisk -MediaType HDD PS C:\> PS C:\> # プールに組み込まれている物理ディスク確認 PS C:\> # Get-StoragePool Pool01 | Get-PhysicalDisk | ft FriendlyName,SerialNumber,CanPool,BusType,DeviceId,EnclosureNumber,MediaType, Size -AutoSize PS C:\> PS C:\> # ストレージ階層作成 PS C:\> Get-StoragePool Pool01 | New-StorageTier -FriendlyName SSDtier -MediaType SSD ObjectId : {1}\\WSV12\root/Microsoft/Windows/Storage/Providers_v2\SPACES_StorageTier.ObjectId="{d8e5dc90-8833-11e6-8a90-806e6f6e6963}:ST:{86579bb5-2f77-4810 -bda6-2699ed54ced6}{f5dd133b-50b2-4065-9710-57041d330f72}" PassThroughClass : PassThroughIds : PassThroughNamespace : PassThroughServer : UniqueId : {f5dd133b-50b2-4065-9710-57041d330f72} 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 Pool01 | New-StorageTier -FriendlyName HDDtier -MediaType HDD ObjectId : {1}\\WSV12\root/Microsoft/Windows/Storage/Providers_v2\SPACES_StorageTier.ObjectId="{d8e5dc90-8833-11e6-8a90-806e6f6e6963}:ST:{86579bb5-2f77-4810 -bda6-2699ed54ced6}{64b882b4-2190-4a39-9292-207c31adea25}" PassThroughClass : PassThroughIds : PassThroughNamespace : PassThroughServer : UniqueId : {64b882b4-2190-4a39-9292-207c31adea25} 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 : PS C:\> # ストレージ階層確認(作成時に詳細が表示さるので、必要に応じて) PS C:\> # Get-StorageTier -FriendlyName SSDtier PS C:\> # Get-StorageTier -FriendlyName HDDtier PS C:\> PS C:\> # 階層のサイズを求める(1割引き) PS C:\> $SsdSize = 0 PS C:\> Get-StoragePool Pool01 | Get-PhysicalDisk | ?{$_.MediaType -eq "SSD"} | % {$SsdSize += $_.Size} PS C:\> $SsdSize *= 0.9 PS C:\> PS C:\> $HddSize = 0 PS C:\> Get-StoragePool Pool01 | Get-PhysicalDisk | ?{$_.MediaType -eq "HDD"} | % {$HddSize += $_.Size} PS C:\> $HddSize *= 0.9 PS C:\> PS C:\> # Simple で仮想ディスク作成 PS C:\> $SSD = Get-StorageTier -FriendlyName SSDtier PS C:\> $HDD = Get-StorageTier -FriendlyName HDDtier PS C:\> Get-StoragePool Pool01 | New-VirtualDisk -FriendlyName VirtualDisk01 -ResiliencySettingName Simple -StorageTiers $SSD,$HDD -StorageTierSizes $SsdSize,$HddSize FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size ------------ --------------------- ----------------- ------------ -------------- ---- VirtualDisk01 OK Healthy False 939.25 GB PS C:\> # 仮想ディスク確認(作成時に詳細が表示さるので、必要に応じて) PS C:\> # Get-StoragePool Pool01 | Get-VirtualDisk PS C:\> |
仮想ディスクが出来たら、その上にボリュームを作って ReFS か NTFS
でフォーマットすれば普通のボリュームとして使えます。
PowerShell でボリューム作成とフォーマットまでするのでしたら、こんな感じで出来ます。
# ディスク確認 Get-Disk # ディスクの初期化 Initialize-Disk -Number 5 -PartitionStyle GPT # ボリュームの表示 Get-Volume # パーティションの作成 New-Partition -DiskNumber 5 -UseMaximumSize -DriveLetter E # ReFS でフォーマット Format-Volume -DriveLetter E -FileSystem ReFS -Confirm:$false |
記憶域プールの良いところは、メーカーやサイズがバラバラでもプールに収容できる点です。
試しに 60GB SSD + 240GB SSD + 2TB HDD + 1TB HDD のバラバラのサイズで構成しましたが、何ら問題なく使用できました。
余談ですが、Windows 10 にも階層コマンドレットはあるのですが、階層がサポートされていないので仮想ディスク作成時にラーになり階層化することはできません。
Copyright © MURA All rights reserved.