正常情况分层存储这个功能只能在Windows Server 服务器上面创建使用,但是通过PowerShell命令也可以在Windows10上创建分层存储。

建议最低配置还是 2块固态+3块或以上的机械,虽然1块固态+1块机械也可以做,但挂1块就全挂了,不建议这样操作,除非数据不重要。

有什么用

大概就类似于 “傲腾加速机械硬盘”、“intel Cache Acceleration Software”、“AMD StoreMI”、“希捷的固态混合硬盘(SSHD)”、“PrimoCache二级缓存加速机械硬盘” 之类的,用更快的固态硬盘当缓存来加速较慢的机械硬盘。

算是用比较折衷的价格来获取“固态硬盘的高性能”和“机械硬盘的廉价容量”的方案。

写入数据时会优先写入到固态层,常用的读取数据(热数据)也会优先存放在固态层。在热数据变化不频繁、短时间内单次写入不超过固态缓存层容量的情况下,还是有不错的使用体验的。

但是现在个人计算机上的 PCIe Gen 4.0x4 的高性能固态只需要大概 500块RMB/1TB 的价格,对于个人用户来说,把多余的旧硬盘卖了,买块新固态更实在点……

所以这个方案还是企业上才有应用场景,根据冷热数据比例来搭配存储,比如说每10TB机械用1TB固态来加速之类的。

这里是用2块(做镜像) 256GB 的三星860EVO固态硬盘来加速一块2TB的机械硬盘(希捷的叠瓦盘)的效果。

CrystalDiskMark测试

HD Tune Pro 测速

查看硬盘

好了,开始实操,先看一下电脑上的硬盘

POWERSHELL
1# 查看硬盘列表
2Get-PhysicalDisk
3
4# 或者这样更直观一点,先按 "MediaType","BusType" 排序,再只显示想要的属性。
5Get-PhysicalDisk |`
6Sort-Object -Property "MediaType","BusType" -Descending |`
7Format-Table -Property DeviceId,FriendlyName,SerialNumber,BusType,MediaType,CanPool,Size
点击展开查看更多

硬盘信息如下

POWERSHELL
 1PS C:\Windows\system32> Get-PhysicalDisk |`
 2Sort-Object -Property "MediaType","BusType" -Descending |`
 3Format-Table -Property DeviceId,FriendlyName,SerialNumber,BusType,MediaType,CanPool,Size
 4
 5DeviceId FriendlyName                   SerialNumber                             BusType MediaType CanPool          Size
 6-------- ------------                   ------------                             ------- --------- -------          ----
 73        GALAX KA1D0128A                F688075****                              SATA    SSD          True  120034123776
 89        TOSHIBA THNSNJ128GCSU          Z42S104****                              SATA    SSD          True  128035676160
 94        J.ZAO QL SERIES 512GB SSD      0000_0006_2207_****_****_2703_3000_0747. NVMe    SSD         False  512110190592
105        INTEL MEMPEK1W016GA            PHBT715400K1016D    _00000001.           NVMe    SSD          True   14403239936
117        TOSHIBA DT01ACA200             Z4OMX****                                SATA    HDD          True 2000398934016
126        TOSHIBA DT01ACA200             Z4FXE****                                SATA    HDD          True 2000398934016
138        TOSHIBA DT01ACA200             Z5JMY****                                SATA    HDD          True 2000398934016
142        WDC WD40PURX-78AKYY0           WD-WX52****ERR3                          SATA    HDD         False 4000787030016
150        ST4000VX000-2AG166             ZDHA****                                 SATA    HDD         False 4000787030016
161        ST4000VX007-2DT166             ZDHA****                                 SATA    HDD         False 4000787030016
点击展开查看更多

选择硬盘

我打算用来建分层存储的,就是这里面的 2块120GB固态硬盘(SSD),3块2TB机械硬盘(HDD)。

