本文基于Windows Server2022,理论上也支持win10和win11,演示代码使用2个SSD+2个HDD组raid
windows存储池的空间利用率可以媲美群晖SHR,合理的配置甚至可以超越
Windows自带模式以及不推荐的原因
简单卷:就是平常用的一个盘一个卷
跨区卷:把多个空闲磁盘合并为一个盘
带区卷:就是raid0,raid的磁盘空间大小必须一致
镜像卷:就是raid1
RAID-5卷:和名字一样,raid5
不推荐理由:系统的异常重启之类会导致重新同步(我就因为组了镜像卷踩坑了),一直占满了磁盘IO
存储模式介绍
windows存储池有3种模式
Simple:简单,就是JBOD,比如2块10G的,最后合成一个20G的,没有容错空间
Parity:奇偶校验,3块盘起步,可自由指定n块硬盘的容错(比如raid5就是允许1块盘的容错)
Mirror:镜像,又分为双向镜像和三向镜像,硬盘大小不需要一致
·双向镜像:就是raid1,允许1个盘损坏而数据不丢失
·三向镜像:3个盘进行raid1,允许2个盘损坏而数据不丢失
三向镜像存储模式类似如图
创建存储池
windows存储池下有存储层,存储层可以创建为虚拟磁盘,虚拟磁盘可创建磁盘卷进行使用
创建一个名为NAS的存储池,名字支持中文,如果不想起名NAS,下面参数里所有的的-StoragePoolFriendlyName后的NAS都改为你的存储池名称
网上教程很多,怎么创建我就不写了
创建存储层+虚拟磁盘
指令都是在PowerShell里执行,存储层一旦创建好,后期就无法更改了(比如存储模式、列数,允许损坏数),所以一定要提前规划好
常用参数介绍
下方指令会用到的参数解释,可根据个人情况调整
-StoragePoolFriendlyName:存储池的名称
-PhysicalDiskRedundancy:硬盘允许损坏的个数,不能随便填,一般填1就行,除非磁盘很多,可以填更高
-ResiliencySettingName:存储模式,填上面的Simple、Mirror、Parity中的一个
-ProvisioningType:磁盘类型,Fixed为固定,还有个动态扩展
-FriendlyName:存储层名称?本文不建议更改
-NumberOfColumns(重要):阵列列数,默认3,这个参数的填写决定了存储池的空间利用率。
-Interleave:交织值,比如在填写128KB+单奇偶校验+磁盘数3/5/9盘+磁盘大小一致时?,NTFS格式化时设置分配单元大小=交织值x(n-1),也就是256/512/1024KB。可最大化空间利用+写入性能
GUI界面是无法设置阵列列数和交织值的!
阵列列数如何填写
注:下文的硬盘数不包括SSD的数量,仅为HDD的数量
1、在硬盘大小相同的情况下,列数=硬盘数
2、在硬盘大小不同的情况下,列数为n-1,然后容量能被n-1整除就是最高利用率
假设硬盘为3个10T2个15T,那么列数为n-1就是4列,总容量60可以整除4,那利用率就是最高的
由于后续可能会新加硬盘进来,新加硬盘的利用率就不高了,所以windows存储池适合后续不会扩容硬盘的情况
查询并修改磁盘属性
查询磁盘属性,主要看最后的MediaType列,如果不是HDD或SSD则需要修改
Get-PhysicalDisk | ft FriendlyName,DeviceId,BusType,UniqueId,Size,MediaType -auto
设置正确的磁盘类型(可加个-NewFriendlyName "名字"把FriendlyName参数也改了,方便识别)
Set-PhysicalDisk -UniqueId "上面查出来的UniqueId" -MediaType "HDD(或者SSD)"
方式2:计算机管理-磁盘管理,右键添加进来
创建SSD存储层
注:不打算使用分层的(只有HDD盘的)可以跳过这2个创建存储层的部分,直接到[创建虚拟磁盘]开始执行代码
这里仅为最基础版本,对2个SSD创建镜像,详细的可以根据上面的常用参数进行新添和修改
SSD最好买企业版的,作为存储池的一部分,我只推荐使用Mirror模式提升稳定性
New-StorageTier -StoragePoolFriendlyName NAS -FriendlyName SSDTier -MediaType SSD -ProvisioningType Fixed -ResiliencySettingName Mirror
创建HDD存储层
由于我只有2个同大小硬盘,所以使用了Mirror
New-StorageTier -StoragePoolFriendlyName NAS -FriendlyName HDDTier -MediaType HDD -ProvisioningType Fixed -ResiliencySettingName Mirror
一般来说应该使用奇偶校验,并设置阵列列数
创建奇偶校验层样例:
New-StorageTier -StoragePoolFriendlyName NAS -FriendlyName HDDTier -MediaType HDD -ProvisioningType Fixed -ResiliencySettingName Parity -PhysicalDiskRedundancy 1 -NumberOfColumns 上文计算出的列数
创建虚拟磁盘
创建带SSD性能分层的虚拟磁盘
指令一条条输入
20G表示缓存的大小,平时从U盘读文件开始很快后面很慢就是用到了缓存,这里的大小设置为5G之类的都行,够用了,改缓存大小要同步改第3、5条的指令
0.95我也不知道什么玩意,应该是给点冗余,比如512G硬盘买来只能用465G这样,可以从1慢慢往下降,直到运行不报错
如果报错提示存储池容量不符合要求,那就一点点降低0.95这个值
$SSD = Get-StorageTier -FriendlyName SSDTier
$HDD = Get-StorageTier -FriendlyName HDDTier
$SSDSIZE = (Get-StorageTierSupportedSize -InputObject $SSD).TierSizeMax*0.95 -20GB
$HDDSIZE = (Get-StorageTierSupportedSize -InputObject $HDD).TierSizeMax*0.95
New-VirtualDisk -StoragePoolFriendlyName NAS -FriendlyName "NAS虚拟磁盘" -StorageTiers @($SSD,$HDD) -StorageTierSizes @($SSDSIZE,$HDDSIZE) -WriteCacheSize 20GB
创建普通的虚拟磁盘(无SSD)
不带SSD层的创建较为简单,示例代码为创建20G的3列的奇偶校验的虚拟磁盘
New-VirtualDisk -StoragePoolFriendlyName NAS -FriendlyName "NAS虚拟磁盘" -ProvisioningType Fixed -ResiliencySettingName Parity -Sizw 20GB -NumberOfColumns 3
然后右键虚拟磁盘扩容到最大容量
创建完成后刷新一下虚拟磁盘就出来了
添加虚拟磁盘到本机
上一步创建虚拟磁盘后进行右键联机,可以在存储池界面也可以在计算机管理界面
随后右键新建卷就可以创建磁盘了,存储池界面进行创建有点繁琐并且不支持ReFS格式的创建,推荐去计算机管理-磁盘管理,右键创建,我使用ReFS格式,与NTFS的优劣自行查询
新添磁盘
1、新磁盘插入电脑
2、详见上文的[查询并修改磁盘属性],确保正常显示HDD或SSD
3、右键存储池-添加物理磁盘
4、PowerShell执行存储池优化命令(不执行会降低磁盘利用率,NAS为你的存储池名称),比较费时,耐心等待
Optimize-StoragePool NAS
5、扩容存储层
查询HDD存储层空闲容量(只能大概估算),由于除了1GB,所以结果是GB单位
(Get-StorageTierSupportedSize -FriendlyName HDDTier).TierSizeMax/1GB
假设查出来有15T的空间,原本虚拟磁盘大小10T,那实际大小就是25T
所以用指令设置大小为25T(单位支持TB,GB,MB?(没试过))
Resize-StorageTier -InputObject (Get-StorageTier -FriendlyName HDDTier) -Size 25TB
然后就会发现报错了,因为显示15T不是说真的就能加15T上去,一点点降低后面的大小,直到不报错
6、扩容虚拟磁盘
右键虚拟磁盘,新大小输入最大大小即可
磁盘故障后的灾难恢复
注:win10上的恢复似乎有所不同
1、添加新硬盘,容量必须大于等于坏掉的盘
2、详见上文的[查询并修改磁盘属性],确保正常显示HDD或SSD
3、右键存储池-添加物理磁盘
4、使用2行指令停用故障盘
$FailedDisk = Get-PhysicalDisk | Where-Object -Property HealthStatus -ne Healthy
$FailedDisk | Set-PhysicalDisk -Usage Retired
5、右键虚拟磁盘点击修复,比较耗时
6、右键虚拟磁盘旁的物理磁盘,删除故障盘
其他想说的
1、并不是每个人都会时刻去关注硬盘是不是坏了,所以推荐安装一个软件Hard Disk Sentinel,设置好硬盘损坏会直接提示,可设置邮件发送提醒
2、嫌windows存储池麻烦可以Hyper-V弄个群辉或者其他NAS系统专门用来管理
参考文献:
https://www.bilibili.com/video/BV13A4m1V7ig
https://www.bilibili.com/video/BV1vu4y1n7sB
https://www.bilibili.com/read/cv27307913
https://www.bilibili.com/read/cv16124712
https://www.bilibili.com/read/cv29170783