技术要点

Write-Back Cache 默认仅在 Windows Server 可用,通过 PowerShell 成功绕开限制。 傲腾 NVMe SSD 作为 Journal 缓存层 提供高效的 4K 写缓存。 结合 Mirror 存储池 提供高可靠性与 I/O 加速。 Windows 专业版本身并未公开文档支持该特性,属于隐藏玩法

亮点

  1. 绕过系统限制,在桌面版本启用服务器级功能。
  2. 高性能 NVMe 傲腾缓存 提供卓越的小文件 I/O 加速。
  3. Write-Back Cache 设置实战调优(1GB → 32GB)。
  4. 对比 CrystalDiskMarkdiskinfo 的性能变化。

概述

在 Windows 10 专业版上,默认情况下并不会像 Windows Server 那样开放完整的存储池(Storage Spaces)高级功能,例如手动设置 NVMe 设备为 Journal 以启用 Write-Back Cache。但通过合理的操作方式,我们仍然可以绕过 GUI 限制,让 Windows 10 专业版实现 Server 级别的存储优化!

本文将介绍如何在 Windows 10 专业版启用 Write-Back Cache,并分析为什么即使 Usage 仍然显示 Auto-Select,但加速仍然生效。

备注: 硬件平台: X299 R6E,7920X,64GB

平台 Microsoft Windows [版本 10.0.19045.5487]

> systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"

OS 名称:          Microsoft Windows 10 IoT 企业版 LTSC
OS 版本:          10.0.19045 暂缺 Build 19045

磁盘: P8118ZU22151 鹏钛U2固态,1.92TB INTEL SSDPF2KX019XZ Intel固态 1.92TB NVMe SSDPE21K375GAL 傲腾4800X,375GB

实验背景与问题分析

在 Windows Server 版本中,我们通常需要使用以下命令手动将 NVMe 设备设为 Journal 以启用 Write-Back Cache:

Set-PhysicalDisk -FriendlyName "NVMe SSDPE21K375GAL" -Usage Journal

但在 Windows 10 专业版中:

Get-PhysicalDisk 结果仍然显示 Auto-Select,即使 Set-PhysicalDisk -Usage Journal 可能可执行,但并不会显示明确的变化。

然而,通过DiskMark/IO 分析,Write-Back Cache 仍然生效!

这表明 Windows 10 可能会自动识别 NVMe 设备为 Write-Back Cache,即使 Usage 仍然显示 Auto-Select。

完整配置流程

  1. 创建存储池(Storage Pool)

首先,创建一个包含两块 SSD 的存储池。

$disk1 = Get-PhysicalDisk -FriendlyName "P8118ZU22151"  
$disk2 = Get-PhysicalDisk -FriendlyName "INTEL SSDPF2KX019XZ"
New-StoragePool -FriendlyName "MirrorStoragePool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks $disk1, $disk2
  1. 先创建 Volume(New-Volume) 在 Windows 10 专业版下,必须先执行 New-Volume,再执行 New-VirtualDisk,否则 Write-Back Cache 可能不会生效。(经测试多次,本文记述稳定触发的方案)
New-Volume -StoragePoolFriendlyName "MirrorStoragePool" -FriendlyName "MirrorVolume" -FileSystem "NTFS" -Size 1.7TB
  1. 创建虚拟磁盘(New-VirtualDisk) 然后,我们创建 New-VirtualDisk,同时手动指定 WriteCacheSize。 (如果不指定 WriteCacheSize,默认值为 1GB。) (经过测试,该场景下最大可以设置为40gb,更高的未成功<使用添加journal 和不添加 均未成功>)
New-VirtualDisk -StoragePoolFriendlyName "MirrorStoragePool" -FriendlyName "MirrorVirtualDisk" -Size 1.7TB -ResiliencySettingName "Mirror" -ProvisioningType "Thin" -WriteCacheSize 32GB
#-WriteCacheSize 32GB 可以不加 默认1G
  1. 加入傲腾 NVMe 设备

将 NVMe 设备添加到存储池。

$ssd = Get-PhysicalDisk -FriendlyName "NVMe SSDPE21K375GAL"
Add-PhysicalDisk -StoragePoolFriendlyName "MirrorStoragePool" -PhysicalDisks $ssd

(可选):

#Set-PhysicalDisk -FriendlyName "NVMe SSDPE21K375GAL" -Usage Journal
  1. 检查 Write-Back 设备

此时,可以使用以下命令查看存储池中的物理磁盘状态:

