Windows Storage Spaces 笔记

自从服务器换装 Windows 10 专业版之后,大部分存储空间的操作都可以通过控制面板搞定(开始菜单内搜索“storage spaces”)。但是有些细节设置在控制面板里面没有,最典型的例子就是“柱面数量”(Number of Columns)。

本文将会记录一些必须要用 PowerShell 搞定的存储空间操作。

背景知识

  1. 不同的容错场景
  2. 错误的 Logical Sector Size 可以导致存储池读写效率大幅降低

RMW__Physical_4k__Logical_512.jpg

获取信息

1. 列出现有物理硬盘

Get-PhysicalDisk | Format-Table FriendlyName, MediaType, SerialNumber, UniqueId, Size, CanPool, CannotPoolReason

2. 列出现有虚拟硬盘的柱面数量设置

Get-VirtualDisk | ft FriendlyName, Size, NumberOfColumns

3. 查看存储空间正在执行的后台任务

Get-StorageJob

具体操作

1. 使用正确的 Logical Sector Size 建立存储池

$Disks = Get-PhysicalDisk | ? CanPool | ? MediaType –eq HDD
New-StoragePool -FriendlyName "Pool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks $Disks -LogicalSectorSizeDefault 4096

在建立存储池之后需要将存储池标记成“带备用电源保护”以提高读写性能

Set-StoragePool -FriendlyName "Pool" -IsPowerProtected $True

2. 新建虚拟硬盘

新建虚拟硬盘时可以加入柱面数量设置

New-VirtualDisk -StoragePoolFriendlyName "Pool" -FriendlyName "New" -Size 1TB -ProvisioningType Thin -ResiliencySettingName "Parity" -NumberOfColumns 5 -PhysicalDiskRedundancy 1 -Interleave 16K
  • NumberOfColumns 就是柱面数量
  • PhysicalDiskRedundancy 是冗余信息所需的磁盘数量(同时也是柱面数量)
  • Interleave 是每柱面一次性写入数据量(详细请见这里,搜索用户 Apamnapat 的回复,注意格式化虚拟硬盘的时候需要根据 Interleave 来调整 Cluster Size。或者参照下表)

Recommended_Parity_Settings.PNG

所以,上例中,新建的虚拟硬盘将会分布到 5 块物理硬盘上,并且用其中 1 块存储冗余信息,剩下的 4 块硬盘存储数据。

:根据个人经验,最好不要让虚拟磁盘横跨所有的物理硬盘。例如有 10 块硬盘的情况下,5 柱面 1 冗余的方案要优于 10 柱面 2 冗余。原因是一旦存储空间出问题,需要转移数据,使用 5 柱面的方案可以将数据先集中在 5 块物理硬盘,然后将闲置的 5 块物理硬盘移除存储池做数据暂存使用,这样灵活性更高。如果使用了 10 柱面方案,则需要将数据完全移出存储池才能着手解决存储空间的问题。

3. 重置硬盘

如果遇到“Insufficient Capacity”原因无法将硬盘加入,需要先重置硬盘。

Reset-PhysicalDisk -FriendlyName "HDD1"

如果几个硬盘都有同样的 FriendlyName,可以用 SerialNumber 来区分

Get-PhysicalDisk -SerialNumber 123456 | Reset-PhysicalDisk

4. 将硬盘加入存储池

如果遇到 0x00000075 错误(无法初始化,提示有其他软件使用硬盘),可以用以下命令将所有闲置硬盘加入存储池

Add-PhysicalDisk -StoragePoolFriendlyName "Pool" -PhysicalDisks (Get-PhysicalDisk -CanPool $True)

如果要将硬盘作为热备份(hot spare)加入存储池,需要在命令中加入 -usage 选项

Add-PhysicalDisk -StoragePoolFriendlyName "Pool" -PhysicalDisks (Get-PhysicalDisk -CanPool $True) -Usage HotSpare

5. 从存储空间中删除物理硬盘

如果需要从存储空间中删除一块物理硬盘,首先要标记硬盘退役

Set-PhysicalDisk -FriendlyName 'HDD1' -Usage Retired

标记之后系统会将硬盘上的数据重新分布到其他硬盘上。等数据转移完成后

Remove-PhysicalDisk -FriendlyName 'HDD1'

6. 重命名硬盘

同型号的硬盘 FriendlyName 都一样,如果想要改名区分,可以用以下命令

Set-PhysicalDisk -UniqueId "ID" -NewFriendlyName "HDD1"

7. 更改“存储空间不足”报警的阈值

Windows 系统默认在存储空间容量达到 70% 以后,如果有动态分配空间的虚拟磁盘(Thin Provision)存在,就会报警“存储空间不足,请添加 x 个硬盘”(英文为:Low capacity)。可以通过以下命令将报警阈值提高到 90%。

Set-StoragePool -FriendlyName "Pool" -ThinProvisioningAlertThresholds 90
添加新评论