2块固态做镜像,3块机械做奇偶校验,这样都可以容忍各自损坏1块盘。

CanPoolTrue 就是没内容没分区可以加入存储池使用的,本来把所有CanPoolTrue 的硬盘拿来建池就是正常操作,但是里面还有一块13GB的傲腾,也是 CanPoolTrue

我又不想用这块傲腾,那要怎么选?拆下来吗?或者新建个分区吗?也不用这样,筛选一下就行,下面是常用的方法。

POWERSHELL
 1# 选择要添加到池的硬盘
 2
 3# 按手动填写的 DeviceId 来添加
 4$DeviceId_array= @(
 5    "7",
 6    "6",
 7    "3",
 8    "9",
 9    "8"
10)
11$DeviceId_list = $DeviceId_array -join '|'
12$PhysicalDisks1 = (Get-PhysicalDisk | Where-Object {$_.DeviceId -match $DeviceId_list})
13
14# 筛选 CanPool 为 True ,并且 Size 容量 大于 100GB 的来添加
15$PhysicalDisks2 = (Get-PhysicalDisk -CanPool $True | Where-Object {$_.Size -gt 100GB})
16
17# 筛选 CanPool 为 True ,并且 BusType 接口类型 为 SATA 的来添加
18$PhysicalDisks3 = (Get-PhysicalDisk -CanPool $True | Where-Object {$_.BusType -eq "SATA"})
点击展开查看更多

好了,这三个$PhysicalDisks 得到的结果都是那 2块120GB固态硬盘(SSD),3块2TB机械硬盘(HDD)。

POWERSHELL
1PS C:\Windows\system32> $PhysicalDisks3 | Sort-Object -Property "MediaType" -Descending
2
3Number FriendlyName                   SerialNumber       MediaType CanPool OperationalStatus HealthStatus Usage            Size
4------ ------------                   ------------       --------- ------- ----------------- ------------ -----            ----
53      GALAX KA1D0128A                F688075****        SSD       True    OK                Healthy      Auto-Select 111.79 GB
69      TOSHIBA THNSNJ128GCSU          Z42S104****        SSD       True    OK                Healthy      Auto-Select 119.24 GB
77      TOSHIBA DT01ACA200             Z4OMX****          HDD       True    OK                Healthy      Auto-Select   1.82 TB
86      TOSHIBA DT01ACA200             Z4FXE****          HDD       True    OK                Healthy      Auto-Select   1.82 TB
98      TOSHIBA DT01ACA200             Z5JMY****          HDD       True    OK                Healthy      Auto-Select   1.82 TB
点击展开查看更多

清除磁盘

要是硬盘不是空,-CanPoolFalse 怎么办?

POWERSHELL
1# 查看硬盘,记下要清理的硬盘的 Number 值,假设是 9
2Get-Disk 
3
4# 清理硬盘
5Clear-Disk -Number 9 -RemoveData -RemoveOEM
6
7# 重置硬盘,刷新 -CanPool 的状态
8Get-PhysicalDisk -DeviceNumber 9 | Reset-PhysicalDisk
点击展开查看更多

你也可以按上面一样把硬盘批量选出来,然后 Reset-PhysicalDisk

POWERSHELL
 1# 选择要添加到池的硬盘
 2$DeviceId_array= @(
 3    "7",
 4    "6",
 5    "3",
 6    "9",
 7    "8"
 8)
 9$DeviceId_list = $DeviceId_array -join '|'
10
11
12# 清理硬盘
13$DiskList = (Get-Disk | Where-Object {$_.Number -match $DeviceId_list})
14$DiskList | Clear-Disk -RemoveData -RemoveOEM -PassThru
15
16# 重置硬盘,刷新 -CanPool 的状态
17$PhysicalDisks1 = (Get-PhysicalDisk | Where-Object {$_.DeviceId -match $DeviceId_list})
18$PhysicalDisks1 | Reset-PhysicalDisk
点击展开查看更多