Get-StoragePool -FriendlyName "MirrorStoragePool" | Get-PhysicalDisk | Select FriendlyName, MediaType, Usage

在 Windows 10 专业版中,即使 Usage 显示 Auto-Select,Write-Back Cache 仍然可能已经启用。(可通过diskinfo等进行数据观测)

  1. 通过 Windows 计算机管理初始化 VirtualDisk

此时,必须手动使用 Windows 计算机管理,将 MirrorVirtualDisk 初始化为 GPT,并格式化为 D 盘,否则可能会影响 Write-Back Cache 的生效。(尝试过代码初始化方案,win10专业版中,该触发 通过GUI执行,可以稳定触发)

  • 此时,可以开启 CrystalDiskMark8 软件 与任务管理器 测试4K 效果 测试文件大小可设置1G~32G 进行多次观测,并配合 CrystalDiskInfo 观测缓存盘的读取和写入数据的增长量

file

(提供命令行操作法,供测试,实际该项目经测试,使用GUI稳定触发,使用命令行无效果)

# #不要执行
#初始化磁盘并转换为 GPT
#Get-VirtualDisk -FriendlyName "MirrorVirtualDisk" | Get-Disk | Initialize-Disk -PartitionStyle GPT
#创建主分区
#Get-VirtualDisk -FriendlyName "MirrorVirtualDisk" | Get-Disk | New-Partition -AssignDriveLetter -UseMaximumSize
#or
#Get-VirtualDisk -FriendlyName "MirrorVirtualDisk" | Get-Disk | New-Partition -DriveLetter D -UseMaximumSize
#格式化分区
#Format-Volume -DriveLetter D -FileSystem NTFS -NewFileSystemLabel "MirrorVolume" -Confirm:$false
#Get-Volume
##############
  • 确认4k效果满足预期后,可以移除New-Volume
  1. 移除 New-Volume,保留 New-VirtualDisk 此时,存储池已经完成了 Write-Back Cache 设定,并且 MirrorVirtualDisk 仍然生效。
Remove-VirtualDisk -FriendlyName "MirrorVolume" -Confirm:$false

实验结果分析

  1. 观察 WriteCacheSize 可以使用以下命令确认 WriteCacheSize 是否生效:
Get-VirtualDisk -FriendlyName "MirrorVirtualDisk" | Select FriendlyName, WriteCacheSize

如果 WriteCacheSize 显示 32GB(或你设定的值),说明 Write-Back Cache 已经生效。

  1. Usage 仍然显示 Auto-Select,但加速生效 运行以下命令:
Get-StoragePool -FriendlyName "MirrorStoragePool" | Get-PhysicalDisk | Select FriendlyName, Usage

发现 NVMe 设备的 Usage 仍然显示 Auto-Select,但 IO 性能测试结果表明 Write-Back Cache 仍然有效。

  1. DiskMark 性能测试结果对比 在 DiskMark 测试中,我们发现:
  • 启用 Write-Back Cache 后,小文件写入性能显著提升。

  • 4K 随机写入(Queue Depth 1)性能有明显加速。

这说明 即使 Windows 10 专业版的 Usage 字段不显示 Journal,但 Write-Back 仍然在后台自动生效!

结论

Windows 10 可能不会显示 "Journal",但实际 Write-Back 可能仍然生效。

即使 Usage 仍然是 Auto-Select,也可以通过 WriteCacheSize + DiskMark 确认 Write-Back 真的工作了。

手动 Set-PhysicalDisk -Usage Journal 在 Windows 10 可能不是必须的,Windows 10 可能已经在默认策略下自动启用了 Write-Back。

实验表明:必须 New-Volume + New-VirtualDisk,否则 Write-Back Cache 可能不会彻底生效。 测试完成后,需要移除New-Volume, 之后正常使用New-VirtualDisk 格式化完成后的磁盘.

总结:如何在 Windows 10 专业版启用 Write-Back Cache?

创建存储池 → 先 New-Volume → 再 New-VirtualDisk → 加入傲腾 NVMe → Windows 计算机管理初始化,测试效果 → 移除 New-Volume,保留 New-VirtualDisk → 复测效果

你已经在 Windows 10 专业版上成功绕开 GUI 限制,启用了 Server 级别的 Write-Back Cache!🚀🎉

核心记录

本文经gpt添加描述和润色,现附完成过程代码1份,和测试思考过程代码一份

  1. 完整过程

$disk1 = Get-PhysicalDisk -FriendlyName "P8118ZU22151"  
$disk2 = Get-PhysicalDisk -FriendlyName "INTEL SSDPF2KX019XZ"

