网上能找到的有效信息过于少,微软的文档也没找到很靠谱的说法。
我起初是计划使用存储池放 8 块同容量硬盘,组双奇偶校验模式,可允许任意两盘损坏同时能够使用 ReFS 的巡检和坏块自动修复功能,类似 RAIDZ-2 或者 RAID6 。
但从各种地方看来的文章都表示存储池无法实现(8-2)/8 = 75%的空间利用率,且无法在 GUI 界面指定列数。比如
https://zhuanlan.zhihu.com/p/22604396
其中还有“双奇偶校验最小需要 7 盘,4 盘空间却只能允许 2 块损坏”等论述,看得我一头雾水。
研究了半天微软这个列数的定义,发现它指的是一个定义在池上的虚拟磁盘能够同时写入的最大物理磁盘数。按照直觉来说,如果我要耗尽一个池中所有资源来做一个虚拟磁盘,那么肯定是要使用所有的物理硬盘才对。但使用 GUI 建立奇偶校验盘时,列数却默认不会是最大的磁盘数。
查询了相关命令文档,那么想实现类 RAIDZ2 或 RAID6 的效果,就可以使用 powershell 这么来设置:
$New-VirtualDisk -StoragePoolFriendlyName "YourPoolName" -FriendlyName "YourDiskName" -ProvisioningType Fixed -ResiliencySettingName "Parity" -PhysicalDiskRedundancy 2 -NumberOfColumns $YourMaxDiskNumber -UseMaximumSize
经测试,这样建立的 2 块冗余虚拟磁盘能够达到理想的空间利用率(n-2)/n,但是仅限于物理磁盘数量 n>=5 块时。当 n 降到 4 就会报错“The storage pool does not have sufficient eligible resources for the creation of the specified virtual disk.”原理不明。
同时测试了任意拆卸 1 块或 2 块物理磁盘后表现,均可以保持正常的文件读写,没有发生文件丢失情况。插入新盘后需要手动修复降级虚拟磁盘。同时使用 powershell 删除故障磁盘(不使用 powershell 删不掉,原理不明):
$ Get-PhysicalDisk
$ $Disk = Get-PhysicalDisk -SerialNumber DamagedDiskSerialNumber
$ Remove-PhysicalDisk -PhysicalDisks $Disk -StoragePoolFriendlyName "YourPoolName"
折腾完以上的问题,还是存在一些疑问,为什么微软会设计出一个列数的概念来?这个概念对存储池管理有什么帮助吗,为什么 GUI 界面上不讲清楚,或者采用默认最大可利用率的设置呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.