创建池

POWERSHELL
1#创建池
2New-StoragePool StoragePoolFriendlyName "TieredStoragePool" StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks $PhysicalDisks3
点击展开查看更多

"TieredStoragePool" 就是池的命名 , –StorageSubsystemFriendlyName 这个的参数照抄就行,-PhysicalDisks 提供上面选的硬盘

POWERSHELL
1PS C:\Windows\system32> New-StoragePool StoragePoolFriendlyName "TieredStoragePool" `
2StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks $PhysicalDisks3
3
4FriendlyName      OperationalStatus HealthStatus IsPrimordial IsReadOnly    Size AllocatedSize
5------------      ----------------- ------------ ------------ ----------    ---- -------------
6TieredStoragePool OK                Healthy      False        False      5.68 TB       1.25 GB
点击展开查看更多

创建层(模板)

POWERSHELL
1#层
2New-StorageTier -StoragePoolFriendlyName "TieredStoragePool" -FriendlyName "SSDTier" -MediaType SSD -ResiliencySettingName Mirror
3New-StorageTier -StoragePoolFriendlyName "TieredStoragePool" -FriendlyName "HDDTier" -MediaType HDD -ResiliencySettingName Parity
点击展开查看更多

固态做镜像(Mirror),机械硬盘做奇偶(Parity),创建的这两个层只是做“参数”来用的。

简单 Simple:就是不做任何冗余

镜像 Mirror:至少2块盘,可以空间为 1 块盘

奇偶 Parity:至少要3块盘,可用空间为 N-1 块盘

你要是没有复数的盘做冗余,或者单纯不想做冗余,你可以选择 Simple

POWERSHELL
 1PS C:\Windows\system32> New-StorageTier -StoragePoolFriendlyName "TieredStoragePool" -FriendlyName "SSDTier" `
 2-MediaType SSD -ResiliencySettingName Mirror
 3
 4FriendlyName TierClass MediaType ResiliencySettingName FaultDomainRedundancy Size FootprintOnPool StorageEfficiency
 5------------ --------- --------- --------------------- --------------------- ---- --------------- -----------------
 6SSDTier     Unknown   SSD       Mirror                1                     0 B             0 B               
 7
 8
 9PS C:\Windows\system32> New-StorageTier -StoragePoolFriendlyName "TieredStoragePool" -FriendlyName "HDDTier" `
10-MediaType HDD -ResiliencySettingName Parity
11
12FriendlyName TierClass MediaType ResiliencySettingName FaultDomainRedundancy Size FootprintOnPool StorageEfficiency
13------------ --------- --------- --------------------- --------------------- ---- --------------- -----------------
14HDDTier     Unknown   HDD       Parity                1                     0 B             0 B
点击展开查看更多

创建虚拟磁盘

你可以提前看一下最大有多少的容量,然后把 -StorageTierSizes 的值一步到位,例如

POWERSHELL
1PS C:\Windows\system32>
2(Get-StorageTierSupportedSize -FriendlyName SSDTier -ResiliencySettingName Mirror).TierSizeMax/1GB
3(Get-StorageTierSupportedSize -FriendlyName HDDTier -ResiliencySettingName Parity).TierSizeMax/1GB
4109.75
53724.5
点击展开查看更多

然后把 -StorageTierSizes 设为 100GB,3700GB,取个整数

POWERSHELL
1# 创建虚拟硬盘
2$SSD_Tier = Get-StorageTier -FriendlyName "SSDTier"
3$HDD_Tier = Get-StorageTier -FriendlyName "HDDTier"
4New-VirtualDisk -StoragePoolFriendlyName "TieredStoragePool" `
5                -FriendlyName "TieredDisk" `
6                -StorageTiers $SSD_Tier, $HDD_Tier `
7                -StorageTierSizes 10GB, 10GB
点击展开查看更多

