本文只是记录一个探索的过程与结论,没有太多实际的参考价值。
针对这样的一个问题的探索记录,原始问题:
是否有某种技术方案,让操作系统读取机械硬盘上数据的时候将其缓存到SSD上,后续再次读取就自动使用SSD上缓存,如有写入,延时定期同步回机械硬盘。比如大型游戏这类读取游戏场景数据的这类应用。
先是询问gemini,回答质量一般般吧,好在免费用户配额比较多,得到三条路:
- 操作系统原生支持的方案,Windows 10+(含Server)的存储池(Storage Spaces)功能;Linux 平台:bcache / dm-cache.
- 硬件与主板芯片组方案,Intel Smart Response Technology (SRT).
- 第三方软件,Primocache.
据说Linux方案更成熟,但这里主要考虑的是Windows下,首选研究一个Storage Spaces,具体操作方法是一系列 PowerShell脚本,不怎么喜欢这货,于是得知有 win10-storage-spaces 的ps脚本,没有跑成功,还是算了但怎么跑都是错误。还是得啃一下 PS 脚本。
测试环境是Vmware虚拟机里测试, Windows 10 pro,增加了两块虚拟磁盘,分别放在 SSD与HD上,
首先使用的 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
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缓存加速的方案,而且尤其,参与的磁盘是被Windows“拿去”了,即,磁盘管理中不再列出相关磁盘,而是仅显示出一个虚拟盘出来。大概,如果故障,想做数据恢复将是难上加难。
对于原始问题,真正切中的方案是 PrimoCache 这个软件,也不贵,一台电脑 ¥200 永久授权。只是暂时还不是那么迫切的需要,这只是一个技术探索性。
后记。三款AI工具,在这个技术探索上表现差距明显,gemini 明显不行,出错极多,对脚本执行报错的针对性问题也相当一般,一错再错。说它是豆包也是有道理的。chatGPT稍微好一点,但对于报错的针对性debug也不太行。claude表现几乎无可挑剔,除了给的命令里写的容量稍稍微大了点,其他都是一次通过。PowerShell 加上个 Storage Spaces ,确实显得小众,但大概这也正是好的试金石吧。
Last Updated on 2026/07/06