New-StoragePool -FriendlyName "MirrorStoragePool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks $disk1, $disk2

New-Volume -StoragePoolFriendlyName "MirrorStoragePool" -FriendlyName "MirrorVolume" -FileSystem "NTFS" -Size 1.7TB

New-VirtualDisk -StoragePoolFriendlyName "MirrorStoragePool" -FriendlyName "MirrorVirtualDisk" -Size 1.74TB -ResiliencySettingName "Mirror" -ProvisioningType "Thin"


$ssd = Get-PhysicalDisk -FriendlyName "NVMe SSDPE21K375GAL"

Add-PhysicalDisk -StoragePoolFriendlyName "MirrorStoragePool" -PhysicalDisks $ssd 

##将MirrorVolume 设置gpt 并格式化 
现在开启Windows计算机管理,并将 "MirrorVirtualDisk" 初始化为gpt并 格式化为D盘

PS C:\Windows\system32> Get-Disk
PS C:\Windows\system32> Remove-VirtualDisk -FriendlyName "MirrorVolume" -Confirm:$false
-----------------------------



  1. 测试相关

$disk1 = Get-PhysicalDisk -FriendlyName "P8118ZU22151"  
$disk2 = Get-PhysicalDisk -FriendlyName "INTEL SSDPF2KX019XZ"
New-StoragePool -FriendlyName "MirrorStoragePool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks $disk1, $disk2


# 此处 New-VirtualDisk 先后顺序不影响结果,【New-Volume】不支持WriteCacheSize。
New-Volume -StoragePoolFriendlyName "MirrorStoragePool" -FriendlyName "MirrorVolume" -FileSystem "NTFS" -Size 1.7TB 


New-VirtualDisk -StoragePoolFriendlyName "MirrorStoragePool" -FriendlyName "MirrorVirtualDisk" -Size 1.7TB -ResiliencySettingName "Mirror" -ProvisioningType "Thin"  -WriteCacheSize 32GB

#-WriteCacheSize 32GB 可以不加 默认1G

 

加入傲腾  
$ssd = Get-PhysicalDisk -FriendlyName "NVMe SSDPE21K375GAL"
Add-PhysicalDisk -StoragePoolFriendlyName "MirrorStoragePool" -PhysicalDisks $ssd 



#设置 Journal,经过diskmark和diskinfo观测, win10 不设置不影响测试结果
#Set-PhysicalDisk -FriendlyName "NVMe SSDPE21K375GAL" -Usage Journal

##你可以运行以下 PowerShell 命令,看看当前存储池的 Write-Back 设备:
##如果 Usage 里有 Journal,说明有 Write-Back 设备,可以支持较大的 WriteCacheSize。
##Get-StoragePool -FriendlyName "MirrorStoragePool" | Get-PhysicalDisk | Select FriendlyName, MediaType, Size, Usage

# #不要执行
#初始化磁盘并转换为 GPT
#Get-VirtualDisk -FriendlyName "MirrorVirtualDisk" | Get-Disk | Initialize-Disk -PartitionStyle GPT
#创建主分区
#Get-VirtualDisk -FriendlyName "MirrorVirtualDisk" | Get-Disk | New-Partition -AssignDriveLetter -UseMaximumSize
#or
#Get-VirtualDisk -FriendlyName "MirrorVirtualDisk" | Get-Disk | New-Partition -DriveLetter D -UseMaximumSize
#格式化分区
#Format-Volume -DriveLetter D -FileSystem NTFS -NewFileSystemLabel "MirrorVolume" -Confirm:$false
#Get-Volume
##############





现在开启Windows计算机管理,并将 "MirrorVirtualDisk" 初始化为gpt并 格式化为D盘
# 此处须先 完成格式化操作,测试验证4k满足预期,后续 再 Remove-VirtualDisk  


PS C:\Windows\system32> Get-Disk
PS C:\Windows\system32> Remove-VirtualDisk -FriendlyName "MirrorVolume" -Confirm:$false

-----------------------------

Remove-VirtualDisk -FriendlyName "MirrorVolume" -Confirm:$false
Remove-VirtualDisk -FriendlyName "MirrorVirtualDisk" -Confirm:$false
Remove-StoragePool -FriendlyName "MirrorStoragePool"

#Get-StoragePool -FriendlyName "MirrorStoragePool" | Get-PhysicalDisk | Select FriendlyName, MediaType, Size, Usage