在 “TieredStoragePool” 池里,创建名为 “TieredDisk” 的硬盘,以上面创建的两个层为参数,容量分配为 固态硬盘层 10GB,机械硬盘层 10GB

POWERSHELL
1PS C:\Windows\system32> # 创建虚拟硬盘
2$SSD_Tier = Get-StorageTier -FriendlyName "SSDTier"
3$HDD_Tier = Get-StorageTier -FriendlyName "HDDTier"
4New-VirtualDisk -StoragePoolFriendlyName "TieredStoragePool" -FriendlyName "TieredDisk" -StorageTiers $SSD_Tier, $HDD_Tier -StorageTierSizes 10GB, 10GB
5
6FriendlyName ResiliencySettingName FaultDomainRedundancy OperationalStatus HealthStatus  Size FootprintOnPool StorageEfficiency
7------------ --------------------- --------------------- ----------------- ------------  ---- --------------- -----------------
8TieredDisk                                               OK                Healthy      20 GB           39 GB            51.28%
点击展开查看更多

调整虚拟磁盘的大小

先看看现在有什么层

POWERSHELL
1PS C:\Windows\system32> Get-StorageTier | Sort-Object -Property "FriendlyName" -Descending 
2
3FriendlyName       TierClass   MediaType ResiliencySettingName FaultDomainRedundancy  Size FootprintOnPool StorageEfficiency
4------------       ---------   --------- --------------------- ---------------------  ---- --------------- -----------------
5TieredDisk-SSDTier Performance SSD       Mirror                1                     10 GB           20 GB            50.00%
6TieredDisk-HDDTier Capacity    HDD       Parity                1                     10 GB           15 GB            66.67%
7SSDTier            Unknown     SSD       Mirror                1                      0 B             0 B                   
8HDDTier            Unknown     HDD       Parity                1                      0 B             0 B
点击展开查看更多

再看看各个层还能用多大的空间,你也可以在创建虚拟磁盘之前就看,创建的时候容量一步到位

POWERSHELL
1PS C:\Windows\system32> 
2(Get-StorageTierSupportedSize -FriendlyName SSDTier -ResiliencySettingName Mirror).TierSizeMax/1GB
3(Get-StorageTierSupportedSize -FriendlyName HDDTier -ResiliencySettingName Parity).TierSizeMax/1GB
497.75
53714.5
点击展开查看更多

其实在创建的时候我就决定了,凑个整数。2块120GB固态做镜像,分100GB。3块2T机械做奇偶,分3700GB

POWERSHELL
1# 调整大小,只能往大了调整
2Resize-StorageTier -InputObject (Get-StorageTier -FriendlyName "TieredDisk-SSDTier") -Size 100GB
3Resize-StorageTier -InputObject (Get-StorageTier -FriendlyName "TieredDisk-HDDTier") -Size 3700GB
点击展开查看更多
POWERSHELL
1PS C:\Windows\system32> Get-StorageTier | Sort-Object -Property "FriendlyName" -Descending 
2
3FriendlyName       TierClass   MediaType ResiliencySettingName FaultDomainRedundancy    Size FootprintOnPool StorageEfficiency
4------------       ---------   --------- --------------------- ---------------------    ---- --------------- -----------------
5TieredDisk-SSDTier Performance SSD       Mirror                1                      100 GB          200 GB            50.00%
6TieredDisk-HDDTier Capacity    HDD       Parity                1                     3.61 TB         5.42 TB            66.67%
7SSDTier            Unknown     SSD       Mirror                1                        0 B             0 B                   
8HDDTier            Unknown     HDD       Parity                1                        0 B             0 B
点击展开查看更多

看看还剩下多少没用的空间

POWERSHELL
1PS C:\Windows\system32>
2(Get-StorageTierSupportedSize -FriendlyName SSDTier -ResiliencySettingName Mirror).TierSizeMax/1GB
3(Get-StorageTierSupportedSize -FriendlyName HDDTier -ResiliencySettingName Parity).TierSizeMax/1GB
47.75
524.5
点击展开查看更多

