关于探索HDD+SSD缓存技术方案的记录

本文只是记录一个探索的过程与简单结论,没有多少实际的参考价值。

问题及方案

源于这个问题:

是否有某种技术方案,让操作系统读取机械硬盘上数据的时候将其缓存到SSD上,后续再次读取就自动使用SSD上缓存,如有写入,延时定期同步回机械硬盘HDD。比如大型游戏中读取游戏场景数据的这类应用。

询问gemini,(它回答质量一般般吧,好在免费用户配额比较多),得到三条路:

  1. 操作系统原生支持的方案,Windows 10+(含Server)的存储空间(Storage Spaces)功能;Linux 平台:bcache / dm-cache.
  2. 硬件与主板芯片组方案,Intel Smart Response Technology (SRT).
  3. 第三方软件,Primocache.

并说Linux方案更成熟。但这里主要考虑的是Windows下,首选研究一个Storage Spaces,严格来说是Storage Tiers(存储分层),在Windows Server上有GUI配置界面,Pro/Home 版没有(控制面板 – 系统和安全 – 存储空间管理,没有存储分层功能),只能使用命令行实现。

Github 有 win10-storage-spaces 的PowerShell脚本,但没有跑成功,报错。于是退而啃 ps 命令。

Storage Spaces方案测试

测试环境使用 Vmware虚拟机, Windows 10 pro,增加了两块虚拟磁盘,20G/160G,分别放在宿主机的 SSD与HDD上。

首先使用的 gemini 提问相关操作步骤,照操作时报错比较多,于是转 chatGPT,表现好一些,但也报错,那就转 claude,这个免费配额极其苛刻的货,给的答案明显的好,下面大体上是其回答的核心步骤,除了容量那一步默认给的有点大,缩小了一下,其他都一次通过。不得不说,这货确实强悍。

# 0. 准备环境,磁盘清单
PS C:\Windows\system32> Get-PhysicalDisk

Number FriendlyName SerialNumber MediaType CanPool OperationalStatus HealthStatus Usage
------ ------------ ------------ --------- ------- ----------------- ------------ -----
2 VMware Virtual NVMe Disk VMWare NVME_0000 SSD True OK Healthy Auto-Select
1 VMware Virtual SATA Hard Drive 01000000000000000001 HDD False OK Healthy Auto-Select
3 VMware Virtual NVMe Disk VMWare NVME_0000 SSD False OK Healthy Auto-Select
0 VMware, VMware Virtual S SSD False OK Healthy Auto-Select


#1. 设置确认磁盘介质类型正确,HDD 或 SSD;其中 HDD 没有自动识别(上节脚本3号磁盘 MediaType 一列原本是 Unspecified),要手工设置
Get-PhysicalDisk | Where-Object DeviceId -eq 1 | Set-PhysicalDisk -MediaType HDD


# 2. 创建存储池,把两块盘加入池
$subsystem = Get-StorageSubSystem -FriendlyName "Windows Storage*"
$pd = Get-PhysicalDisk | Where-Object { $_.DeviceId -in 1,3 }

New-StoragePool -FriendlyName "TieredPool" `
-StorageSubSystemUniqueId $subsystem.UniqueId `
-PhysicalDisks $pd


# 3. 在池内创建两个存储层(SSD 层 + HDD 层)
$tierSSD = New-StorageTier -StoragePoolFriendlyName "TieredPool" -FriendlyName "SSDTier" -MediaType SSD
$tierHDD = New-StorageTier -StoragePoolFriendlyName "TieredPool" -FriendlyName "HDDTier" -MediaType HDD


# 4. 创建分层虚拟磁盘,容量要比实际磁盘小,否则报容量的错
New-VirtualDisk -StoragePoolFriendlyName "TieredPool" `
-FriendlyName "TieredDisk" `
-StorageTiers $tierSSD,$tierHDD `
-StorageTierSizes 15GB,130GB `
-ResiliencySettingName Simple `
-ProvisioningType Fixed


# 5. 初始化磁盘、分区、格式化
Get-VirtualDisk -FriendlyName "TieredDisk" |
Get-Disk |
Initialize-Disk -PartitionStyle GPT -PassThru |
New-Partition -AssignDriveLetter -UseMaximumSize |
Format-Volume -FileSystem NTFS -NewFileSystemLabel "TieredVolume" -Confirm:$false


# 6. 关键点:Windows 10 客户端上"热数据迁移"是手动触发的,这里盘符只要字母不要加冒号
Optimize-Volume -DriveLetter <盘符> -TierOptimize

可以自己用"任务计划程序"建一个每天/每小时执行 Optimize-Volume -TierOptimize 的计划任务,模拟 Server 版的自动分层行为。

验证
Get-StoragePool -FriendlyName "TieredPool" | Get-VirtualDisk | Get-StorageTier
Get-VirtualDisk -FriendlyName "TieredDisk" | Select FriendlyName, Size, ResiliencySettingName, ProvisioningType

实际测试按此操作成功。

补充说明

Claude还在回答中追加提醒说:

这里有个容易被忽略的差异:Windows Server 上有计划任务会自动定期把热数据从 HDD 层搬到 SSD 层,但 Windows 10 客户端没有这个自动计划任务,分层机制本身存在,但需要你手动(或自建计划任务)触发数据优化。

具体来说,(如果数据在 HDD 上,并且在短期里(比如1小时内)多次读取,是否会自动被 SSD 缓存?)Windows 10 客户端上”热数据迁移”是手动触发的不会自动实时迁移,Storage Spaces 分层机制和真正的”SSD 缓存”有着本质区别,实时统计与定期迁移,它们是分离的两步。

该方案结论

结论就是,这个方案其实并不是想象中那种SSD缓存加速的方案,而且尤其,参与的磁盘是被Storage Spaces直接接管了,即,磁盘管理中不再列出相关磁盘,而是仅显示出一个虚拟盘出来。万一磁盘故障,想做数据恢复将是难上加难。

Storage Spaces 是类似于 Linux 上LVM 的技术,微软用它来更新掉2000年的动态磁盘(Dynamic Disks,包括跨区卷、带区卷等)技术。

Storage Tiers(存储分层)是Storage Spaces 中的一个特性,算是被包含关系。热数据在HDD+SSD 两者间的计划迁移,就靠存储分层得以实现。

总结

对于原始问题,真正切中的方案是 PrimoCache 这个软件,也不贵,一台电脑 ¥200 永久授权。只是,这并不是迫切的需要,仅仅是个技术探索罢了。

前面还有 Intel Smart Response Technology (SRT) 这条路线,根本没提,因为它已经死掉了!

SSD价格本来已经降到白菜价,甚至很多电脑根本不装HDD了,所以这种加速技术本身也没了意义。

后记

后记。三款AI工具,在这个技术探索上表现差距明显,gemini 明显不行,出错极多,拿脚本执行报错信息提问给他回答也相当一般,甚至一错再错。说它是豆包也不为错。chatGPT稍微好一点,但对于报错消息debug也不太行。claude表现几乎无可挑剔,除了给的命令里写的容量稍稍微大了点,其他都是一次通过。PowerShell 加上个 Storage Spaces ,确实显得小众,但大概这也正是好用作试金石吧。

Last Updated on 2026/07/07

发表评论

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理