这点剩余空间也不在乎了,固态是普通的家用固态,手动留点空间做OP空间用好了。

(这点不同品牌不同主控的处理方法都不一样,不一定有用,而且整个盘添加进了存储池也不知道这做法还没有用,我真的就是凑个整数而已。

你也不用指望每一分空间都用完,要留一点,全用完创建的时候会失败报错的。)

创建分区

现在磁盘管理器那边已经能看一个 100GB + 3700GB的 3800GB 的硬盘了。

你可以在这里手动创建分区使用,或者继续用命令创建也行。

创建虚拟磁盘后的磁盘管理

初始化虚拟磁盘,GPT分区表

POWERSHELL
1Get-VirtualDisk -FriendlyName "TieredDisk" | Initialize-Disk -PartitionStyle GPT -PassThru
点击展开查看更多
POWERSHELL
1PS C:\Windows\system32> Get-VirtualDisk -FriendlyName "TieredDisk" | Initialize-Disk -PartitionStyle GPT -PassThru
2
3Number Friendly Name               Serial Number                    HealthStatus         OperationalStatus      Total Size Partition Style           
4------ -------------               -------------                    ------------         -----------------      ---------- ---------------
510     TieredDisk                  {d68baa51-2ce5-457e-8220-eabb... Healthy              Online                    3.71 TB RAW       
点击展开查看更多

虚拟硬盘进行分区,分配盘符为G,使用全部容量

POWERSHELL
1New-Partition -DiskNumber 10 -DriveLetter "G" -UseMaximumSize
点击展开查看更多
POWERSHELL
1PS C:\Windows\system32> New-Partition -DiskNumber 10 -DriveLetter "G" -UseMaximumSize
2
3   DiskPath:\\?\storage#disk#{d68baa51-2ce5-457e-8220-eabba84151ab}#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
4
5PartitionNumber  DriveLetter Offset                                                                         Size Type                       
6---------------  ----------- ------                                                                         ---- ----                       
72                G           16777216                                                                    3.71 TB Basic 
点击展开查看更多

格式化G盘,NTFS格式

POWERSHELL
1Format-Volume -DriveLetter 'G' -FileSystem NTFS
点击展开查看更多
POWERSHELL
1PS C:\Windows\system32> Format-Volume -DriveLetter 'G' -FileSystem NTFS
2
3DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining    Size
4----------- ------------ -------------- --------- ------------ ----------------- -------------    ----
5G                        NTFS           Fixed     Healthy      OK                      3.71 TB 3.71 TB
点击展开查看更多

热数据迁移

当你创建了分层存储之后,任务计划程序 里面就会自动启用 \Microsoft\Windows\Storage Tiers Management 下面的 Storage Tiers Optimization 任务

默认每4个小时迁移一次热数据到比较快的层,你可以改快一点。

这个任务的操作里面也能看到命令是 %windir%\system32\defrag.exe -c -h -g -# -m 8 -i 13500

可以手动运行此命令来触发迁移热数据,具体参数是什么意思自己查吧。

任务计划程序

参考

Windows 存储池 - ChasingDreams - 博客园 (cnblogs.com)

如何使用PowerShell创建虚拟磁盘» 豪尔赫·伯恩哈特 (jorgebernhardt.com)

分层存储空间写入慢速层 (Server2019) |服务家庭论坛 (servethehome.com)


原文作者:tjxwork
原文链接:https://www.tjxblog.com/blog/2023-0008
发布时间:2023-03-01

版权声明

作者: tjxwork

链接: https://tjxblog.com/blog/2023-0008/

许可证: CC BY-NC-SA 4.0

使用者可以对本创作进行转载、节选、混编、二次创作,但不得运用于商业目的,且使用时须进行署名,采用本创作的内容必须同样采用本协议进行授权。

评论

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键