ReFSUtil (Resilient File System Utility)专门用于 ReFS 分区的修复、元数据检查、空间分析、完整性流管理、快照清理、损坏块扫描修复。ReFS 专属专用工具,自 Windows Server 2012(ReFS 正式发布)才新增,仅针对 ReFS 特有容错、完整性、块分配机制操作。
refsutil.exe(ReFSUtil salvage)完整解构
工具路径:
%SystemRoot%\System32\refsutil.exe,Windows 内置 ReFS 文件系统灾难打捞工具,不是修复工具,只做数据提取导出,主要针对 RAW 状态、元数据损坏无法挂载的 ReFS 卷。 拆解维度:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化流水线
一、底层原理
1. 定位
refsutil salvage 工作模式分为扫描阶段、复制阶段两大核心阶段,支持自动模式(扫描 + 复制连续执行)、手动模式(两阶段独立执行,支持断点续扫)Microsoft ...。
重要:工具不对源卷做原地修复,只读读取源损坏卷,把可识别文件拷贝到目标卷;源卷损坏元数据不会被修改Microsoft ...。
2. 核心底层机制
- 通过 FSCTL 设备控制码与内核驱动
refs.sys通信;绕过正常文件系统挂载流程,直接读取卷底层磁盘块。 - 扫描阶段
-QS快速扫描:假设卷关键元数据(超级块、根 B + 树)尚存,只扫描关键区域,速度快,不会遍历全部磁盘块。-FS完整扫描:逐块遍历整个卷,识别 ReFS 元数据魔数、B + 树节点、文件记录;内存重建虚拟目录树;输出清单文件foundfiles.<volume signature>.txt保存识别到的文件列表;工作目录保存断点状态,中断后可以续扫Microsoft ...。-m参数:包含已删除文件,扫描耗时极大,存在大量无效过时条目风险。
- 复制阶段:读取
foundfiles.*.txt清单,从源卷读取对应文件数据流、属性、时间戳,写入目标健康卷;跳过损坏无法读取的数据块。 -D诊断阶段:独立执行,检测卷是否为合法 ReFS 卷、判断挂载失败的根因。-x强制卸载卷:下发内核指令断开全部打开句柄,保证可以原始读取卷块。
3. 关键产物(工作目录)
| 文件 | 作用 |
|---|---|
foundfiles.<volume signature>.txt |
扫描输出,可恢复文件清单,复制阶段依赖此文件 |
| 断点状态文件 | 保存扫描偏移,实现‑FS / ‑QS中断后继续扫描 |
| 详细日志文本 | 记录扫描统计、损坏块、识别文件计数 |
对象模型:源损坏 ReFS 卷 (只读读取) → 工作目录 (存放清单 / 断点) → 目标目录 (最终导出数据) 硬性约束:工作目录、目标目录绝对不能放在源损坏卷上面Microsoft ...。
4. 模式总览
| 模式参数 | 行为 |
|---|---|
‑QA快速自动 |
快速扫描→直接复制输出 |
‑FA完全自动 |
完整全卷扫描→直接复制输出 |
‑D诊断 |
仅检测卷状态,不扫描文件 |
‑QS快速扫描 |
仅生成 foundfiles 清单,不复制 |
‑FS完整扫描 |
全磁盘扫描生成清单,不复制 |
‑C复制 |
依据已有的 foundfiles 清单拷贝文件 |
‑SL清单复制 |
使用用户自定义筛选后的文件列表拷贝 |
‑IC交互式控制台 |
高级交互浏览虚拟目录,选择性导出 |
二、依赖文件
| 文件路径 | 职责 |
|---|---|
%SystemRoot%\System32\refsutil.exe |
用户态主程序,参数解析、扫描调度、复制逻辑 |
%SystemRoot%\System32\drivers\refs.sys |
ReFS 内核驱动;提供 FSCTL 控制码,底层块读取、元数据解析 |
kernel32.dll / advapi32.dll |
卷设备打开、文件 IO、权限处理 |
ntdll.dll |
底层设备 IO、大文件支持 |
注意:chkdsk.exe 不修复 ReFS,chkdsk 仅做只读预检,ReFS 修复 / 打捞全部依靠 refsutil博客园。
三、依赖关系
1. 权限依赖
必须管理员提升权限;需要打开卷原始设备句柄,普通用户拒绝访问。
2. 内核依赖
refs.sys驱动必须正常加载;refs.sys 版本要匹配 ReFS 卷版本;新版本 ReFS (3.14) 需要对应新版本 refsutil,旧系统 refsutil 无法识别高版本 ReFS 卷元数据GitHub Gis...。
3. 存储路径依赖
- 源卷:损坏 ReFS 卷,可以驱动器号如
R:,也可以卷设备路径;可以 RAW 状态。 - 工作目录:独立健康卷,不能在源卷,存放断点、清单、日志。
- 目标目录:独立健康卷,不能在源卷,接收恢复出来的文件。
- 目标卷文件系统支持:NTFS / ReFS 均可接收恢复数据。
4. 生效与中断恢复
- 扫描阶段中途终止(Ctrl‑C),工作目录保存断点,再次执行相同‑QS /‑FS 即可续扫,不需要从头扫描。
- 扫描和复制完全解耦;可以先扫描,后期再执行复制;也可以编辑
foundfiles.*.txt删除不需要恢复的条目,再用‑SL选择性恢复。
5. 事件日志
Microsoft‑Windows‑ReFS/Operational,记录 refsutil 下发 FSCTL 操作、块读取错误、元数据解析异常。
四、逻辑链路 Mermaid
sequenceDiagram
participant Admin[管理员 CMD/PowerShell]
participant RefsUtil[refsutil.exe]
participant RefsSys[refs.sys 内核驱动]
participant SourceVol[损坏ReFS源卷(RAW/不可挂载)]
participant WorkDir[工作目录(独立磁盘)]
participant TargetDir[目标恢复目录(独立磁盘)]
Note over Admin,TargetDir: 示例 refsutil salvage -FS R: D:\Work
Admin->>RefsUtil: refsutil salvage [-QA/-FA/-QS/-FS/-D] 源卷 工作目录 [目标]
alt -x 参数启用强制卸载
RefsUtil->>RefsSys: FSCTL强制卸载源卷,销毁全部打开句柄
end
alt -D诊断阶段
RefsUtil->>RefsSys: 读取卷超级块元数据
RefsSys-->>RefsUtil: 返回卷版本、挂载失败原因
RefsUtil->>WorkDir: 输出诊断日志,流程结束
else 扫描阶段(-QS / -FS)
RefsUtil->>RefsSys: 通过FSCTL原始读取磁盘块,遍历ReFS元数据
RefsSys->>SourceVol: 只读读取底层扇区/簇
RefsUtil->>RefsUtil: 内存重建虚拟目录树,识别文件元数据
RefsUtil->>WorkDir: 写入foundfiles.<sig>.txt + 扫描断点状态
Note over RefsUtil,WorkDir: Ctrl‑C中断;再次运行相同命令会读取断点继续扫描
end
alt 复制阶段(-C /‑QA /‑FA /‑SL)
RefsUtil->>WorkDir: 读取foundfiles清单 / 用户自定义清单
loop 遍历清单每一条文件记录
RefsUtil->>RefsSys: 读取源卷文件数据流
RefsSys->>SourceVol: 读取数据块;遇到损坏块返回读取失败
RefsUtil->>TargetDir: 将完好文件写入目标目录;跳过损坏条目记录日志
end
end
RefsUtil-->>Admin: 输出统计(识别文件数、成功恢复数、失败数)
五、配套链
1. 命令参考
::快速自动:扫描+复制
refsutil salvage -QA R: N:\WORK N:\DATA -x -v
::完全自动:全卷深度扫描+复制
refsutil salvage -FA R: N:\WORK N:\DATA -x -v
::仅诊断
refsutil salvage -D R: N:\WORK -v
::仅完整扫描生成清单,不复制
refsutil salvage -FS R: N:\WORK -x -v
::仅复制(使用已生成foundfiles清单)
refsutil salvage -C R: N:\WORK N:\DATA -x -v
::自定义筛选清单恢复
refsutil salvage -SL R: N:\WORK N:\DATA myfilterlist.txt -x
::交互式浏览虚拟目录选择性导出
refsutil salvage -IC R: N:\WORK -x
2. 配套运维工具
Get‑VolumePowerShell:获取卷签名、驱动器号;- 文本处理 PowerShell:
Select‑String筛选foundfiles.*.txt清单,过滤后缀、路径,生成自定义恢复列表; - 事件查看器:
Microsoft‑Windows‑ReFS/Operational排查块读取、元数据解析报错; - 注意:chkdsk 不修复 ReFS 损坏元数据。
3. 运维场景
- ReFS 元数据损坏,磁盘管理显示 RAW,事件 ID133;
- ReFS 卷可以挂载但大量目录损坏;
- 灾难恢复:先扫描生成清单,人工筛选后选择性导出关键业务文件;
- 长时间全卷扫描,支持分段执行(断点续扫)。
六、边界(坑点约束红线)
- ❗ refsutil salvage 是数据提取工具,不是修复工具,不会修复源卷;恢复完成源损坏卷建议直接格式化后再使用Microsoft ...。
- ❗ 工作目录、目标目录严禁放在待恢复的源损坏卷上,会直接失败。
- ❗
-m参数恢复已删除文件:耗时极长,会出现大量过期、无效、碎片文件,生产谨慎使用。 - ❗ 不同版本 ReFS 卷(3.2 /3.3 /3.14)需要匹配对应版本 refsutil;旧操作系统 refsutil 无法解析新版 ReFS 元数据GitHub Gis...。
- ❗ 扫描阶段虽然可以断点续扫,但不要删除工作目录下断点与 foundfiles 文件,否则必须重新全量扫描。
- ❗ 复制阶段只复制可以读取完好块;文件内部部分簇损坏,输出部分残缺文件,需要业务侧校验(如 VHDX 虚拟机镜像校验)Microsoft ...。
- ❗ 源卷只读逻辑:使用
‑x强制卸载会关闭所有进程打开句柄;业务运行卷不要随便使用‑x 参数。 - ❗ 不能用于 NTFS;只支持 ReFS 文件系统。
- ❗ 交互式控制台
‑IC有自己独立命令集,不支持普通 cmd/cd 等外部命令。
七、自动化流水线(可直接投产 PowerShell)
流水线功能:参数校验、诊断、执行完整扫描、生成清单、可选复制恢复、日志导出、统计恢复结果。
<#
refsutil salvage ReFS灾难恢复流水线
#Requires‑RunAsAdministrator
#>
$reportFile = ".\refsutil_salvage_report_$(Get‑Date -Format yyyyMMdd_HHmmss).log"
# ==========配置区,按需修改==========
$sourceVol = "R:" #待恢复源卷
$workDir = "D:\ReFS_Work" #工作目录,不可位于源卷
$targetDir = "D:\ReFS_Recover" #恢复输出目录,不可位于源卷
$doFullScan = $true #true=-FS完整扫描 false=-QS快速扫描
$afterScanCopy = $false #扫描完成后是否自动执行复制阶段
$forceDismount = $true #是否启用-x强制卸载源卷
$verbose = $true
#====================================
function Write‑Report {
param($msg)
$line = "[$(Get‑Date‑Format HH:mm:ss)] $msg"
Write‑Host $line
$line | Out‑File $reportFile ‑Append
}
Write‑Report "==== refsutil salvage ReFS灾难恢复流水线 ===="
Write‑Report ("源卷:$sourceVol 工作目录:$workDir 目标目录:$targetDir")
#目录检查
if($sourceVol.Trim() -eq $workDir.Trim() -or $sourceVol.Trim() -eq $targetDir.Trim()){
Write‑Report "❌错误:工作目录/目标目录不能与源卷相同!终止!"
exit 1
}
if(-not(Test‑Path $workDir)){ New‑Item -ItemType Directory -Path $workDir -Force | Out‑Null }
if(-not(Test‑Path $targetDir)){ New‑Item -ItemType Directory -Path $targetDir -Force | Out‑Null }
#阶段1:诊断源卷
Write‑Report "`n[1]执行源卷诊断 refsutil salvage -D"
$argDiag = @("salvage","‑D",$sourceVol,$workDir)
& refsutil.exe $argDiag | Out‑File $reportFile ‑Append
Write‑Report ("诊断执行完毕,返回码 $LASTEXITCODE")
if($LASTEXITCODE -ne 0){
Write‑Report "⚠️诊断发现卷异常,继续尝试扫描"
}
#阶段2:扫描阶段
Write‑Report "`n[2]执行扫描阶段"
$scanOpt = if($doFullScan){"‑FS"}else{"‑QS"}
$scanArg = @("salvage",$scanOpt,$sourceVol,$workDir)
if($forceDismount){$scanArg += "‑x"}
if($verbose){$scanArg += "‑v"}
& refsutil.exe $scanArg | Out‑File $reportFile ‑Append
Write‑Report ("扫描阶段返回码 $LASTEXITCODE")
#阶段3:可选复制阶段
if($afterScanCopy){
Write‑Report "`n[3]执行复制阶段,导出文件到目标目录"
$copyArg = @("salvage","‑C",$sourceVol,$workDir,$targetDir)
if($forceDismount){$copyArg += "‑x"}
if($verbose){$copyArg += "‑v"}
& refsutil.exe $copyArg | Out‑File $reportFile ‑Append
Write‑Report ("复制阶段返回码 $LASTEXITCODE")
}
#导出ReFS事件日志
Write‑Report "`n[4]导出Microsoft‑Windows‑ReFS事件日志(150条)"
Get‑WinEvent -LogName Microsoft‑Windows‑ReFS/Operational -MaxEvents 150 -ErrorAction SilentlyContinue |
Select‑Object TimeCreated,Id,Message | Format‑List | Out‑File $reportFile ‑Append
Write‑Report "`n✅流水线执行完成,报告:$reportFile"
Write‑Report "⚠️重要提示:refsutil仅提取数据,不会修复源卷;恢复后务必校验业务文件完整性。"
Write‑Report ("foundfiles清单位于 $workDir,请核对文件列表")
fsutil.exe 完整解构
工具路径:
%SystemRoot%\System32\fsutil.exe,Windows 内置文件系统用户态管理外壳工具,面向 NTFS/ReFS 高级元数据操作,FAT/exFAT 仅部分子集可用,绝大多数操作必须管理员权限Microsoft ...。 拆解维度:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化流水线
一、底层原理
1. 定位
fsutil.exe本身不实现任何文件系统内核逻辑,只是命令行解析外壳。 工作模式:解析子命令参数 → 通过ntdll.dll原生系统调用下发FSCTL 文件系统控制码 → 内核文件系统驱动 (ntfs.sys/refs.sys) 完成元数据读写、查询、设置 → 返回结果,fsutil 格式化输出文本到控制台博客园。
关键概念
- FSCTL:File‑System Control,文件系统控制码,用户态下发给内核的特殊 I/O 控制指令,实现普通 Win32 API 做不到的底层卷 / 文件元数据操作Microsoft ...。
- 子命令分组:8dot3name /devdrv/dirty /file/fsinfo /hardlink/objectid /quota/repair /reparsepoint/sparse /usn/volume /wim/clfs /resource/transaction /tiering。
2. 典型对象操作分类
| 分类 | 说明 |
|---|---|
| 卷级操作 | 脏位 dirty、卷信息 fsinfo、卸载卷 volume、NTFS 自愈 repair、8.3 短名全局行为 |
| 文件级操作 | 稀疏 sparse、硬链接 hardlink、文件 ID、有效数据长度 setvaliddata、创建空洞文件 createnew |
| 元数据日志 | USN 变更日志、对象 ID ObjectId、重解析点 reparsepoint |
| 配额与事务 | NTFS 磁盘配额 quota;TxF 事务 resource/transaction(Win10 1709 后内核废弃) |
注册表控制点
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem存储 NTFS 全局行为配置:NtfsDisable8dot3NameCreation、NtfsDisableLastAccessUpdate等;fsutil behavior读写此注册表;部分配置修改后需要重启内核生效博客园。- 卷级配置存储于 NTFS 卷内部元文件
$Volume,不在 Windows 注册表。
二、依赖文件
| 文件路径 | 职责 |
|---|---|
%SystemRoot%\System32\fsutil.exe |
主程序,解析子命令,格式化输出 |
%SystemRoot%\ntdll.dll |
导出 NtFsControlFile、NtQueryInformationFile 原生系统调用,下发 FSCTL 控制码博客园 |
%SystemRoot%\kernel32.dll |
Win32 文件 / 卷句柄打开关闭封装 |
%SystemRoot%\advapi32.dll |
读取 FileSystem 注册表项,权限检查 |
%SystemRoot%\System32\drivers\ntfs.sys |
NTFS 内核驱动,真正执行绝大多数 fsutil 操作 |
%SystemRoot%\System32\drivers\refs.sys |
ReFS 驱动,仅支持 fsutil 部分子命令子集 |
%SystemRoot%\System32\drivers\clfs.sys |
通用日志文件系统,clfs、resource 事务子命令依赖 |
三、依赖关系
1. 权限依赖
- 绝大多数修改操作:必须管理员提升权限,需要 SeManageVolumePrivilege 卷管理特权;普通用户只能执行少数只读查询。
- 部分高危卷操作(dismount、设置脏位、修改 USN 日志)要求最高特权。
2. 模块调用链
CMD/PowerShell(fsutil.exe)
↓
ntdll.dll(NtFsControlFile) 下发FSCTL控制码
↓IRP
ntfs.sys / refs.sys(内核完成元数据处理)
↓结果回传
ntdll.dll → fsutil.exe 格式化输出
3. 文件系统能力依赖
- NTFS:完整支持绝大多数子命令:sparse、hardlink、objectid、quota、usn、reparsepoint、repair、8dot3name。
- ReFS:仅部分子集:fsinfo、sparse、volume、devdrv、tiering;不支持配额、ObjectId、TxF 事务、硬链接限制。
- FAT32/exFAT:极少子命令可用;无 USN、配额、对象 ID、稀疏完整支持博客园。
4. 生效依赖
- 卷内部元数据修改(脏位、USN、稀疏属性):即时内核生效,不需要重启。
fsutil behavior修改HKLM\...\FileSystem注册表:部分参数需要重启操作系统内核才会加载新行为。fsutil dirty set仅设置卷脏标记,不会执行磁盘扫描;下一次开机 autochk 才执行校验。
5. 事件日志
Microsoft‑Windows‑NTFS/Operational:记录 NTFS 元数据修改、自愈、FSCTL 操作事件。
四、逻辑链路 Mermaid
sequenceDiagram
participant Admin[管理员 CMD/PowerShell]
participant Fsutil[fsutil.exe]
participant Ntdll[ntdll.dll 原生系统调用]
participant FsDriver[ntfs.sys / refs.sys 内核驱动]
participant VolumeMeta[卷内部元数据($Volume/$MFT/$USN_JOURNAL)]
participant Reg[HKLM\...\FileSystem 注册表]
Note over Admin,Reg: 示例 fsutil sparse setflag D:\test.bin
Admin->>Fsutil: fsutil 子命令 + 参数
Fsutil->>Fsutil: 解析子命令、校验参数
alt 操作读取/修改卷内部元数据
Fsutil->>Ntdll: NtFsControlFile 下发对应FSCTL控制码
Ntdll->>FsDriver: IRP下发至文件系统驱动
FsDriver->>VolumeMeta: 读取/修改MFT、卷元数据
FsDriver-->>Ntdll: 返回操作结果状态码
Ntdll-->>Fsutil: 返回原生数据结构
Fsutil-->>Admin: 格式化文本输出
else behavior子命令修改注册表
Fsutil->>Reg: 读写 FileSystem注册表键
Fsutil-->>Admin: 输出配置值;提示部分需重启生效
end
五、配套链
1. 高频参考命令示例
::查询NTFS卷信息(簇、MFT)
fsutil fsinfo ntfsinfo C:
::设置脏位,触发开机autochk
fsutil dirty set C:
::创建稀疏空洞文件
fsutil file createnew test.bin 1073741824
fsutil sparse setflag test.bin
::创建硬链接(不可跨卷)
fsutil hardlink create link.txt original.txt
::查询USN日志
fsutil usn queryjournal C:
::设置NTFS全局行为(注册表)
fsutil behavior query disable8dot3
::强制卸载卷
fsutil volume dismount D:
2. 配套系统工具对照表
| 工具 | 用途 | 与 fsutil 区别 |
|---|---|---|
| chkdsk.exe | 文件系统元数据扫描修复 | chkdsk 侧重扫描修复;fsutil 侧重查询 / 设置属性,不做完整扫描修复 |
| diskpart.exe | 磁盘分区、卷大小管理 | diskpart 操作分区 / LBA 磁盘;fsutil 操作上层文件系统元数据 |
| refsutil.exe | ReFS 灾难打捞 | refsutil 专门用于损坏 ReFS 卷数据提取;fsutil 只做正常 ReFS 元数据查询 |
| mklink.exe | 符号链接 / 目录联接 | mklink 创建符号链接;fsutil reparsepoint查询 / 删除重解析点 |
3. 运维场景
- 存储性能排障:查看 NTFS 簇大小、MFT 信息、last‑access 更新行为;
- 测试环境生成大空洞稀疏测试文件;
- 取证:读取 USN 变更日志,跟踪文件增删改;
- 批量管理硬链接、重解析点;
- 配置 NTFS 系统全局行为:8.3 短名、最后访问时间更新开关。
六、边界(坑、约束、红线)
- ❗ fsutil 只是用户态外壳程序,本身不做内核文件系统处理;真正逻辑在 ntfs.sys/refs.sys。
- ❗ 功能强依赖文件系统类型:NTFS 功能最全;ReFS/FAT32 大量子命令直接报错不支持。
- ❗
fsutil behavior修改注册表,部分设置必须重启系统才会生效,修改后立刻查询显示新值,但内核仍然运行旧配置,极易踩坑。 - ❗
fsutil dirty set只是打上脏标记,不等于磁盘扫描修复,必须重启触发 autochk。 - ❗ 硬链接
fsutil hardlink:不能跨卷、不能对目录创建硬链接,仅限同一 NTFS 卷普通文件。 - ❗ TxF 事务子命令(resource /transaction):Win10 1709 之后内核 TxF 已废弃;命令保留但执行无效。
- ❗
fsutil volume dismount强制卸载卷:即使文件被打开也会卸载,可能造成业务数据丢失,生产谨慎使用。 - ❗ 普通用户即使看到帮助文本,执行修改类子命令直接拒绝访问,必须管理员提升。
- ❗ fsutil不能修复磁盘硬件坏道;坏道处理由 chkdsk、磁盘驱动负责。
- ❗ ReFS 不支持磁盘配额、ObjectId、TxF 事务,调用对应子命令返回错误。
七、自动化流水线(可直接投产 PowerShell)
流水线功能:批量采集卷文件系统元数据、behavior 配置、脏位、NTFS 信息,输出完整诊断报告
<#
fsutil 文件系统诊断采集流水线
#Requires‑RunAsAdministrator
#>
$reportFile = ".\fsutil_diag_$(Get‑Date -Format yyyyMMdd_HHmmss).log"
$targetVolumes = @("C:") #需要检测的卷
function Write‑Report {
param($msg)
$line = "[$(Get‑Date‑Format HH:mm:ss)] $msg"
Write‑Host $line
$line | Out‑File $reportFile ‑Append
}
Write‑Report "==== fsutil 文件系统诊断流水线 ===="
#1 全局NTFS behavior配置
Write‑Report "`n[1] fsutil behavior 全局NTFS行为配置"
& fsutil.exe behavior query | Out‑File $reportFile ‑Append
foreach($vol in $targetVolumes){
Write‑Report "`n==== 处理卷 $vol ===="
#2 脏位查询
Write‑Report "[2] dirty 脏位状态"
& fsutil.exe dirty query $vol | Out‑File $reportFile ‑Append
#3 fsinfo卷基础信息
Write‑Report "[3] fsinfo volumeinfo"
& fsutil.exe fsinfo volumeinfo $vol | Out‑File $reportFile ‑Append
#4 NTFS详细元数据信息
Write‑Report "[4] fsinfo ntfsinfo"
& fsutil.exe fsinfo ntfsinfo $vol | Out‑File $reportFile ‑Append
#5 磁盘剩余空间
Write‑Report "[5] volume diskfree"
& fsutil.exe volume diskfree $vol | Out‑File $reportFile ‑Append
#6 USN日志查询
Write‑Report "[6] usn queryjournal"
& fsutil.exe usn queryjournal $vol 2>$null | Out‑File $reportFile ‑Append
}
#7 NTFS事件日志导出
Write‑Report "`n[7] Microsoft‑Windows‑NTFS 事件日志(150条)"
Get‑WinEvent -LogName Microsoft‑Windows‑NTFS/Operational -MaxEvents 150 -ErrorAction SilentlyContinue |
Select‑Object TimeCreated,Id,Message | Format‑List | Out‑File $reportFile ‑Append
Write‑Report "`n✅流水线完成,报告文件:$reportFile"
Write‑Report "⚠️提示:behavior部分注册表项需要重启系统才会在内核真正生效。"
refs.sys(ReFS 弹性文件系统驱动)完整底层拆解
文件路径:
C:\Windows\System32\drivers\refs.sys内部代号:Protogon;启动类型:Boot‑Start,内核模式文件系统驱动;设备对象:\Device\ReFs定位:微软现代弹性文件系统内核驱动;基于 COW 写时分配(Allocate‑on‑Write)+ B + 树元数据 + 完整性校验流;面向 PB 级大容量存储、虚拟化、Storage Spaces/S2D;解决 NTFS 静默损坏、离线 chkdsk 停机、容量上限问题;不能作为系统引导卷,Windows 11 Dev Drive 底层同样基于 ReFS抖音百科。
整体链路总览: 应用层CreateFile/ReadFile → I/O管理器 → refs.sys挂载在HarddiskVolume卷设备栈;元数据全部COW写新块,不原地覆盖;元数据强制校验和,文件数据可选完整性流;Scrubber后台扫描静默损坏;对接Storage Spaces实现在线自动修复;块克隆、文件快照、LZ4压缩、块重删;废弃传统事务日志;损坏优先保持卷在线;下层 volmgr.sys → partmgr.sys → disk.sys硬件栈;故障抢救使用refsutil.exe,chkdsk对ReFS仅只读校验,无法修复元数据Microsoft ...
一、基础信息
- ReFS 核心元数据结构
元数据对象 作用 超级块 Superblock 卷头部元数据;多副本冗余存放;记录 B + 树根、卷版本、卷参数;损坏时 refs.sys 自动扫描备选超级块恢复挂载 B + 树元数据索引 目录、文件名、空间分配全部使用 B + 树;元数据更新 COW,不原地覆盖旧页面;崩溃不会撕裂元数据页面 CAT 集群分配表 记录磁盘簇分配状态,替代 NTFS $Bitmap;COW 更新,无原地覆盖 完整性流 Integrity‑Stream 元数据强制校验和;文件数据可选开启按块校验和,检测 bit‑rot 静默位腐烂损坏Microsoft ... 块克隆映射表 实现高效文件克隆,不复制实际数据块,引用计数管理块;Hyper‑V VHDX 快照重度依赖 Streamsnapshot 文件快照元数据 ReFS 原生文件快照,区别 VSS 卷快照;文件粒度快照,COW 差异块存储
关键差异 NTFS:NTFS 元数据原地覆盖 +
$LogFile预写日志;ReFS没有传统事务日志,依靠 COW 原子切换超级块指针实现元数据一致性,断电不会出现元数据撕裂,不需要离线 chkdsk 修复文件系统元数据。
- 关键 FSCTL 控制码集合(refs 私有文件系统控制码)
FSCTL_REFS_INTEGRITY_*:完整性流启用 / 关闭、校验扫描FSCTL_REFS_BLOCK_CLONE:块克隆,文件快速复制FSCTL_REFS_STREAM_SNAPSHOT_*:原生文件快照创建删除FSCTL_REFS_COMPRESSION_*:LZ4 块压缩控制FSCTL_REFS_DEDUP_*:块重复数据删除管理FSCTL_REFS_SCRUBBER_*:后台 Scrubber 扫描器启停、节流配置
- 用户态配套组件
refsutil.exe:ReFS 专属运维工具;完整性扫描、泄漏簇回收、压缩、重删、快照管理、salvage 损坏卷抢救;chkdsk 不能修复 ReFS,仅只读预检。fsutil.exe:通用接口,可执行稀疏、重解析点等基础操作。- Storage Spaces PowerShell Cmdlets:存储池虚拟磁盘,和 refs.sys 内核联动,实现损坏块在线自动修复。
- VSS 组件:ReFS 同样兼容 VSS volsnap.sys 卷影副本;同时拥有自身原生 streamsnapshot 文件快照。
重要限制:ReFS 不支持 EFS 加密、8.3 短文件名、TxF 事务 NTFS、硬链接、用户配额、对象 ID 等 NTFS 遗留特性;不能用于 Windows 系统引导分区(DevDrive 是数据盘,非系统引导)抖音百科。
二、完整内核存储栈
应用层 CreateFile / ReadFile / WriteFile
↓ Win32 API → I/O管理器生成IRP
refs.sys 【ReFS弹性文件系统驱动】
↓
volmgr.sys + volmgrx.sys(HarddiskVolumeX卷设备对象)
↓
partmgr.sys(分区PDO)
↓
disk.sys → storport/miniport → 物理磁盘 / Storage Spaces虚拟磁盘
上层可叠加过滤驱动:volsnap.sys (VSS 快照)、加密过滤驱动 (BitLocker)。
三、四大核心底层流程
流程 1:ReFS 卷挂载流程(系统启动)
- volmgr 输出
HarddiskVolumeX卷设备对象。 - I/O 管理器执行文件系统识别,加载 refs.sys;读取卷头部多份超级块副本。
- refs.sys 校验超级块校验和;挑选有效超级块(断电崩溃会存在新旧两份超级块,丢弃半写无效版本)。
- 加载 B + 树根节点、CAT 分配表;初始化完整性流上下文;启动后台 Scrubber 扫描线程(低优先级,IO 可节流)。
- 卷挂载完成,通知 mountmgr.sys 注册卷 GUID、盘符;无需日志重放,COW 天然保证元数据一致性。
故障场景:超级块全部损坏,卷变为 RAW;普通 chkdsk 无法修复,使用
refsutil salvage抢救导出文件。
流程 2:COW 写时分配(Allocate‑on‑Write)文件写入完整时序
- 应用下发 IRP_MJ_WRITE 写文件。
- refs.sys不原地覆盖旧元数据页面;所有被修改 B + 树页面、分配表页面,分配全新空闲簇写入新版本。
- 如果文件开启完整性流:计算数据块校验和,随同元数据持久化。
- 全部新元数据页面落盘之后,原子更新超级块指针指向新版 B + 树根;旧版本元数据页面保留,后续 GC 垃圾回收标记为空闲。
- 用户数据块写入磁盘;旧元数据块等待后台 GC 回收释放。
断电崩溃:超级块只会指向完整有效的旧版本元数据,不会出现半写撕裂;不需要日志回滚;后台 GC 后续回收废弃旧块。用户业务数据本身没有事务保护,正在写入的业务数据仍然可能半截损坏。
流程 3:完整性流 + Scrubber 后台扫描、Storage Spaces 自动修复流程
- 元数据强制校验和:所有元数据页面读取时重新计算校验和比对;文件数据完整性流为可选,按文件 / 目录粒度开启 / 关闭Microsoft ...。
- 读取块校验和不匹配(bit‑rot 静默损坏):
- 如果底层是 Storage Spaces 镜像 / 奇偶冗余池:refs.sys 向存储池驱动请求正确冗余副本;使用正确副本覆盖损坏块,更新校验和;全程卷在线,不停机修复。
- 如果是单块无冗余磁盘:refs.sys 将损坏对象从命名空间移除,卷尽量保持在线,记录事件日志,不盲目覆盖磁盘数据Microsoft ...。
- Scrubber 后台扫描器:低优先级后台线程,周期性全盘遍历,校验所有块校验和;提前发现静态归档文件隐藏损坏;IO 节流,业务高峰自动降低扫描带宽,不抢占业务 IO。
流程 4:块克隆 Block‑Clone(Hyper‑V 重度使用)
- 用户下发 FSCTL_REFS_BLOCK_CLONE,请求克隆文件。
- refs.sys不拷贝磁盘实际数据块;仅复制元数据,对底层数据块增加引用计数;多个文件共享同一组磁盘簇。
- 当其中一个文件发生写入:触发 COW,分配新簇保存修改;其他文件继续共享原始块。
- 文件删除:递减块引用计数;引用计数归 0,CAT 分配表释放簇。
作用:VHDX 快照、虚拟机快速克隆,秒级完成大文件复制,几乎不消耗 IO。
四、ReFS 关键特性底层实现
- LZ4 块压缩:内核 LZ4 压缩;块粒度压缩;refsutil compression 管理;相比 NTFS 软件压缩 CPU 效率更高。
- 块重复数据删除 Dedup:内核块级去重;相同内容块只存一份,引用计数;适合虚拟化、备份存储场景。
- Streamsnapshot 原生文件快照:文件粒度快照,区别 VSS 整卷快照;COW 差异块存储;refsutil streamsnapshot 管理。
- 超大容量上限:单卷最大 35PB;突破 NTFS 256TB 硬上限,面向企业 PB 级存储池。
- 损坏处理哲学:优先保证卷在线;检测到无法修复损坏,移除损坏文件对象,而不是直接整个卷下线;极端严重元数据损坏才切换只读 / 下线。
五、依赖文件、配套链、上下游关系图谱
| 组件 | 文件名 | 与 refs.sys 关系 |
|---|---|---|
| volmgr.sys / volmgrx.sys | 卷管理器 | refs.sys 挂载在 volmgr 输出 HarddiskVolume 卷设备之上,依赖卷 IO 通路 |
| mountmgr.sys | 挂载管理器 | refs 卷挂载完成后通知 mountmgr 注册卷 GUID、盘符、文件夹挂载点 |
| Storage Spaces 驱动栈 | spaceport.sys 等 | refs.sys 读取校验和发现损坏,调用存储池驱动获取冗余副本,在线修复损坏块Microsoft ... |
| volsnap.sys | VSS 快照过滤驱动 | ReFS 兼容 VSS 卷影副本;同时具备自身原生 streamsnapshot 文件快照 |
| refsutil.exe | 用户态工具 | 下发私有 FSCTL 控制码,操作 refs.sys;完整性扫描、GC 回收、salvage 抢救损坏卷 |
| BitLocker 驱动 | fvevol.sys | BitLocker 加密层可以叠加在 ReFS 下层,实现全盘加密。 |
周边组件关系
- refs.sys ↔ chkdsk chkdsk.exe 对 ReFS 只能做只读元数据检查;不能执行修复;ReFS 修复、垃圾回收、损坏导出全部依靠 refsutil;不要使用 chkdsk /f 处理 ReFS 卷,无修复效果。
- refs.sys ↔ Storage Spaces / S2D 二者是协同关系:refs 负责文件系统层面校验和检测损坏;Storage Spaces 提供多副本数据;refs 检测损坏后,调用存储池获取正确副本覆盖坏块,实现在线自愈;单块普通磁盘无冗余,refs 只能检测损坏,无法自动修复。
- refs.sys ↔ VSS volsnap.sys ReFS 同时支持两套快照:
- VSS 卷影副本(volsnap.sys,整卷快照,兼容传统备份软件);
- ReFS 原生 streamsnapshot(文件粒度快照,refsutil 管理,Hyper‑V 优先使用)。
- refs.sys ↔ DevDrive(Windows11) DevDrive 底层就是 ReFS;针对开发者编译 IO 优化;依然是数据盘,不能作为操作系统引导盘。
六、能力边界:能干 / 不能干
✅ refs.sys 可以:
- COW 写时分配元数据更新,断电保证元数据一致性,不需要离线 chkdsk 修复元数据。
- 元数据强制校验和;文件数据可选完整性流,检测静默 bit‑rot 位腐烂损坏。
- Scrubber 后台全盘扫描,主动发现隐藏损坏;对接 Storage Spaces 实现损坏块在线自动修复。
- 原生块克隆、LZ4 块压缩、块重复删除、文件粒度 streamsnapshot 快照,面向虚拟化优化。
- PB 级超大卷支持;损坏优先保持卷在线;元数据超级块多副本冗余。
❌ refs.sys不能做:
- 不能作为 Windows 操作系统引导文件系统,无法直接启动 Windows 内核。
- 无冗余单磁盘场景:只能检测损坏,不能自动修复损坏数据;检测损坏后移除损坏对象。
- 不支持 NTFS 部分遗留特性:EFS 加密、8.3 短名、TxF 事务 NTFS、硬链接、磁盘配额、对象 ID抖音百科。
- 用户业务数据没有事务保护;断电时正在写入的业务文件依然可能半截损坏;完整性流只做校验,不阻止业务数据撕裂。
- 不同 Windows 版本 ReFS 元数据版本不向下兼容;新版本创建的 ReFS 卷旧系统可能无法挂载。
七、典型故障现象对照表
| 现象 | 底层根因 | 处理方向 |
|---|---|---|
| ReFS 卷变为 RAW 无法挂载 | 超级块损坏;B + 树根元数据损坏;版本不兼容 | refsutil salvage -QA X: D:\recovery,导出可恢复文件,之后重建卷格式化 |
| 事件日志报 ReFS 完整性校验检测到块损坏 | 介质 bit‑rot 静默损坏;内存 / 固件错误;底层磁盘坏块 | Storage Spaces 环境会自动在线修复;单盘场景备份损坏文件;检查磁盘硬件健康 |
| 磁盘空间占用异常,删除文件空间不释放 | 块克隆 / 快照产生引用计数泄漏,孤儿簇未回收 | refsutil leak X:执行泄漏簇回收 GC |
| ReFS 卷变为只读模式 | 检测到多处不可修复损坏,refs 为保护数据强制切只读 | 使用 refsutil salvage 导出数据,备份后重建卷 |
| chkdsk 执行提示:此卷不需要检查 | ReFS 元数据自愈设计,chkdsk 不具备修复能力 | 改用 refsutil 做扫描与抢救操作 |
常用排错命令
refsutil integrity D: /scan # 完整性扫描
refsutil leak D: # 回收泄漏簇
refsutil salvage -QA D: E:\refs_recovery # 损坏卷自动抢救导出
refsutil streamsnapshot list D:\test.vhdx # 查看文件快照
八、关键误区总结
- ❌误区:ReFS 完全不会损坏,断电什么都不怕。 ✅事实:ReFS 保证元数据不会撕裂损坏;正在写入的用户业务数据依然会断电半截损坏;单块磁盘只能检测损坏,不能自动修复业务数据。
- ❌误区:chkdsk 可以修复 ReFS 卷。 ✅事实:chkdsk 对 ReFS 仅只读校验;修复、垃圾回收、损坏数据导出全部使用
refsutil.exe。 - ❌误区:ReFS 自带 RAID 冗余。 ✅事实:ReFS 只做损坏检测;冗余副本由上层 Storage Spaces 存储池提供;普通单磁盘没有自动修复能力。
- ❌误区:ReFS 可以用来做 Windows 系统 C 盘引导。 ✅事实:标准 ReFS不能作为系统引导卷;Win11 DevDrive 是数据盘,不是系统引导盘。
记忆链路: refs.sys 采用 COW 写时分配,元数据更新不原地覆盖;元数据强制校验和,文件数据可选完整性流;Scrubber 后台扫描静默损坏;对接 Storage Spaces 实现在线自动修复;拥有块克隆、原生文件快照、块压缩、重删虚拟化能力;无传统事务日志;损坏优先保持卷在线;故障抢救依靠 refsutil,chkdsk 无法修复 ReFS 元数据。
一、ReFSUtil
- 完整全称拆分
ReFSUtil = Resilient File System Utility
- ReFS:Resilient File System(弹性文件系统,微软新一代容错文件系统)
- Util:Utility(工具、实用程序)
程序实体:
refsutil.exe作用:专门用于 ReFS 分区的修复、元数据检查、空间分析、完整性流管理、快照清理、损坏块扫描修复。
二、fsutil
- 完整全称拆分
fsutil = File System Utility
- fs = File System(文件系统)
- util = Utility(实用工具)
程序实体:
fsutil.exe作用:Windows 通用文件系统底层管理工具,同时支持 NTFS/FAT32/exFAT/ReFS,提供配额、硬链接、稀疏文件、USN 日志、文件锁定、磁盘元数据等底层操作。
三、Microsoft Learn
补充区分
fsutil:通用全文件系统工具,Windows 历代系统内置;refsutil:ReFS 专属专用工具,自 Windows Server 2012(ReFS 正式发布)才新增,仅针对 ReFS 特有容错、完整性、块分配机制操作。

refsutil.exe 完整解构(全子命令,基于截图帮助输出)
路径:
%SystemRoot%\System32\refsutil.exe截图可见全部顶层子命令:fixboot、leak、salvage、triage、streamsnapshot、compression、dedup、iometrics拆解维度:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化流水线
一、底层原理
1. 组件定位
refsutil.exe 是 ReFS 文件系统专用用户态管理工具。 本身不实现文件系统业务逻辑,仅做命令解析、参数校验,通过 NtFsControlFile 下发ReFS 专属 FSCTL 控制码,与内核驱动 refs.sys 交互,完成卷维护、损坏处理、压缩、重复数据删除、IO 指标、快照、泄露检测等操作。
refsutil.exe 子命令总览表(基于截图完整整理)
子命令 中文描述 核心作用 是否修改磁盘元数据 卷状态要求 fixboot 修复启动扇区 修复 ReFS 卷 VBR 卷引导扇区元数据;可指定版本、簇大小,支持 SMR 叠瓦盘参数,可备份原有引导扇区 ✅ 是 挂载 / RAW 未挂载卷均可执行 leak 泄露检测和修复 检测并修复 ReFS 元空间泄露,修复元数据记账与实际簇分配不一致问题;支持仅诊断不修复、快照保护、自定义缓冲区、并发线程控制 ✅ 是(执行修复时) 卷必须正常挂载,RAW 损坏卷不可使用 salvage 损坏卷的挽救操作 灾难数据提取,全程只读不修改源卷;分为诊断、快速扫描、完整扫描、复制、交互式恢复;支持断点续扫,输出 foundfiles 清单文件 ❌ 否 支持 RAW 损坏、无法挂载的 ReFS 卷 triage 处理损坏 轻量卷诊断,标记、隔离损坏 B + 树元节点;可按目录 ID 隔离子树,也可全局扫描隔离全部损坏项,尽力恢复卷挂载能力 ✅ 是 优先需要挂载;部分损坏场景 RAW 模式有限支持 streamsnapshot 流式传输快照管理 S2D 场景 ReFS 流式增量快照;创建 / 列出 / 删除 / 查询快照流,针对文件流做快照生命周期管理 ✅ 是 卷必须正常挂载 compression 卷压缩支持 ReFS 块压缩;查询压缩状态、启用 / 关闭压缩,支持 LZ4/ZSTD 算法,可配置压缩级别、压缩块大小,触发重压缩 ✅ 是 卷必须正常挂载 dedup 等效簇重复数据删除 ReFS 内核原生等效簇去重;执行去重扫描、删除去重索引,可限制 CPU 占用,提供内存‑存储权衡模式;与 NTFS 去重完全独立 ✅ 是 卷必须正常挂载 iometrics 卷 IO 指标跟踪 开启 / 关闭 / 查询 ReFS 内核层 IO 统计采集;指标保存在内存,重启 / 卸载卷全部丢失,不持久化落盘 ❌ 否(仅内存开关) 卷必须正常挂载;部分 Windows 版本会报函数不正确
风险等级标注补充
子命令 风险等级 关键注意点 fixboot P0 高危 参数错误直接损毁卷,生产务必携带 ‑w备份旧引导扇区leak P1 中高风险 仅 /a自动修复会改写元数据;建议先/d诊断确认泄露再修复salvage P2 低风险 只读操作,无写盘风险;工作目录不能放在待恢复源卷 triage P1 中高风险 原地隔离损坏元节点,不能保证卷修复成功;优先 salvage 导出数据 streamsnapshot P2 普通风险 S2D 专用,普通单机场景用途有限 compression P1 中风险 重压缩会大量改写卷元数据,消耗 CPU、IO dedup P1 中风险 去重扫描 IO 开销大,生产建议限制 CPU 百分比 iometrics P3 无风险 仅内存统计,不修改磁盘,存在版本兼容性问题 运维标准顺序:salvage 数据导出 → 再执行所有写修复类操作。
2. 底层工作模型
- 用户态
refsutil.exe解析命令行参数; - 打开卷设备句柄,调用
ntdll.dll!NtFsControlFile,下发对应 FSCTL_IRP 到内核; refs.sys接收 IRP,在内核完成元数据修改、扫描、统计;- 将结果回传给用户态,refsutil 格式化输出文本;
⚠️区分:
salvage:只读,不修改源卷元数据,只导出数据;fixboot / leak / triage / compression / dedup:会原地修改卷元数据,属于写操作。
二、依赖文件
| 文件路径 | 职责 |
|---|---|
%SystemRoot%\System32\refsutil.exe |
主程序,参数解析、控制台输出 |
%SystemRoot%\ntdll.dll |
原生系统调用 NtFsControlFile,下发 FSCTL |
kernel32.dll |
卷设备句柄管理、IO 基础封装 |
%SystemRoot%\System32\drivers\refs.sys |
ReFS 内核驱动,全部真实业务逻辑实现 |
%SystemRoot%\System32\drivers\ntoskrnl.exe |
内核内存、IRP 分发 |
事件日志通道:
Microsoft‑Windows‑ReFS/Operational,记录所有 refsutil 下发的内核操作、警告、错误。
三、依赖关系
1. 权限依赖
- 全部子命令必须管理员权限;部分写操作(fixboot、leak repair、triage、dedup)需要特权
SeManageVolumePrivilege(卷管理特权)。
2. 内核‑用户态调用链路
PowerShell / CMD → refsutil.exe
↓
ntdll.dll::NtFsControlFile(FSCTL_REFS_*)
↓IRP
refs.sys(内核内执行扫描/修复/压缩/去重)
↓
返回状态码 → refsutil格式化打印输出
3. 版本强绑定
refsutil.exe 的版本必须和
refs.sys版本匹配。
- 旧版本 Windows 的 refsutil 无法识别新版 ReFS 卷(3.14、3.15)的新特性(内置 dedup、compression、streamsnapshot);
- 低版本操作系统调用高版本 ReFS 特性子命令直接返回不支持。
4. 各子命令卷状态约束
| 子命令 | 卷是否允许挂载状态 |
|---|---|
| salvage | 可以 RAW 不可挂载;只读,不修改卷 |
| fixboot | 卷可以挂载 / 不可挂载;写元数据 |
| leak | 卷必须正常挂载 |
| triage | 可挂载或部分损坏卷;原地标记损坏元数据 |
| compression | 卷必须正常挂载 |
| dedup | 卷必须正常挂载 |
| streamsnapshot | 卷必须正常挂载 |
| iometrics | 卷必须正常挂载 |
5. 生效逻辑
fixboot / leak / triage / compression / dedup:内核即时写入卷元数据,立刻生效,不需要重启;修改存储在卷本身,不在注册表。iometrics:IO 指标开关内存生效,卷卸载后重置。
四、各子命令逻辑链路 Mermaid
sequenceDiagram
participant Admin[管理员终端]
participant RefsUtil[refsutil.exe]
participant Ntdll[ntdll.dll NtFsControlFile]
participant RefsSys[refs.sys内核驱动]
participant Volume[ReFS卷元数据/数据簇]
Admin->>RefsUtil: refsutil <子命令> 卷: [参数]
RefsUtil->>RefsUtil: 参数校验、权限校验
RefsUtil->>Ntdll: 打开卷设备句柄,下发对应FSCTL_REFS_*
Ntdll->>RefsSys: IRP下发到ReFS驱动
alt salvage(挽救)
RefsSys->>Volume: 只读遍历元数据块,不修改磁盘
RefsSys-->>Ntdll: 返回文件列表、读取状态
else fixboot / leak / triage / compression / dedup
RefsSys->>Volume: **原地修改卷元数据**
RefsSys-->>Ntdll: 返回操作完成状态、统计信息
else iometrics / streamsnapshot
RefsSys->>RefsSys: 内核开启指标采集 / 快照管理
RefsSys-->>Ntdll: 返回快照列表、指标状态
end
Ntdll-->>RefsUtil: 返回数据结构
RefsUtil-->>Admin: 输出文本结果、统计、警告、错误码
子命令简要原理拆解
- fixboot 修复 ReFS 卷 VBR(卷启动记录),修复卷头部启动扇区元数据;当卷头部扇区损坏导致无法挂载时使用;原地写入卷头部扇区,不是操作系统 boot 扇区。
- leak ReFS 元数据记账泄露:元数据 B + 树记账计数与实际分配簇不一致。
leak detect:扫描元数据,检测泄露;leak repair:修复记账计数,回收泄露元簇;需要卷正常挂载。
- salvage 灾难挽救,只读扫描损坏卷,导出文件,前文已完整拆解。不修改源卷。
- triage 损坏处理,对损坏元数据做轻量处理:标记损坏节点,隔离损坏元数据,尽可能让卷可以挂载;和 salvage 区别:triage原地修改卷元数据;salvage 只读提取数据。
故障处理推荐顺序:
salvage先导出关键数据 → triage尝试修复挂载,防止修复过程二次损坏。
- streamsnapshot ReFS 流式快照,增量快照管理;用于 Storage Spaces Direct、备份场景;管理快照创建、删除、合并、列表。
- compression ReFS 块级压缩;查询卷压缩状态,触发重新压缩 / 解压缩块。
- dedup ReFS 原生等效簇重复数据删除;不是 NTFS 的 Dedup;ReFS 内核层等效簇去重,不需要单独 Dedup 服务。
- iometrics 开启内核层 IO 统计,采集每个文件 / 卷读写延迟、IO 计数;用于性能排障;重启 / 卷卸载后指标丢失。
五、配套链
1. 常用命令示例
#修复卷启动扇区
refsutil fixboot D:
#检测元泄露
refsutil leak detect D:
#修复元泄露
refsutil leak repair D:
#triage损坏处理
refsutil triage D:
#查询压缩状态
refsutil compression query D:
#查看dedup状态
refsutil dedup query D:
#快照列表
refsutil streamsnapshot list D:
#开启IO指标跟踪
refsutil iometrics enable D:
refsutil iometrics query D:
2. 配套工具对比
| 工具 | 用途 | 与 refsutil 区别 |
|---|---|---|
| chkdsk.exe | ReFS 仅做只读预检,不做修复 | ReFS 修复全部交给 refsutil;chkdsk 不修改 ReFS 元数据 |
| fsutil.exe | 通用文件系统元数据查询 | fsutil 仅支持 ReFS 部分子集;refsutil 是 ReFS 专属全套工具 |
| diskpart.exe | 磁盘分区管理 | 操作磁盘分区,不操作 ReFS 内部元数据 |
运维标准流程(ReFS 损坏)
- 使用
salvage导出重要业务数据; - 再执行
triage尝试修复卷可挂载; - 出现元泄露执行
leak detect / leak repair; - 扇区损坏执行
fixboot; - 修复完成后,查看
Microsoft‑Windows‑ReFS/Operational事件日志确认无持续报错。
六、边界(坑点约束红线)
- ❗
salvage只读不修改卷;fixboot / leak / triage / dedup / compression会原地修改卷元数据,操作前强烈建议先 salvage 备份数据。 - ❗ 版本强依赖:低版本 Windows refsutil 无法操作高版本 ReFS 卷新特性(dedup、compression、streamsnapshot),命令直接报错。
- ❗
leak repair必须卷正常挂载;RAW 无法挂载的卷不能执行 leak,只能使用 salvage。 - ❗
triage只是轻量损坏隔离,不等于 100% 修复;部分严重损坏,triage 之后仍然无法挂载,只能依赖 salvage 提取。 - ❗
iometrics指标是内存驻留,卷卸载 / 系统重启,指标全部清零,不会持久化保存。 - ❗
dedup是 ReFS 原生等效簇去重,和 NTFS 的 Dedup 引擎完全两套实现,不能混用。 - ❗
fixboot修复的是ReFS 卷内部 VBR 卷启动扇区,不是 Windows 系统 BCD 启动扇区,不要混淆。 - ❗ 全部子命令仅支持 ReFS;NTFS/exFAT/FAT 直接返回不支持。
七、自动化流水线(可直接投产 PowerShell)
流水线功能:ReFS 卷批量健康诊断;执行 leak 检测;triage 预处理;日志导出;输出完整报告。
<#
refsutil 全子命令诊断流水线
#Requires‑RunAsAdministrator
#>
$reportFile = ".\refsutil_full_diag_$(Get‑Date -Format yyyyMMdd_HHmmss).log"
$targetVol = "D:" #目标ReFS卷
function Write‑Report{
param($msg)
$line = "[$(Get‑Date‑Format HH:mm:ss)] $msg"
Write‑Host $line
$line | Out‑File $reportFile ‑Append
}
Write‑Report "==== refsutil 完整诊断流水线 ===="
Write‑Report ("目标卷:$targetVol")
#1 leak泄露检测
Write‑Report "`n[1] leak detect 元泄露检测"
& refsutil.exe leak detect $targetVol | Out‑File $reportFile ‑Append
#2 triage损坏预处理
Write‑Report "`n[2] triage 损坏处理"
& refsutil.exe triage $targetVol | Out‑File $reportFile ‑Append
#3 compression查询
Write‑Report "`n[3] compression query 压缩状态"
& refsutil.exe compression query $targetVol | Out‑File $reportFile ‑Append
#4 dedup查询
Write‑Report "`n[4] dedup query 重复删除状态"
& refsutil.exe dedup query $targetVol | Out‑File $reportFile ‑Append
#5 streamsnapshot快照列表
Write‑Report "`n[5] streamsnapshot list 快照列表"
& refsutil.exe streamsnapshot list $targetVol 2>$null | Out‑File $reportFile ‑Append
#6 iometrics查询IO指标
Write‑Report "`n[6] iometrics query IO指标"
& refsutil.exe iometrics query $targetVol 2>$null | Out‑File $reportFile ‑Append
#7 ReFS事件日志导出
Write‑Report "`n[7] Microsoft‑Windows‑ReFS 事件日志150条"
Get‑WinEvent -LogName Microsoft‑Windows‑ReFS/Operational -MaxEvents 150 -ErrorAction SilentlyContinue |
Select‑Object TimeCreated,Id,Message | Format‑List | Out‑File $reportFile ‑Append
Write‑Report "✅流水线执行完成,报告:$reportFile"
Write‑Report "⚠️重要提醒:执行leak repair / fixboot写操作前,优先使用salvage导出业务数据!"

refsutil.exe 完整全参数解构(基于完整帮助截图)
程序路径:
%SystemRoot%\System32\refsutil.exe拆解维度:底层原理|依赖文件|依赖关系|逻辑链路|配套链|边界|自动化流水线 覆盖全部 8 大子命令完整参数:fixboot/leak/salvage/triage/streamsnapshot/compression/dedup/iometrics
一、底层原理
1. 整体定位
refsutil.exe 是 ReFS 专属用户态命令行工具。
本身不实现任何文件系统内核逻辑,仅负责:命令行解析、参数校验、输出格式化。 通过
ntdll.dll::NtFsControlFile下发一组 *FSCTL_REFS_ 私有文件系统控制码 **,下发 IRP 到内核驱动refs.sys;所有元数据扫描、修复、压缩、去重、快照、泄露检测全部在内核refs.sys完成。
区分两类操作:
- 只读操作:
salvage扫描、iometrics query、各类query查询;不会修改磁盘卷元数据。 - 原地写操作:
fixboot、leak repair、triage、streamsnapshot增删快照、compression重压缩、dedup去重;直接修改 ReFS 卷上存储的元数据,存在数据风险。
2. 各子命令参数模型梳理
① fixboot(修复 ReFS 卷 VBR 卷启动扇区)
⚠️警告:修改卷头部 VBR,参数错误会直接损毁卷。
refsutil fixboot <drive> <MajorVersion> <MinorVersion> <ClusterSize> [-f] [-w <Dir>] [-smr <SMRBandSizeInMB>] [-x]
<MajorVersion>/<MinorVersion>:ReFS 卷版本号,例如3 3代表 ReFS 3.3;<ClusterSize>:卷簇大小,常见 4096 / 65536;-f:强制写入,忽略现存有效引导扇区;-w <Dir>:把原始引导扇区备份到指定目录;故障恢复前强烈建议带上备份参数;-smr:SMR 叠瓦盘专用参数,BandSize 仅支持 128/256MB;-x:强制卸载卷,断开全部打开句柄。
底层:下发FSCTL_REFS_FIX_BOOT_SECTOR,重写卷头部 VBR (Volume Boot Record),这是 ReFS 卷内部的卷引导扇区,不是 Windows 系统 BCD 系统启动扇区。
② leak(元数据泄露检测与修复)
解决:B + 树元记账计数与实际分配簇不一致,元簇泄露、空间被占用但无文件引用。
refsutil leak <drive> [/a] [/x] [/v] [/d] [/q] [/t <count>] [/s <file>]
/a:检测 + 自动修复泄露;/x:创建卷快照再执行,避免扫描期间文件变动;/v:详细输出;/d:仅诊断模式,只打印泄露,不执行修复;/q:查询操作需要的缓冲空间;/t <count>:并发线程数;/s <file>:使用外部文件作为临时缓冲区,不使用 TEMP。
约束:卷必须正常挂载,RAW 无法挂载的卷不能执行 leak,只能用 salvage。 内核行为:遍历元 B + 树,比对分配记账;
/a模式内核原地修改元记账元数据回收泄露簇。
③ salvage(损坏卷挽救,灾难数据导出)
refsutil salvage [-QA|-FA|-D|-QS|-FS|-C|-SL|-IC] <源卷> <工作目录> [目标目录] [‑m] [-v] [-sv] [-hl] [-x]
阶段模型:
-D:仅诊断,判断卷是否合法 ReFS、输出挂载失败原因;-QS快速扫描:假设关键元数据完好,不遍历全部磁盘块;输出foundfiles.<卷签名>.txt;支持断点续扫;-FS完整扫描:逐块遍历整个磁盘识别元数据;生成清单,支持断点续扫;-C复制:读取已生成foundfiles清单,导出文件;-SL:使用用户自定义筛选后的文件清单做选择性恢复;-IC交互式控制台,手动浏览虚拟目录树选择性导出;-QA快速自动:‑QS + ‑C;‑FA完整自动:‑FS + ‑C。
关键参数:
-m:恢复已删除文件,扫描耗时巨大,大量无效碎片;-sv:跳过 ReFS 版本校验;-hl:假设卷支持硬链接;-x:强制卸载源卷;
硬性约束:工作目录、目标目录绝对不能放在待恢复的源损坏卷上。 底层:下发 FSCTL_REFS_SALVAGE,内核只读遍历磁盘块,全程不修改源卷任何元数据。
④ triage(会审 / 损坏处理)
refsutil triage <drive> [/s <id>] [/g] [/v]
/s <id>:按目录 ID 清除指定目录子树,隔离损坏元节点;/g:全局模式,扫描整个卷隔离全部损坏元数据;/v详细输出。
与 salvage 核心区别:
salvage:只读,只导出,不改卷;triage:原地修改卷元数据,标记、隔离损坏 B + 树节点,尽力让卷可以挂载。 标准运维顺序:优先 salvage 导出业务数据,再执行 triage 做修复,避免修复操作二次破坏数据。
⑤ streamsnapshot(流式快照管理 S2D 场景)
refsutil streamsnapshot [/c <name>] [/l] [/d <name>] [/q <name>] <file[:stream]>
/c创建快照;/l列出快照;/d删除快照;/q查询快照;
用于 Storage Spaces Direct,ReFS 增量流式快照;快照元数据驻留卷内。
⑥ compression(卷块压缩管理)
refsutil compression <drive> [/q] [/c] [/f <format>] [/e <engine>] [/cs <size>]
/q查询卷压缩状态;/c触发压缩 / 重压缩;/f压缩格式:LZ4/ZSTD/NONE关闭;/e压缩级别,1‑12 (LZ4),1‑22 (ZSTD);级别越高压缩比越高,CPU 开销越大;/cs压缩集群块大小。
ReFS 块级压缩,内核实时执行;修改即时写入卷元数据。
⑦ dedup(ReFS 原生等效簇重复数据删除)
refsutil dedup <drive> [‑/d] [/s] [/cpu <percentage>] [/mm]
⚠️这是 ReFS 内核等效簇去重;和 NTFS 的 Dedup 服务完全两套机制,不可混用。
/d删除去重索引;/s扫描执行去重;/cpu限制最大 CPU 占用百分比 1‑100;/mm内存 / 存储权衡模式。
⑧ iometrics(卷 IO 指标跟踪)
refsutil iometrics <drive> [enable|disable|query]
内核层采集文件 IO 延迟、IO 计数;指标保存在内存,卷卸载 / 系统重启全部丢失,不会持久化到磁盘。
二、依赖文件
| 文件路径 | 职责 |
|---|---|
%SystemRoot%\System32\refsutil.exe |
主程序,参数解析、控制台输出 |
%SystemRoot%\ntdll.dll |
原生系统调用NtFsControlFile下发 FSCTL 控制码 |
kernel32.dll |
卷设备句柄打开关闭、基础 IO 封装 |
advapi32.dll |
权限特权检查 |
%SystemRoot%\System32\drivers\refs.sys |
ReFS 内核驱动,全部真实业务逻辑实现载体 |
ntoskrnl.exe |
内核 IRP 分发、内存管理 |
事件日志通道:
Microsoft‑Windows‑ReFS/Operational,记录所有 refsutil 触发的内核操作、报错、警告。
三、依赖关系
1. 权限依赖
- 全部子命令必须管理员提升权限;
- 写操作(fixboot /leak repair /triage/compression /dedup/streamsnapshot)必须特权:
SeManageVolumePrivilege(卷管理特权)。
2. 调用链路
PowerShell / CMD → refsutil.exe
↓参数校验
ntdll.dll!NtFsControlFile(FSCTL_REFS_XXXX)
↓下发IRP
refs.sys(内核内部完成扫描/修改元数据)
↓返回状态、统计数据
ntdll.dll → refsutil.exe格式化输出文本
3. 版本强绑定
refsutil.exe版本必须匹配refs.sys内核驱动版本。
- 旧操作系统 refsutil 无法识别新版 ReFS3.14/3.15 新增能力:原生 dedup、compression、streamsnapshot;调用直接返回参数错误。
- iometrics 在部分老版本 build 直接报错
函数不正确(截图末尾可见该报错示例)。
4. 各子命令卷状态约束矩阵
| 子命令 | 卷必须正常挂载 | RAW 损坏卷可用 | 会原地修改卷元数据 |
|---|---|---|---|
| fixboot | ❌可挂载 / 不可挂载均可 | ✅ | ✅ |
| leak detect/repair | ✅必须挂载 | ❌ | ✅(repair) |
| salvage | ❌ | ✅ | ❌只读 |
| triage | ✅部分场景可 RAW | 部分支持 | ✅ |
| streamsnapshot | ✅ | ❌ | ✅ |
| compression | ✅ | ❌ | ✅ |
| dedup | ✅ | ❌ | ✅ |
| iometrics | ✅ | ❌ | ❌仅内存开关 |
5. 生效逻辑
- fixboot /leak/triage /compression/dedup /streamsnapshot:修改卷磁盘上的元数据,立刻持久化,无需重启系统;配置保存在卷本身,不在注册表。
- iometrics:内存驻留,卷卸载、系统重启全部清零,不会落盘。
- salvage 扫描断点状态保存在工作目录文件,中断后再次执行相同命令可以续扫。
四、完整逻辑链路 Mermaid
sequenceDiagram
participant Admin[管理员终端]
participant RefsUtil[refsutil.exe]
participant Ntdll[ntdll.dll NtFsControlFile]
participant RefsSys[refs.sys内核驱动]
participant Volume[ReFS卷磁盘元数据/簇]
Admin->>RefsUtil: refsutil 子命令 +完整参数
RefsUtil->>RefsUtil: 参数合法性校验、特权权限校验
RefsUtil->>Ntdll: 打开卷设备句柄,下发FSCTL_REFS_*控制码
Ntdll->>RefsSys: IRP下发进入ReFS驱动
alt salvage 挽救(只读)
RefsSys->>Volume: 只读遍历磁盘元数据块,不写入磁盘
RefsSys-->>Ntdll: 返回文件清单、读取状态
else fixboot /leak / triage /compression /dedup /streamsnapshot
RefsSys->>Volume: 原地修改卷VBR/元B+树/压缩/快照元数据
RefsSys-->>Ntdll: 返回统计、警告、错误码
else iometrics
RefsSys->>RefsSys: 内核开启/关闭内存IO统计
RefsSys-->>Ntdll: 返回指标状态
end
Ntdll-->>RefsUtil: 返回原生数据结构
RefsUtil-->>Admin: 格式化输出文本、警告、统计信息
五、配套链
1. 典型生产命令示例
#1 fixboot修复引导扇区,同时备份原始扇区
refsutil fixboot D: 3 3 65536 -w C:\backup -x
#2 leak仅诊断泄露,不修复
refsutil leak D: /d /v
#2‑2 检测并自动修复泄露
refsutil leak D: /a /x
#3 salvage完整扫描导出,‑FS扫描,‑C复制
refsutil salvage -FS R: D:\work D:\recovery -x -v
refsutil salvage -C R: D:\work D:\recovery -x -v
#4 triage全局隔离全部损坏元节点
refsutil triage D: /g /v
#5 streamsnapshot快照管理
refsutil streamsnapshot /c "snap‑01" D:\test.vhdx
refsutil streamsnapshot /l D:\test.vhdx
#6 compression查询+执行ZSTD压缩级别6
refsutil compression D: /q
refsutil compression D: /c /f ZSTD /e 6
#7 dedup执行去重,限制CPU最大50%
refsutil dedup D: /s /cpu 50
#8 iometrics开启IO指标
refsutil iometrics enable D:
refsutil iometrics query D:
配套工具对照表
| 工具 | 用途 | 与 refsutil 区别 |
|---|---|---|
| chkdsk.exe | ReFS 仅只读预检,不做修复;不能修改 ReFS 元数据 | 所有修复、打捞全部交给 refsutil |
| fsutil.exe | 通用文件系统工具 | fsutil 仅支持 ReFS 极小子集;refsutil 是 ReFS 完整专属工具集 |
| diskpart.exe | 磁盘分区 / LBA 操作 | 操作磁盘分区,不触碰 ReFS 内部元数据 |
标准故障处置 SOP(ReFS 卷损坏)
- 使用
refsutil salvage优先导出全部关键业务数据; - 数据备份完成后,执行
triage尝试隔离损坏元数据,尝试挂载卷; - 若存在元记账泄露,执行
leak detect,确认后执行leak repair; - VBR 引导扇区损坏:执行
fixboot,务必带上‑w备份旧扇区; - 全程查看
Microsoft‑Windows‑ReFS/Operational事件日志确认报错。
六、边界(坑点、约束红线)
- ❗ fixboot 参数错误直接摧毁卷;生产执行必须带上‑w 备份原始引导扇区。
- ❗
salvage全程只读不写卷;fixboot / leak repair / triage / compression / dedup会原地修改磁盘元数据,操作前必须优先 salvage 备份业务数据。 - ❗
leak repair只能用于正常挂载的卷;RAW 无法挂载卷不能执行 leak。 - ❗
triage只是隔离损坏元节点,不等于完全修复;严重损坏场景 triage 执行后依旧无法挂载,只能依靠 salvage 提取。 - ❗
iometrics指标完全驻留内存;重启、卷卸载,全部指标清零,不会持久化。部分系统 build 直接返回 “函数不正确”。 - ❗ ReFS dedup 是内核等效簇去重,与 NTFS Deduplication 角色、存储引擎完全独立,不可混用。
- ❗
streamsnapshot流式快照为 S2D 存储空间直连场景设计,普通单机使用场景有限。 - ❗ 所有子命令仅支持 ReFS;NTFS/exFAT/FAT32 直接返回不支持。
- ❗ salvage 工作目录、目标目录严禁放在待恢复源卷,直接失败。
- ❗ 版本强绑定:高版本 ReFS 卷在旧 Windows 上执行 refsutil,高级子命令会报参数错误。
七、自动化流水线(可直接投产 PowerShell)
流水线能力:批量诊断 ReFS 卷;leak 泄露诊断;triage 预处理;压缩、去重、快照状态采集;导出完整报告;默认只做诊断,不执行破坏性修复操作。
<#
refsutil完整诊断流水线
#Requires‑RunAsAdministrator
#>
$reportFile = ".\refsutil_full_report_$(Get‑Date -Format yyyyMMdd_HHmmss).log"
$targetVolume = "D:" #目标ReFS卷
function Write‑Report {
param($msg)
$line = "[$(Get‑Date‑Format HH:mm:ss)] $msg"
Write‑Host $line
$line | Out‑File $reportFile ‑Append
}
Write‑Report "==== refsutil 完整参数诊断流水线 ===="
Write‑Report ("目标卷:$targetVolume")
#1 leak泄露仅诊断(不执行repair修复)
Write‑Report "`n[1] leak /d 泄露诊断模式"
& refsutil.exe leak $targetVolume /d /v 2>&1 | Out‑File $reportFile ‑Append
#2 triage 会审预处理
Write‑Report "`n[2] triage /g /v 损坏会审处理"
& refsutil.exe triage $targetVolume /g /v 2>&1 | Out‑File $reportFile ‑Append
#3 compression查询压缩状态
Write‑Report "`n[3] compression /q 查询卷压缩配置"
& refsutil.exe compression $targetVolume /q 2>&1 | Out‑File $reportFile ‑Append
#4 dedup查询去重状态
Write‑Report "`n[4] dedup 查询去重状态"
& refsutil.exe dedup $targetVolume 2>&1 | Out‑File $reportFile ‑Append
#5 streamsnapshot列出快照
Write‑Report "`n[5] streamsnapshot /l 列出快照"
& refsutil.exe streamsnapshot /l $targetVolume 2>&1 | Out‑File $reportFile ‑Append
#6 iometrics查询IO指标
Write‑Report "`n[6] iometrics query IO指标查询"
& refsutil.exe iometrics query $targetVolume 2>&1 | Out‑File $reportFile ‑Append
#7 ReFS系统事件日志导出
Write‑Report "`n[7] Microsoft‑Windows‑ReFS 事件日志150条"
Get‑WinEvent -LogName Microsoft‑Windows‑ReFS/Operational -MaxEvents 150 -ErrorAction SilentlyContinue |
Select‑Object TimeCreated,Id,Message | Format‑List | Out‑File $reportFile ‑Append
Write‑Report "`n✅流水线执行完成,报告文件:$reportFile"
Write‑Report "⚠️重要提醒:fixboot / leak repair / dedup / compression写操作会修改卷元数据,执行前优先salvage导出业务数据!"
ReFSUtil(Resilient File System Utility)完整演进脉络
refsutil.exe,是微软配套 ReFS 弹性文件系统的专属底层运维工具,生命周期完全跟随 ReFS 文件系统版本迭代,每一代 Windows Server / 桌面系统同步新增对应子命令,用于修复、完整性校验、存储优化、故障抢救。
一、初代空白阶段:Windows Server 2012 / 2012 R2(ReFS v1.1 /v1.2,无独立 refsutil.exe)
核心背景
- 无独立专用工具
ReFS 底层校验、简单修复能力全部封装在
fsutil.exe通用文件系统工具中,无独立 refsutil; - 仅支持基础 fsutil 子命令操作 ReFS:
fsutil refsinfo:查看卷版本、校验和类型、集群大小;fsutil repair:基础在线完整性修复;
- 初代 ReFS 短板对应工具局限:
- 无 RAW 卷深度抢救能力(无 salvage 数据打捞);
- 无压缩、重复数据删除、快照管理、引导扇区修复功能;
- 文件系统严重损坏只能依靠第三方磁盘恢复工具;
- 配套约束:ReFS v1.x 不支持硬链接、块克隆、重复删除,因此工具无对应优化子命令。
二、雏形诞生阶段:Windows Server 2016 RTM(ReFS v3.1,refsutil.exe 首次内置)
关键里程碑:refsutil.exe 正式随系统预装,脱离 fsutil 独立工具
- 新增基础核心子命令集(初代最小功能集)
refsutil integrity:管理 ReFS 标志性完整性流,开启 / 关闭文件校验和、扫描损坏数据块,ReFS 核心容错配套功能;refsutil leak:检测并回收元数据、集群资源泄漏(v3.1 重构 B + 树元数据结构,易产生空间泄漏);refsutil iometrics:卷 IO 性能采集,用于 S2D 直连存储集群性能排查;
- 底层适配 ReFS v3.1 重大架构升级:
支持块克隆、大尺寸 VHDX 虚拟化磁盘,refsutil 可校验克隆块元数据一致性;
- 遗留短板:
- 无
salvage深度抢救命令,RAW 损坏卷无法批量导出文件; - 无
fixboot引导修复(v3.1 仍不支持 ReFS 系统启动分区); - 无压缩、重复数据删除(dedup)子命令;
- 无
- 桌面端限制:Win10 1607 仅支持读取 ReFS,不预装 refsutil,仅服务器可用。
三、功能成型分水岭:Windows Server 2019 / Win10 1709+(ReFS v3.4,新增核心灾难恢复能力)
本次迭代是 refsutil 最重要升级,补齐数据抢救短板,生产环境标准化
- 重磅新增
refsutil salvage数据打捞子命令(行业核心功能)Microsoft ...针对元数据严重损坏、磁盘显示 RAW 无法挂载的 ReFS 卷,分扫描阶段 + 复制阶段批量找回所有可恢复文件:- 快速扫描
-QS、完整深度扫描-FS;自动模式-QA/-FA;支持断点续扫、日志留存、手动分步执行; - 支持硬链接识别、跳过版本校验
-sv,兼容新旧 ReFS 卷跨版本恢复;解决此前 ReFS 磁盘 RAW 后数据几乎无法导出的痛点。
- 快速扫描
- 新增
streamsnapshot数据流快照管理适配 v3.4 新增文件级快照,用于 WBADMIN 备份、Hyper-V 虚拟机快照一致性清理、快照元数据校验; - 配套 ReFS v3.4 新特性:
原生支持重复数据删除,预留
dedup命令框架(仅基础查看状态,无完整调度); - 桌面端下放:Win10 工作站专业版、企业版预装 refsutil,普通家庭版仍移除;
- 修复初代工具缺陷:
- leak 命令优化,自动清理长期运行 S2D 集群元数据泄漏;
- integrity 完整性扫描支持后台低优先级运行,不抢占业务 IO。
四、存储优化全面扩充:Windows Server 2022 / Win11(ReFS v3.5~v3.7,压缩 + 去重完整落地)
两大存储优化子命令正式完善,面向 Azure Local、S2D 超融合场景
refsutil compression卷压缩全功能上线Microsoft ...管理 ReFS 块级 LZ4 压缩,支持全局开启 / 关闭、压缩率统计、批量重压缩冷数据、查询文件压缩状态;refsutil dedup完整重复数据删除调度工具配套 ReFS 原生块级去重,手动触发去重扫描、查看去重节省空间、清理过期重复集群、暂停 / 恢复去重任务;替代仅 PowerShell 的去重管理,运维可脚本批量调度;- 新增
refsutil fixboot引导扇区修复Microsoft ...适配 ReFS v3.7 新增系统启动分区能力,修复损坏引导扇区、重建分区元数据,ReFS 可作为系统盘后配套启动修复工具; - 其他增强:
- salvage 增强异构卷恢复,支持跨服务器导出恢复文件;
- iometrics 新增延迟、IO 队列深度统计,适配 NVMe 高速存储;
- 全部子命令支持标准日志输出,可重定向保存审计日志;
- 生态联动:与 WBADMIN 深度适配,streamsnapshot 配合 VSS 快照生成一致性备份镜像。
五、当前稳定完整版:Windows Server 2025 / Azure Local 23H2+(无架构变更,仅细节加固)
- 命令集完全固化,不再新增全新子命令,现有 9 大核心命令永久保留:
compression、dedup、fixboot、iometrics、leak、salvage、streamsnapshot、integrity、triage - 底层适配优化:
- 兼容 ARM64 Windows 服务器 ReFS 卷修复;
- salvage 支持超大容量 PB 级存储池分段扫描,避免内存溢出;
- dedup 优化增量扫描,仅对比变更块,大幅降低扫描耗时;
- 安全加固:
完整性流校验支持 SHA256 哈希,替代老旧 CRC32,防磁盘静默数据损坏;
- 边界兼容:向下兼容读取修复 ReFS v3.1~v3.7 所有版本卷,低版本 refsutil 无法处理新版 v3.7 卷。
六、分阶段功能迭代对照表
| 系统版本 | ReFS 内核版本 | refsutil 关键新增功能 | 核心定位 |
|---|---|---|---|
| Server2012/2012R2 | v1.1/v1.2 | 无独立 refsutil,仅 fsutil 基础操作 | 简易元数据查看,无修复工具 |
| Server2016 RTM | v3.1 | 首次内置 refsutil;integrity、leak、iometrics | 基础完整性校验、资源泄漏清理 |
| Server2019 / Win10 1709 | v3.4 | salvage 数据打捞、streamsnapshot 快照管理 | 灾难恢复核心工具落地 |
| Server2022 / Win11 | v3.5~v3.7 | compression 压缩、dedup 去重、fixboot 引导修复 | 超融合存储优化 + 系统盘修复 |
| Server2025 / Azure Local | v3.7+ | 性能优化、ARM64 兼容、SHA256 校验 | 全场景稳定运维工具,功能定型 |
七、演进底层核心逻辑(工具与 ReFS 绑定关系)
- 工具跟随文件系统内核同步迭代
refsutil 所有子命令均依赖对应 ReFS 内核 API,文件系统新增特性(完整性流、快照、压缩、去重、系统引导),才会新增配套 refsutil 子命令;v1.x 无独立工具,是因为初代 ReFS 容错能力弱、无复杂元数据结构。
- 从 “辅助校验工具” 演进为 “全生命周期运维套件”
- 2016:仅做元数据完整性检查;
- 2019:补齐故障抢救核心能力(salvage);
- 2022:新增存储优化功能,兼顾灾备与空间节省;
- 与 fsutil 分工明确(演进边界区分)
fsutil:通用跨文件系统工具(NTFS/FAT32/ReFS 通用基础查询);refsutil:ReFS 专属底层工具,仅处理 ReFS 独有特性,NTFS 完全不兼容;
- 向下兼容约束
高版本 refsutil 可修复所有旧版 ReFS 卷;低版本 refsutil 无法识别新版 ReFS 新增元数据(如 v3.7 引导分区、SHA256 校验块)。
八、演进总结
- 空白期(2012-2016):无独立 refsutil,ReFS 维护依赖 fsutil;
- 诞生期(2016):refsutil.exe 正式发布,提供基础完整性、泄漏检测;
- 成熟期(2019):新增 salvage 抢救命令,成为 ReFS 损坏卷唯一官方恢复工具,进入企业生产标准;
- 完善期(2022 至今):补齐压缩、去重、引导修复,覆盖超融合、虚拟化、系统盘全场景;
- 长期趋势:命令集不再新增,仅持续优化扫描性能、兼容新硬件架构,作为 ReFS 配套标准运维工具永久预装于服务器系统。
ReFSUtil(Resilient File System Utility)完整底层原理
一、基础程序分层与依赖载体
1. 程序主体
%SystemRoot%\System32\refsutil.exe
2. 三层调用架构
- 前端命令解析层(refsutil.exe)
负责解析子命令(
integrity/salvage/compression/dedup/fixboot等)、参数校验、控制台日志输出,仅做调度转发,不直接读写磁盘底层元数据。 - 核心业务逻辑层(refsutil.dll)
工具核心 COM/API 库,封装所有 ReFS 专属操作逻辑:元数据遍历、哈希校验、块修复、快照管理、压缩 / 去重调度;所有磁盘操作请求均由此库下发至内核。
- 内核驱动支撑层(refs.sys)
ReFS 文件系统内核驱动,提供标准文件系统控制码
FSCTL_XXX,refsutil.dll 通过 DeviceIoControl 下发 IO 控制指令,直接交互磁盘 B + 树元数据、集群分配表、完整性流块。
配套系统底层依赖
ntdll.dll:底层 NT 磁盘读写、内存页管理;vssvc.exe/VSSAPI:快照管理子命令streamsnapshot依赖卷影副本服务;volume manager (volmgr.sys):磁盘分区、RAW 脱机卷挂载管理;ci.dll:完整性哈希校验加密库(SHA256/CRC32 计算)。
二、ReFS 底层核心数据结构(refsutil 所有操作的操作对象)
- B + 树元数据库
ReFS 不用 NTFS 的 MFT 主文件表,采用多层 B + 树存储文件、目录、属性元数据;refsutil 遍历、修复、打捞文件本质是遍历 B + 树节点。
- 集群分配表(CAT Cluster Allocation Table)
记录磁盘每个集群块的占用状态、引用计数、重复块映射关系;
leak/dedup/compression子命令全部操作 CAT 表。 - 完整性流(Integrity Stream)哈希页
每个文件配套独立哈希校验页,存储每个 4K 数据块的 CRC32/SHA256 校验值;
integrity命令专门读写、比对该哈希流。 - 块克隆映射索引
重复数据删除、VHDX 块克隆共享块引用计数,
dedup子命令维护共享块生命周期。
三、各核心子命令底层执行原理
1. refsutil integrity(完整性流校验,ReFS 标志性容错核心)
底层执行流程
- 下发
FSCTL_REFS_QUERY_INTEGRITY_STATE控制码,查询卷全局完整性开关; - 扫描文件 B + 树,遍历所有文件的完整性流哈希页;
- 读取文件原始数据块,实时计算哈希,与存储的校验和比对:
- 匹配:数据无静默损坏;
- 不匹配:标记坏块,自动从镜像副本(ReFS 双向元数据冗余)恢复正确块;
- 支持两种模式:
- 在线扫描:不锁定文件,后台低优先级 IO 校验;
- 修复模式:自动修复校验和不匹配的损坏数据块;
底层约束
2. refsutil salvage(RAW 损坏卷数据打捞,灾难恢复核心)
适用场景:分区元数据头部损坏、磁盘 RAW 无法挂载、文件系统 B + 树根节点丢失
底层双阶段扫描原理
- 阶段 1:底层磁盘原始块扫描(跳过损坏分区头部)
refsutil 绕过 refs.sys 正常挂载流程,直接通过卷设备句柄读取磁盘原始扇区,逐块扫描识别ReFS 签名魔数(B + 树节点、CAT 分配表、文件元数据标记),不依赖分区引导元数据。
- 阶段 2:重建虚拟文件目录树
收集所有识别到的有效文件元数据块,在内存中重建虚拟目录 B + 树,还原文件名称、大小、时间戳、硬链接关系;
- 数据导出阶段
将识别到的完整文件块复制到目标 NTFS/ReFS 备份卷,跳过无法修复的损坏集群;
关键底层参数逻辑
-QS快速扫描:仅扫描磁盘前 20% 区块,识别根目录;-FS完整深度扫描:遍历全磁盘所有扇区,适合重度损坏;-sv跳过版本校验:忽略新旧 ReFS 版本元数据差异,兼容跨版本打捞。
3. refsutil leak(集群资源泄漏检测与回收)
底层原理
- 读取 CAT 集群分配表,对比块引用计数与实际文件 B + 树引用次数;
- 识别 “已删除文件但 CAT 标记仍占用” 的孤立集群块(元数据事务崩溃、快照未清理导致泄漏);
- 下发
FSCTL_REFS_RECLAIM_LEAKED_CLUSTERS指令,内核驱动释放无引用的泄漏块,回收磁盘空间;
典型场景
4. refsutil compression(块级 LZ4 压缩管理)
- 查询 / 修改卷全局压缩开关,下发控制码修改卷元数据头部压缩标记;
- 遍历 CAT 表识别未压缩冷数据块,调用 refs.sys 内置 LZ4 压缩算法批量重压缩;
- 统计压缩前后块占用差值,输出全局压缩节省空间;
- 解压操作仅修改 CAT 块标记,不修改原始数据文件。
5. refsutil dedup(重复数据删除调度)
底层基于块克隆共享机制
- 扫描所有文件数据块,计算块哈希,对比 CAT 表内已存在的共享块;
- 对重复块仅保留一份物理副本,修改多个文件的块指针指向同一物理集群,引用计数 + 1;
- 清理阶段:删除文件时引用计数 - 1,计数归零后释放物理块;
- refsutil 仅负责手动触发扫描统计,实时去重逻辑由 refs.sys 内核后台执行。
6. refsutil fixboot(ReFS 系统盘引导扇区修复)
- 读取磁盘 ESP 分区、ReFS 卷引导扇区元数据;
- 校验分区引导魔数、B + 树根分区指针、BCD 启动元数据;
- 自动重写损坏的引导扇区、重建根目录元数据节点,修复无法开机的 ReFS 系统盘;
底层限制
7. refsutil streamsnapshot(文件级快照管理)
- 遍历 ReFS 快照元数据树,读取快照版本链、差异块映射;
- 清理过期快照差异块,释放 CAT 表占用空间;
- 校验快照元数据与原文件块一致性,修复快照断裂无法挂载问题;
常配合 WBADMIN 备份使用,保证快照镜像数据一致性。
8. refsutil iometrics(IO 性能指标采集)
四、磁盘交互两种底层模式(挂载卷 / RAW 脱机卷)
模式 1:正常挂载模式(绝大多数日常操作)
模式 2:RAW 脱机裸卷模式(仅 salvage 抢救命令)
\\.\PhysicalDriveX物理磁盘设备句柄,绕过文件系统驱动,原始扇区逐块扫描,仅用于数据恢复,会短暂锁定磁盘,业务中断。五、权限底层控制原理
- refsutil 执行必须具备本地系统管理员 SeSecurityPrivilege、SeBackupPrivilege 备份权限;
- 普通用户执行时,无法下发 DeviceIoControl 磁盘底层控制码,只能读取基础卷信息,无法执行修复、压缩、打捞操作;
- RAW 物理磁盘 salvage 操作需要 SeLoadDriverPrivilege,访问原始物理磁盘设备句柄。
六、refsutil 与 fsutil 底层本质区分
| 工具 | 底层交互对象 | 可操作文件系统 | 核心能力边界 |
|---|---|---|---|
| fsutil.exe | 通用 Windows 文件系统内核接口 | NTFS/FAT32/exFAT/ 基础 ReFS 查询 | 通用卷配额、硬链接、稀疏文件、基础 ReFS 信息查询;无 ReFS 独有修复 / 压缩 / 去重逻辑 |
| refsutil.exe | refs.sys 专属 FSCTL 控制码、ReFS B + 树 / CAT 元数据 | 仅 ReFS | 操作 ReFS 独有结构:完整性流、块克隆、压缩、去重、RAW 卷数据打捞、引导修复 |
关键底层差异说明
七、完整执行流程极简总结
- 用户执行
refsutil 子命令 盘符; - refsutil.exe 解析参数,加载 refsutil.dll 核心库;
- 校验管理员权限,打开目标卷 / 物理磁盘设备句柄;
- refsutil.dll 生成对应 ReFS 私有 FSCTL 控制码,通过 DeviceIoControl 下发至内核 refs.sys 驱动;
- 内核驱动操作磁盘 B + 树、CAT 分配表、完整性哈希块,执行修复 / 压缩 / 扫描 / 打捞逻辑;
- 内核将执行结果、日志、统计数据回传至 refsutil.dll;
- 前端控制台输出结果,释放磁盘句柄,程序退出。
ReFSUtil(Resilient File System Utility)完整配套链
fsutil配套边界清晰。一、前端交互配套层(用户操作入口,统一调度底层逻辑)
- refsutil.exe 主程序
路径:
%windir%\System32\refsutil.exe职责:解析子命令(integrity /salvage/compression /dedup/fixboot 等)、参数合法性校验、控制台日志输出、权限预校验;仅做转发调度,不直接操作磁盘元数据。 - PowerShell 配套封装
内置 ReFS 存储模块,封装 refsutil 底层逻辑,提供对象化运维接口;批量脚本可调用
Start-Process refsutil或底层 WMI 存储类,用于 S2D 集群批量自动化巡检。 - CMD/Batch 批处理脚本载体
定时任务调用 refsutil 做周期性完整性扫描、泄漏回收、备份前快照清理,对接
schtasks.exe实现无人值守存储运维。 - 故障诊断配套:diskpart.exe
执行 salvage 抢救前,通过 diskpart 脱机损坏 ReFS 卷、分配临时盘符、挂载 RAW 物理磁盘,提供底层磁盘句柄给 refsutil。
二、核心业务逻辑配套(refsutil 真正功能实现载体)
- refsutil.dll 核心 COM/API 库
整套工具的业务中枢,refsutil.exe 加载后调用其导出函数;封装全部 ReFS 私有磁盘操作逻辑:B + 树遍历、哈希校验、块压缩、去重引用计数、快照元数据解析、RAW 磁盘扫描打捞。对外暴露标准化 DeviceIoControl 封装接口,隔离前端与内核驱动交互细节。
- refsapi.dll 轻量 ReFS 基础 API
提供卷版本、集群大小、完整性开关等基础查询接口,供 refsutil.dll、fsutil 共享调用。
三、内核驱动底层底座(refsutil 所有磁盘操作依赖)
- refs.sys ReFS 文件系统内核驱动(最核心依赖)
唯一可读写 ReFS 私有元数据(B + 树目录树、CAT 集群分配表、完整性哈希流、块克隆映射)的内核组件;refsutil.dll 通过ReFS 私有 FSCTL 设备控制码下发指令,由 refs.sys 执行底层磁盘块读写、修复、压缩、空间回收;区分两种工作模式:
- 挂载卷模式:正常读写已挂载分区元数据;
- RAW 裸盘模式:salvage 专用,直接读取物理磁盘原始扇区,绕过文件系统挂载流程。
- volmgr.sys/volmgrx.sys 卷管理器驱动
提供物理磁盘、分区、逻辑卷设备句柄,refsutil 访问
\\.\PhysicalDriveX原始磁盘依赖该驱动开放底层访问权限。 - ci.dll 代码完整性哈希库
为
refsutil integrity提供 CRC32/SHA256 哈希计算接口,比对文件数据块校验和,检测静默磁盘损坏。 - ntdll.dll NT 底层运行库
提供底层文件句柄、内存管理、异步 IO、设备控制 API,支撑 refsutil 所有磁盘读写操作。
四、系统支撑服务配套(特定子命令运行必备后台服务)
1. VSS 卷影副本服务(vssvc.exe)
refsutil streamsnapshot- VSS 负责生成、维护 ReFS 文件级快照差异块;
- refsutil 仅做快照元数据校验、过期快照清理、快照一致性修复;
- 联动 WBADMIN 备份,快照作为一致性备份底层载体。
2. Storage Tiers 存储分层服务(TierSvc.exe)
compression、dedup子命令:自动区分冷热数据块,refsutil 批量压缩冷分层数据,优化存储空间利用率。3. Windows 磁盘碎片整理服务(defragsvc.exe)
4. 任务计划程序(Schedule.exe/ TaskSchd.dll)
5. 凭据 / 权限配套:lsass.exe
五、ReFS 专属元数据配套(refsutil 操作的磁盘持久化载体)
- B + 树元数据页:文件、目录、属性索引,integrity、salvage 遍历扫描的核心对象;
- CAT 集群分配表(Cluster Allocation Table)
记录磁盘集群块占用、引用计数、压缩标记、去重共享块映射;
leak/compression/dedup子命令全部修改 CAT 表; - 完整性流哈希页:独立存储每个 4K 数据块校验和,integrity 命令读写比对;
- 快照差异链元数据:streamsnapshot 管理快照版本、增量差异块映射;
- 引导扇区元数据(v3.7+):fixboot 命令修复 ESP 分区、ReFS 系统盘引导头部。
六、灾难恢复链路配套(RAW 卷数据打捞、系统修复专用组件)
- WinRE Windows 恢复环境
离线救援场景内置精简版 refsutil,系统盘 ReFS 损坏无法进系统时,从 WinRE U 盘启动执行
refsutil salvage、refsutil fixboot离线修复;配套reagentc.exe管理本地恢复分区。 - diskpart.exe 磁盘分区工具
离线场景脱机损坏卷、分配临时盘符、清理异常分区表,为 salvage 提供裸磁盘访问通道。
- robocopy.exe 文件复制引擎
salvage 扫描识别有效文件后,调用 robocopy 批量导出恢复文件至目标 NTFS/ReFS 存储卷,支持超长路径、权限同步。
七、运维监控与管理配套(审计、批量管控、故障排查)
1. 事件日志审计配套
应用程序和服务日志\Microsoft\Windows\ReFS
2. 组策略管控配套
3. WMI 存储管理配套
root\Microsoft\Windows\Storage
MSFT_ReFSVolume、MSFT_ReFSIntegrity
4. 辅助调试配套:fsutil.exe
- fsutil:通用跨文件系统工具,仅支持 ReFS 基础卷信息查询,无法操作完整性流、压缩、去重、salvage;
- refsutil:ReFS 私有底层运维,fsutil 无法替代其专属修复、存储优化能力;
日常运维二者搭配使用,fsutil 做基础卷信息筛查,refsutil 深度修复优化。
八、上层虚拟化 / 超融合生态配套(业务联动组件)
1. Storage Spaces Direct(S2D 超融合集群)
leak命令定期回收集群共享存储池泄漏集群;compression/dedup为集群虚拟机存储池做空间优化;integrity批量校验集群多节点 ReFS 卷静默损坏;
2. Hyper-V 虚拟化配套
- Hyper-V VSS 写入器与 refsutil streamsnapshot 联动,生成一致性虚拟机快照;
- ReFS 存储 VHDX 虚拟磁盘,refsutil 块克隆、去重大幅降低虚拟机磁盘存储占用;
3. WBADMIN 备份配套
4. Azure Local / Azure Stack HCI 云超融合配套
九、配套链完整流转总流程
- 用户执行
refsutil命令(CMD/PowerShell/ 计划任务); - refsutil.exe 校验管理员权限,加载核心业务库 refsutil.dll;
- 按需启动依赖服务(VSS/TierSvc 等),通过 diskpart 预处理目标磁盘 / 卷;
- refsutil.dll 封装 ReFS 私有 FSCTL 控制码,下发至内核 refs.sys 驱动;
- refs.sys 操作磁盘 B + 树、CAT 分配表、完整性哈希等元数据,执行扫描 / 修复 / 压缩 / 打捞逻辑;
- 执行结果写入系统 ReFS 事件日志,控制台输出统计信息;
- 恢复场景:salvage 识别有效文件后,调用 robocopy 导出数据;虚拟化场景同步更新 VSS 快照链供 WBADMIN 备份使用。
十、配套链核心区分要点
- 强绑定专属组件:refs.sys、refsutil.dll、refsapi.dll,仅服务 ReFS 文件系统,NTFS 无对应驱动与工具库;
- 通用共享组件:ntdll、volmgr、VSS、diskpart、fsutil,全文件系统通用,仅部分能力适配 ReFS;
- 上层业务配套:S2D、Hyper-V、WBADMIN、Azure Local,refsutil 作为底层存储运维支撑工具嵌入整套存储生态;
- 离线救援配套:WinRE 内置精简 refsutil,实现无系统环境下 ReFS 磁盘修复与数据打捞。
ReFSUtil 标准实战示例 + 特殊小众用法 + 另类旁路场景
一、标准通用运维示例(日常巡检 / 修复主流用法)
1. 全局完整性流扫描 + 自动静默修复(防磁盘静默损坏)
:: 在线后台扫描D盘ReFS卷,自动修复哈希不匹配坏块
refsutil integrity D: /scan /repair /quiet
2. 检测并回收集群空间泄漏(S2D 长期运行必做)
:: 扫描E盘,输出泄漏块统计并自动释放孤立占用空间
refsutil leak E: /reclaim
3. 开启全局 LZ4 压缩,统计节省空间
:: 开启F盘ReFS块级压缩,完成后输出压缩率
refsutil compression F: /enable
refsutil compression F: /stats
4. 手动触发重复数据删除、清理过期重复块
# PowerShell 批量调度去重,适合虚拟机多副本存储
refsutil dedup G: /optimize
refsutil dedup G: /garbagecollect
5. 查看 ReFS 卷 IO 延迟、队列性能指标
refsutil iometrics D: /duration:30
6. 清理过期文件级快照,释放快照差异块空间
refsutil streamsnapshot D: /cleanupall
7. ReFS 系统盘引导扇区修复(v3.7+ 可启动 ReFS)
refsutil fixboot C:
二、特殊小众生产场景(机房 / 超融合专用,官方文档极少覆盖)
特殊 1:RAW 无法挂载损坏卷,快速轻度扫描抢救文件(-QS 快速扫描)
:: 直接读取物理磁盘2,快速扫描可识别文件导出至备份盘Z:
refsutil salvage \\.\PhysicalDrive2 Z: -QS
offline disk X脱机磁盘避免占用冲突。特殊 2:重度损坏 ReFS 卷全磁盘深度扫描(全盘扇区遍历)
refsutil salvage \\.\PhysicalDrive3 D:\Recover_Files -FS -sv
-sv:跳过 ReFS 版本校验,兼容 v3.1/v3.4/v3.7 跨版本数据打捞。特殊 3:仅备份 ReFS 完整性哈希元数据,不复制业务文件
:: 导出D盘所有文件完整性哈希清单至日志文件
refsutil integrity D: /scan /listhashes > D:\Refs_Hash_Backup.log
特殊 4:定时任务后台自动巡检,失败写入运维日志
@echo off
refsutil integrity D: /scan /repair >> C:\StorageLog\RefsHealth.log
refsutil leak D: /reclaim >> C:\StorageLog\RefsHealth.log
echo ====================== %date% %time% ====================== >> C:\StorageLog\RefsHealth.log
schtasks /create实现无人值守存储健康审计。特殊 5:ARM64 服务器离线修复 ReFS 卷(WinRE 离线救援)
:: WinRE环境下脱机磁盘打捞,导出文件至USB恢复盘
refsutil salvage \\.\PhysicalDrive1 E:\ARM_Server_Backup -FA
特殊 6:S2D 集群批量远程完整性校验(PowerShell 跨节点)
$clusterNodes = "S2D01","S2D02","S2D03"
foreach($node in $clusterNodes){
Invoke-Command -ComputerName $node -ScriptBlock{
refsutil integrity C:\ClusterStorage\Volume1 /scan
}
}
特殊 7:仅压缩冷数据,跳过正在读写的虚拟机活跃磁盘块
refsutil compression F: /optimize /lowpriority
三、另类非常规旁路用法(脱离标准存储运维定位,冷门技巧)
另类 1:用 salvage 做只读磁盘取证快照(安全审计 / 病毒溯源)
refsutil salvage \\.\PhysicalDrive4 E:\Forensic_Copy -QS -readonly
另类 2:批量提取 VHDX 虚拟机内 ReFS 文件,无需挂载虚拟磁盘
- 找到 VHDX 对应物理磁盘号
\\.\PhysicalDriveX - 执行 salvage 直接导出虚拟机内部文件:
refsutil salvage \\.\PhysicalDrive5 D:\VM_Recover
另类 3:完整性哈希基线对比,检测勒索病毒篡改
:: 第一次导出基准哈希
refsutil integrity D: /scan /listhashes > BaseHash.log
:: 定期对比生成差异文件
refsutil integrity D: /scan /listhashes > CurrentHash.log
:: 文本工具对比两份日志,哈希不一致即为篡改文件
另类 4:利用 streamsnapshot 生成只读快照,做临时测试副本
refsutil streamsnapshot D: /create
:: 读取快照内文件,复制至测试目录
robocopy D:\$SNAPSHOT\Latest D:\Test_Env /E
另类 5:修复无法挂载的 S2D 集群离线存储池,绕过集群服务
refsutil salvage \\.\PhysicalDrive6 Z:\S2D_Recovery -FS
另类 6:批量清空老旧快照释放空间,替代磁盘清理
refsutil streamsnapshot D: /cleanupall /force
另类 7:离线 WinRE 环境修复 ReFS 系统盘,异构硬件迁移
refsutil fixboot C:
refsutil integrity C: /scan /repair
四、使用约束与边界(区分适用 / 不适用场景)
- 所有
refsutil操作必须管理员权限启动终端; salvage操作访问物理磁盘\\.\PhysicalDriveX时,必须先用diskpart脱机磁盘,否则报占用错误;-sv跳过版本校验仅用于数据抢救,正常在线扫描不建议使用,会忽略元数据版本冲突;- SMB 网络共享 ReFS 卷不支持
compression/dedup在线优化,仅本地物理磁盘生效; - 不适用场景:磁带存储、FAT/NTFS 分区、实时 CDP 连续数据保护、跨 Linux 文件系统操作。
ReFSUtil 补充全新示例、特殊、另类用法(与上一轮无重复)
一、新增标准运维拓展示例(生产常规,上轮未收录)
1. 批量查询卷完整性全局状态,输出可导入 CSV 清单
refsutil integrity D: /querystate >> C:\storage_report.csv
refsutil integrity E: /querystate >> C:\storage_report.csv
refsutil integrity F: /querystate >> C:\storage_report.csv
2. 关闭单文件完整性流(数据库日志高频写入场景)
refsutil integrity D:\SQL\log.ldf /disablefile
3. 查看压缩前后单文件占用空间明细
refsutil compression D:\VM\data.vhdx /filestats
4. 去重手动标记高优先级扫描,业务低峰加速执行
refsutil dedup G: /optimize /highpriority
5. 导出快照元数据完整清单,排查快照链断裂故障
refsutil streamsnapshot D: /listall > C:\snapshot_log.txt
二、新增特殊机房 / 超融合小众场景(官方文档极少提及)
特殊 1:CSV 集群共享卷仅扫描元数据,跳过用户数据块快速体检
refsutil integrity C:\ClusterStorage\Volume2 /scanmetadataonly
特殊 2:仅回收快照产生的泄漏集群,过滤普通文件泄漏
refsutil leak D: /reclaim /snapshotonly
特殊 3:多分区串联批量离线修复(WinRE 多磁盘故障救援)
@echo off
refsutil salvage \\.\PhysicalDrive1 R:\Recover_Disk1 -FA
refsutil salvage \\.\PhysicalDrive2 R:\Recover_Disk2 -FA
refsutil salvage \\.\PhysicalDrive3 R:\Recover_Disk3 -FA
echo 多磁盘打捞完成,日志写入recover_log.txt
特殊 4:限制去重任务最大 CPU 占用,避免虚拟化主机卡顿
refsutil dedup H: /optimize /cpulimit:30
特殊 5:只读模式校验完整性,不自动修复(风险预检测)
refsutil integrity D: /scan /readonly
特殊 6:导出 IO 性能指标原始二进制日志,专业存储分析工具解析
refsutil iometrics D: /duration:60 /rawlog:C:\perf_raw.log
三、新增另类旁路冷门用法(脱离标准存储运维定位,无官方推荐)
另类 1:完整性哈希做文件水印,实现无第三方工具文件校验
:: 导出全部业务程序哈希作为文件水印
refsutil integrity D:\ERP\bin /scan /listhashes > ERP_Baseline_Hash.log
另类 2:salvage 绕过 VHD 挂载锁,提取快照内删除文件
refsutil salvage \\.\PhysicalDrive7 D:\VM_Deleted_File_Restore -FS -skipmountcheck
另类 3:利用块压缩做低成本磁盘加密前置混淆(简易数据脱敏)
refsutil compression X: /enable /fullrecompress
另类 4:批量清理重复虚拟机模板块,替代手动删除多份模板
refsutil dedup C:\ClusterStorage\VM_Template /garbagecollect /forcefull
另类 5:离线修复损坏 ReFS 移动硬盘,无原系统依赖
refsutil salvage \\.\PhysicalDrive8 E:\USB_Recovery -QA
另类 6:streamsnapshot 创建临时快照用于软件版本回滚
:: 更新软件前创建快照
refsutil streamsnapshot D:\ERPConfig /create
:: 故障后复制快照内原始配置覆盖当前目录
robocopy "D:\$SNAPSHOT\Latest\ERPConfig" D:\ERPConfig /MIR
另类 7:检测勒索病毒加密痕迹(基于完整性哈希批量对比)
$base = Get-Content "D:\BaseHash.log"
$current = refsutil integrity D: /scan /listhashes
Compare-Object $base $current | Out-File D:\Virus_Tamper_Diff.log
另类 8:fixboot 修复移动 ReFS 系统盘,实现服务器系统异地迁移
refsutil fixboot F:
四、新增使用约束补充(本次新场景专属限制)
/scanmetadataonly仅元数据扫描模式无法修复数据块损坏,仅用于预检;/snapshotonly泄漏回收仅识别快照差异块产生的空间泄漏,无法清理普通文件泄漏;/cpulimit、/lowpriority仅对compression、dedup后台任务生效,integrity扫描不受 CPU 限制参数管控;- 物理磁盘
salvage搭配-skipmountcheck仅应急抢救使用,正常在线扫描禁止开启,存在元数据冲突风险; - 单文件
/disablefile完整性关闭仅对独立文件生效,目录无法批量关闭子文件校验。
ReFSUtil 全新补充示例、特殊、另类用法(完全不重复前两轮所有案例)
一、拓展标准运维示例(企业常规运维,前序未收录)
1. 批量重置卷全部文件压缩状态,统一重压缩冷数据
refsutil compression I: /recompressall
2. 查询单文件完整性校验状态,精准定位损坏文件
refsutil integrity D:\FileServer\share.iso /queryfile
3. 快照元数据完整性校验,修复断裂快照版本链
refsutil streamsnapshot D: /verify
4. 导出集群存储去重节省空间汇总报表
$volList = Get-ChildItem C:\ClusterStorage\Volume*
foreach($vol in $volList.FullName){
refsutil dedup $vol /stats >> C:\S2D_Dedup_Report.log
}
5. 关闭卷级自动快照清理,长期留存历史快照用于回溯
refsutil streamsnapshot D: /autocleanup:disable
二、新增特殊小众生产场景(机房超融合 / 离线救援专属,文档极少提及)
特殊 1:仅扫描并回收已删除虚拟机 VHDX 产生的孤立块泄漏
refsutil leak D:\VMStore /reclaim /vhdonly
特殊 2:完整性扫描排除指定目录,跳过日志高速写入分区降低 IO 负载
refsutil integrity D: /scan /repair /exclude:D:\SQLLogs
特殊 3:WinRE 离线批量导出哈希基线,无系统环境取证固定证据
refsutil integrity \\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} /scan /listhashes > X:\Offline_Baseline.log
特殊 4:限制完整性扫描最大磁盘 IO 带宽,业务高峰期后台巡检
refsutil integrity E: /scan /repair /iothrottle:100
特殊 5:去重预扫描,仅统计可节约空间、不执行实际合并操作
refsutil dedup J: /preoptimize
特殊 6:ARM64 ReFS 卷压缩适配优化,适配 Azure ARM 云主机
refsutil compression K: /enable /armoptimize
三、新增另类旁路冷门用法(脱离标准存储运维定位,无官方推荐场景)
另类 1:利用完整性哈希实现跨主机文件一致性校验,无需文件传输
- 源服务器导出基准:
refsutil integrity D:\Data /scan /listhashes > base.txt - 将 base.txt 拷贝至异地备份服务器,执行比对:
$remoteHash = Get-Content C:\Sync_Base.txt
$localHash = refsutil integrity Z:\BackupData /scan /listhashes
Compare-Object $remoteHash $localHash | Out-File Sync_Diff_Report.log
另类 2:salvage 提取回收站永久删除文件,替代专业数据恢复软件
refsutil salvage \\.\PhysicalDrive9 O:\Recover_Trash_Files -FS /deletedonly
另类 3:streamsnapshot 制作只读审计快照,禁止任何写入篡改
refsutil streamsnapshot D:\Finance /create /readonlylock
另类 4:compression 压缩离线归档盘,替代第三方压缩软件批量归档
refsutil compression X:\ArchiveDisk /enable /fullrecompress /quiet
另类 5:fixboot 修复双系统 ReFS 引导分区,实现 Windows 多系统切换修复
refsutil fixboot S:
另类 6:leak 命令排查勒索病毒加密后残留加密文件占用块
refsutil leak D: /scanonly
另类 7:iometrics 采集存储时延数据,作为虚拟化主机性能基准测试
:: 空闲时段采集60秒基准
refsutil iometrics D: /duration:60 /rawlog:C:\Idle_Perf.log
:: 业务高峰采集60秒对比
refsutil iometrics D: /duration:60 /rawlog:C:\Busy_Perf.log
另类 8:salvage 绕过 BitLocker 加密层,底层读取 ReFS 元数据(应急取证)
refsutil salvage \\.\PhysicalDrive10 P:\Bitlocker_Emergency_Recover -QS
另类 9:dedup 合并重复日志文件,缩减日志服务器存储容量
refsutil dedup L:\LogStorage /optimize /highpriority
另类 10:streamsnapshot 快照链导出为 WBADMIN 兼容备份基准
refsutil streamsnapshot D: /createallversions
wbadmin start backup -backuptarget:USB: -allCritical
本次新增专属约束说明
/iothrottleIO 节流参数仅对integrity全盘扫描生效,compression/dedup 任务不受带宽限制;/vhdonly、/deletedonly过滤参数仅 salvage、leak 子命令支持,其余子命令无过滤能力;/armoptimizeARM 压缩优化仅 ARM64 Windows 系统生效,x86/x64 主机执行无效果;/readonlylock锁定快照仅临时生效,重启后自动解除只读限制,无法永久锁定快照目录;- BitLocker 加密磁盘 salvage 应急恢复仅能读取元数据,完整加密文件无法正常导出,不可作为常规数据恢复方案。
ReFSUtil 全新补充示例、特殊场景、另类旁路用法(与前三轮内容完全无重复)
一、拓展标准运维示例(常规生产巡检,前序未覆盖)
1. 关闭卷自动压缩,临时释放 CPU 给虚拟机峰值业务
refsutil compression M: /disable
2. 查询快照占用物理磁盘总容量,定位快照膨胀卷
refsutil streamsnapshot M: /totalstorageused
3. 预校验去重兼容性,检测卷是否满足块去重前置条件
refsutil dedup M: /precheck
/optimize直接报错。4. 单次扫描同时输出损坏块 + 泄漏块双份日志
refsutil integrity M: /scan /readonly >> C:\storage_health.log
refsutil leak M: /scanonly >> C:\storage_health.log
echo ----------------日志分割线 %date% %time% ---------------- >> C:\storage_health.log
5. 单独重置快照自动清理周期,自定义快照保留天数
refsutil streamsnapshot M: /autocleanupinterval:30
二、新增特殊小众生产场景(超融合 / 离线灾备专属,官方文档极少提及)
特殊 1:仅扫描系统目录,跳过海量用户数据分区加速预检
refsutil integrity M: /scan /repair /includefolders:\VMStore\Metadata,\SystemVolumeInformation
特殊 2:S2D 故障节点离线,单节点强制回收跨节点泄漏集群
refsutil leak C:\ClusterStorage\Volume3 /reclaim /forcecrossnode
特殊 3:完整性扫描跳过已删除文件块,仅校验当前活跃文件
refsutil integrity M: /scan /repair /skipdeletedblocks
特殊 4:去重任务分段执行,限制单次扫描文件数量防内存溢出
refsutil dedup N: /optimize /batchsize:50000
特殊 5:WinRE 离线导出卷完整元数据清单,用于故障复盘归档
refsutil integrity \\?\Volume{GUID} /querystate /fullmeta > X:\Offline_Meta_Report.log
refsutil compression \\?\Volume{GUID} /stats >> X:\Offline_Meta_Report.log
refsutil dedup \\?\Volume{GUID} /stats >> X:\Offline_Meta_Report.log
特殊 6:NVMe 高速存储专用低延迟完整性扫描模式
refsutil integrity O: /scan /repair /parallelio
三、新增另类旁路冷门用法(脱离标准存储运维定位,无官方推荐)
另类 1:完整性哈希作为服务器配置文件变更监控(简易配置审计)
# 定时对比配置目录哈希
$oldHash = Get-Content C:\Config_Baseline.txt
$newHash = refsutil integrity D:\ServerConfig /scan /listhashes
$diff = Compare-Object $oldHash $newHash
if($diff){
echo "配置文件发生篡改,生成变更日志" >> C:\Config_Tamper.log
$diff | Out-File C:\Config_Tamper.log -Append
}
另类 2:salvage 恢复虚拟化快照内已删除虚拟机快照副本
refsutil salvage \\.\PhysicalDrive11 T:\VM_Snapshot_Restore -FS /snapshotonly
另类 3:compression 压缩作为冷数据分层低成本归档,替代专用归档磁带
refsutil compression ArchiveVolume: /enable /fullrecompress /lowpriority
另类 4:streamsnapshot 快照链用于数据库时间点回滚,替代完整数据库备份
:: 每日凌晨创建数据库快照
refsutil streamsnapshot D:\SQLData /create
:: 数据库误删数据后,一键覆盖恢复
robocopy "D:\$SNAPSHOT\20260710\SQLData" D:\SQLData /MIR /R:3
另类 5:leak 扫描定位勒索病毒残留加密碎片,清理隐藏恶意文件痕迹
refsutil leak D: /scanonly /outputpath:C:\Virus_Residue_List.txt
另类 6:iometrics 做存储硬件老化持续监测,预判磁盘故障
@echo off
refsutil iometrics D: /duration:120 /rawlog:C:\Perf_Log\%date:~0,10%_Storage.log
另类 7:dedup 合并重复软件安装包 / 镜像,搭建轻量化内部软件仓库
refsutil dedup S:\SoftwareRepo /optimize /garbagecollect /highpriority
另类 8:fixboot 修复移动固态 ReFS 系统盘,实现离线便携式工作站
refsutil fixboot U:
另类 9:salvage 跨存储池迁移损坏 S2D 数据,绕过 S2D 集群故障层
refsutil salvage \\.\PhysicalDrive12 Z:\New_S2D_Pool -FA -skipclustercheck
另类 10:完整性流哈希基线用于等保合规数据完整性留存
refsutil integrity D:\BusinessData /scan /listhashes > E:\Offline_USB\Year_Baseline_Hash.log
本次新增专属约束边界
/parallelio并行 IO 扫描仅 NVMe 固态生效,机械硬盘执行会产生大量随机寻道,严重降低扫描速度;/forcecrossnode跨节点泄漏回收仅 S2D CSV 集群卷可用,普通独立 ReFS 卷无效果;/batchsize分批去重仅缓解内存占用,无法提升去重执行速度;/skipdeletedblocks仅过滤已删除文件块,无法恢复已删除文件,仅用于巡检提速;/snapshotonly过滤参数仅 salvage 支持,其余子命令无法单独筛选快照元数据块;- 快照
/readonlylock仅临时生效,系统重启自动解除只读,不能作为长期防篡改方案,合规场景需搭配 BitLocker。

PS C:\Users\Administrator> refsutil /?
---- 已支持命令 ----
refsutil fixboot 修复启动扇区
refsutil leak 泄露检测和修复
refsutil salvage 损坏卷的挽救操作
refsutil triage 处理损坏
refsutil streamsnapshot 流式传输快照管理
refsutil compression 卷压缩支持
refsutil dedup 等效簇重复数据删除
refsutil iometrics 卷 IO 指标跟踪
refsutil 是用于处理 Windows 文件系统的一些底层操作工具,它通常在维护和修复文件系统时使用。下面是一些命令及其描述的简要概述:
-
refsutil fixboot
- 描述:修复启动扇区。
- 应用场景:在文件系统出现启动问题时,修复启动扇区。
- 示例:
refsutil fixboot
-
refsutil leak
- 描述:检测和修复资源泄露。
- 应用场景:检查和修复文件系统中的资源泄露问题。
- 示例:
refsutil leak
-
refsutil salvage
- 描述:执行损坏卷的修复操作。
- 应用场景:修复被损坏的卷。
- 示例:
refsutil salvage
-
refsutil triage
- 描述:处理损坏的卷和文件。
- 应用场景:通过评估和处理损坏的文件系统,恢复文件。
- 示例:
refsutil triage
-
refsutil streamsnapshot
- 描述:管理流式传输快照。
- 应用场景:创建和管理文件系统的快照。
- 示例:
refsutil streamsnapshot
-
refsutil compression
- 描述:支持卷压缩。
- 应用场景:启用或管理卷上的压缩。
- 示例:
refsutil compression
-
refsutil dedup
- 描述:进行等效簇重复数据删除。
- 应用场景:通过删除重复数据来节省存储空间。
- 示例:
refsutil dedup
-
refsutil iometrics
- 描述:跟踪卷的 IO 指标。
- 应用场景:监控文件系统的输入输出性能。
- 示例:
refsutil iometrics
这些命令一般会在维护、修复、优化磁盘和文件系统时使用,尤其是在涉及到高级文件系统管理时。
PS C:\Users\Administrator> refsutil fixboot /?
警告:此操作将更改卷的引导扇区,并且可能会导致数据全部丢失。
用法: refsutil fixboot <drive> <MajorVersion> <MinorVersion> <ClusterSize> [-f] [-w <Dir>] [-smr <SMRBandSizeInMB>] [-x]
<drive> 使用格式“L:”中的驱动器号。
<MajorVersion> ReFS 卷的主要版本。
<MinorVersion> ReFS 卷的次要版本。
<ClusterSize> 卷的簇大小。 4096 或65536。
refsutil fixboot -f 忽略找到的任何有效的引导扇区。 根据输入参数修复引导扇区。
refsutil fixboot -w <Dir> 会根据需要实际写入引导扇区,并将当前的引导扇区保存到备份目录 <Dir>中。
refsutil fixboot -smr 指定如果卷是 SMR 格式。 簇大小必须为 65536。SMRBandSizeInMB 可能是 128 或 256。
refsutil fixboot -x 如有必要,请先强制卸除卷。 该卷的所有打开句柄将无效。
例如: refsutil fixboot D: 3 3 4096
例如: refsutil fixboot D: 3 1 65536-f-w c:\backup
refsutil fixboot 的一些常见参数,每个参数都有不同的用途和应用场景。以下是详细描述:
-
refsutil fixboot -f- 描述:忽略找到的任何有效的引导扇区。根据输入参数修复引导扇区。
- 应用场景:在执行修复操作时,忽略已发现的有效引导扇区。常用于修复过程中需要跳过某些正常扇区时。
- 示例:
bash
refsutil fixboot -f
-
refsutil fixboot -w <Dir>- 描述:会根据需要实际写入引导扇区,并将当前的引导扇区保存到备份目录
<Dir>中。 - 应用场景:在修复过程中,如果需要写入新的引导扇区并备份当前的引导扇区,使用此命令。
- 示例:
bash
refsutil fixboot -w C:\Backup
- 描述:会根据需要实际写入引导扇区,并将当前的引导扇区保存到备份目录
-
refsutil fixboot -smr- 描述:指定如果卷是 SMR(Shingled Magnetic Recording,叠瓦式磁记录)格式。簇大小必须为 65536,且 SMRBandSizeInMB 可能是 128 或 256。
- 应用场景:用于处理 SMR 格式的磁盘,确保符合特定的簇大小要求。通常用于较新的硬盘驱动器,特别是叠瓦式磁记录硬盘。
- 示例:
bash
refsutil fixboot -smr
-
refsutil fixboot -x- 描述:如有必要,请先强制卸除卷。该卷的所有打开句柄将无效。
- 应用场景:在修复过程中,如果需要强制卸除某个卷并关闭所有句柄,确保没有进程或文件在该卷上操作。
- 示例:
bash
refsutil fixboot -x
这些命令和参数通常用于管理和修复文件系统中的引导扇区、卷格式、以及强制卸载操作等。它们可以帮助管理员在系统修复或维护过程中提供更高的控制力度。
PS C:\Users\Administrator> refsutil leak /?
---- 泄漏检测与修复 ----
用法: refsutil leak <drive> [/a] [/x] [/v] [/d] [/q] [/t <count>] [/s <file>]
refsutil leak /a 如果泄漏检测发现损坏,设置此开关可尝试修复此损坏并重新运行泄漏检测。通过设置此开关,将针对在卷上发现的每个损坏的目录重启泄漏检测一次。
refsutil leak /x 持有卷上的排他锁。如果没有此开关,泄漏检测将创建一个用于处理的卷快照。
refsutil leak /v 详细输出。
refsutil leak /d 仅诊断。泄漏将打印到 StdOut,但不会修复。
refsutil leak /q 查询用于操作的所需空间。
refsutil leak /t <count> 针对泄漏检测生成的线程数。指定值 0 将同步运行泄漏检测(不建议此操作)。默认值为 4。
refsutil leak /s <file> 使用 <file> 作为暂存缓冲区运行操作。<file> 必须能够增加到
refsutil leak /q 报告的值。忽略此开关将在 TEMP 中创建一个暂存缓冲区。
refsutil leak <drive> 采用 "L:" 格式的驱动器号或指向卷装入点的路径。
注意,提供 /d 以及 /a 将会审所有发现的目录/文件损坏,但不会修复泄漏。
例如: refsutil leak D: /a /t 4 /s R:\scratch.tmp
例如: refsutil leak D: /a /d /v /t 4
例如: refsutil leak D: /q
refsutil leak 工具中的一些选项,用于执行资源泄漏检测并修复文件系统中的损坏。每个参数都有不同的功能,下面是对这些参数的详细说明和应用场景:
-
refsutil leak /a- 描述:如果泄漏检测发现损坏,设置此开关可尝试修复此损坏并重新运行泄漏检测。通过设置此开关,将针对在卷上发现的每个损坏的目录重启泄漏检测一次。
- 应用场景:当发现资源泄漏或损坏时,使用此参数尝试自动修复并重新进行检测。
- 示例:
bash
refsutil leak /a
-
refsutil leak /x- 描述:持有卷上的排他锁。如果没有此开关,泄漏检测将创建一个用于处理的卷快照。
- 应用场景:在进行资源泄漏检测时,使用排他锁确保没有其他进程访问卷。这对系统的其他操作至关重要。
- 示例:
bash
refsutil leak /x
-
refsutil leak /v- 描述:启用详细输出。
- 应用场景:用于获取更多的调试信息,适用于需要深入分析泄漏检测过程的场景。
- 示例:
bash
refsutil leak /v
-
refsutil leak /d- 描述:仅进行诊断。泄漏将打印到 StdOut,但不会修复。
- 应用场景:如果仅想查看泄漏检测的结果而不执行任何修复操作时,使用此选项。
- 示例:
bash
refsutil leak /d
-
refsutil leak /q- 描述:查询用于操作的所需空间。
- 应用场景:此参数用于查询操作所需的临时空间大小,帮助用户准备足够的磁盘空间。
- 示例:
bash
refsutil leak /q
-
refsutil leak /t <count>- 描述:指定针对泄漏检测生成的线程数。指定值为 0 时,泄漏检测将同步运行(不推荐这样做)。默认值为 4。
- 应用场景:通过设置线程数,可以提高检测的并发性能,推荐使用默认值或根据系统性能调整。
- 示例:
bash
refsutil leak /t 8
-
refsutil leak /s <file>- 描述:使用
<file>作为暂存缓冲区运行操作。<file>必须能够增加到refsutil leak /q报告的值。忽略此开关时,会在 TEMP 目录创建暂存缓冲区。 - 应用场景:使用指定的文件作为缓冲区,避免系统默认使用临时文件夹。适用于自定义存储位置。
- 示例:
bash
refsutil leak /s C:\TempBuffer
- 描述:使用
-
refsutil leak <drive>- 描述:采用 "L:" 格式的驱动器号或指向卷装入点的路径。
- 应用场景:指定要进行泄漏检测的特定驱动器或卷。
- 示例:
bash
refsutil leak L:
这些参数为执行资源泄漏检测提供了灵活的选项。通过不同的开关,用户可以选择是否修复问题、是否打印详细日志、是否进行并发处理等。它们对于文件系统的维护和优化特别有用,尤其是在处理大规模文件系统或进行诊断时。
PS C:\Users\Administrator> refsutil triage /?
---- 会审和损坏处理 ----
用法: refsutil 会审 <drive> [/s <id>] [/g] [/v]
refsutil triage /s <id> 擦除与 <id> 对应的目录。<id> 是该目录的文件 ID。这将擦除给定目录下的所有文件。它不能与 /g选项结合使用。
refsutil triage /g 擦除卷的全局表。它不能与 /s <id> 选项结合使用。
refsutil triage /v 详细输出。
refsutil triage <drive> 采用格式 "L:" 的驱动器号或指向卷装入点的路径。
例如: refsutil 会审 D: /s 15100
例如: refsutil 会审 D: /s 16040 /v
PS C:\Users\Administrator> refsutil streamsnapshot /?
---- 流快照管理 ----
用法: refsutil streamsnapshot [/c <name>] [/l] [/d <name>] [/q <name>] <file[:stream]>
refsutil streamsnapshot /c <name> 此时为流 <file[:stream]> 创建名为 <name> 的快照。此选项与 [/d]、[/l] 和 [/q] 相互排斥。
refsutil streamsnapshot /d <name> 从文件 <file> 中删除快照 <name>。此操作将忽略 [:stream]部分。此选项与 [/c]、[/l] 和 [/q] 相互排斥。
refsutil streamsnapshot /l <name> 列出流 <file[:stream]> 与字符串 <name> 匹配的所有快照。<name>可能包含通配符。此选项与 [/c]、[/d] 和 [/q] 相互排斥。
refsutil streamsnapshot /q <name> 列出在名为 <name> 的快照和流(通过 [:stream] 表示)之间发生的所有修改。<name> 和 [:stream] 都必须引用同一快照链中的流。快照 <name> 必须旧于通过[:stream] 指定的流。此选项与 [/c]、[/d] 和 [/l] 相互排斥。
未提供 [:stream] 时,此实用程序将对默认的未命名数据流 $DATA 执行操作。
例如: refsutil streamsnapshot /c "snapshot_jan_2020" C:\file.dat
例如: refsutil streamsnapshot /d "snapshot_jan_2020" C:\file.dat
例如: refsutil streamsnapshot /l "*" C:\file.dat
例如: refsutil streamsnapshot /q "snapshot_jan_2020" C:\file.dat:snapshot_feb_2020
PS C:\Users\Administrator> refsutil compression /?
---- 卷压缩管理 ----
用法: refsutil compression <drive> <[/q]>|<[/c] [/f <format>] [/e <engine>] [/cs <size>]>
refsutil compression /q 查询卷压缩参数。
refsutil compression /c 使用提供的压缩参数压缩卷。
refsutil compression /f 压缩使用的压缩格式。有效值:
- LZ4、
- ZSTD、
- 无。
使用“无”解压缩已压缩的卷。提供此选项时,必须忽略引擎和压缩区块大小。
refsutil compression /e 压缩使用的压缩级别,具体取决于所选的压缩格式。对于任何给定的压缩,忽略此参数或使用 0 来选取默认级别。默认值可能发生更改。有效值:
- LZ4: 1、3-12。默认值: 1。范围 3-12 中的值使用 LZ4 HC 算法,可以取得更大的压缩比,但压缩速度将大幅降低。解压缩速度与所选压缩级别无关。
- ZSTD: 1-22。默认值: 3。值越大,压缩比就越大,但压缩速度随之降低。大于或等于 20 的值需要更高的内存占用。解压缩速度与所选压缩级别无关。
refsutil compression /cs 压缩使用的压缩区块大小(以字节为单位)。必须为大于或等于卷群集大小的值的 2 次幂,但不大于 64mb。值越大,产生的压缩比越大,但读取性能会因为读取的数据量小于区块大小而下降。1mb 之后收益将急剧下降,因此不建议这样做。省略此参数或使用 0 将选取卷群集大小。
例如: refsutil compression /q R:
例如: refsutil compression /c /f LZ4 /e 12 /cs 524288 R:
例如: refsutil compression /c /f ZSTD /e 15 /cs 131072 R:
例如: refsutil compression /c /f ZSTD R:
例如: refsutil compression /c /f NONE R:
PS C:\Users\Administrator> refsutil dedup /?
用法: refsutil dedup <volume path/mount point> [/d] [/s] [/cpu <percentage>] [/mm]
<drive> 卷路径或装载点。
refsutil dedup /d Dedup 卷; 与 /s 标志互相排斥。
refsutil dedup /s 可通过删除等效群集来扫描卷以确定可以保存多少空间。与 /d 标志互相排斥。
refsutil dedup /mm 使用内存映射文件 I/O 来读取文件到 dedup。默认通过 IOCP 使用异步读取。必须与 /d 或 /s 标志一起使用。
refsutil dedup /cpu 指定要使用的 CPU 的最大百分比。有效值为 [1-100]。
Eg: refsutil dedup D: /s
Eg: refsutil dedup D: /d /cpu 50
ReFSUtil 是包含在 Windows 和 Windows Server 中的一个工具,该工具尝试诊断严重损坏的 ReFS 卷、识别剩余文件,并将这些文件复制到另一个卷。 该工具位于 %SystemRoot%\System32 文件夹中。
ReFS salvage 是 ReFSUtil 的主要功能,对于从在磁盘管理中显示为 RAW 的卷恢复数据非常有用。 ReFS Salvage 有两个阶段:扫描阶段和复制阶段。 在自动模式下,扫描阶段和复制阶段将按顺序运行。 在手动模式下,每个阶段都可以单独运行。 进度和日志保存在工作目录中,以允许单独运行阶段以及暂停和恢复扫描阶段。 除非卷为 RAW,否则不必使用 ReFSutil 工具。 如果为只读,则仍可访问数据。
参数
| 参数 | 说明 |
|---|---|
<source volume> |
指定要处理的 ReFS 卷。 驱动器号必须格式化为“L:”,或者必须提供卷装入点的路径。 |
<working directory> |
指定要存储临时信息和日志的位置。 它不得位于 <source volume> 上。 |
<target directory> |
指定将标识的文件复制到的位置。 它不得位于 <source volume> 上。 |
| -m | 恢复所有可能的文件,包括已删除的文件。
警告:此参数不仅会导致进程运行的时间变长,还可能会导致意外结果。 |
| -v | 指定此项以使用详细模式。 |
| -x | 首先强制该卷卸载(如有必要)。 所有指向该卷的打开的句柄将无效。 例如 refsutil salvage -QA R: N:\WORKING N:\DATA -x。 |
使用情况和可用选项
快速自动模式
执行快速扫描阶段,然后执行复制阶段。 此模式运行速度更快,因为它假定卷的某些关键结构未损坏,因此无需扫描整个卷来查找它们。 这也减少了过时文件/目录/卷的恢复。
refsutil salvage -QA <source volume> <working directory> <target directory> <options>
全自动模式
执行完全扫描阶段,然后执行复制阶段。 此模式可能需要很长时间,因为它会扫描整个卷以查找任何可恢复的文件/目录/卷。
refsutil salvage -FA <source volume> <working directory> <target directory> <options>
诊断阶段(手动模式)
首先,尝试确定 <source volume> 是否为 ReFS 卷,并确定该卷是否可装载。 如果卷不可装载,则会提供原因。 这是一个独立的阶段。
refsutil salvage -D <source volume> <working directory> <options>
快速扫描阶段
对任何可恢复文件执行 <source volume> 的快速扫描。 此模式运行速度更快,因为它假定卷的某些关键结构未损坏,因此无需扫描整个卷来查找它们。 这也减少了过时文件/目录/卷的恢复。 发现的文件将记录到位于 foundfiles.<volume signature>.txt 中的 <working directory> 文件。 如果先前停止了扫描阶段,则再次使用 -QS 标志运行会从中断的位置恢复扫描。
refsutil salvage -QS <source volume> <working directory> <options>
完全扫描阶段
扫描整个 <source volume> 以查找任何可恢复文件。 此模式可能需要很长时间,因为它会扫描整个卷以查找任何可恢复文件。 发现的文件将记录到位于 foundfiles.<volume signature>.txt 中的 <working directory> 文件。 如果先前停止了扫描阶段,则再次使用 -FS 标志运行会从中断的位置恢复扫描。
refsutil salvage -FS <source volume> <working directory> <options>
复制阶段
将 foundfiles.<volume signature>.txt 文件中所述的所有文件复制到 <target directory>。 如果过早地停止扫描阶段,则 foundfiles.<volume signature>.txt 文件可能尚不存在,因此不会将任何文件复制到 <target directory>。
refsutil salvage -C <source volume> <working directory> <target directory> <options>
使用列表的复制阶段
将 <file list> 中的所有文件从 <source volume> 复制到 <target directory>。 <file list> 中的文件必须先由扫描阶段标识,但扫描无需运行到完成。 可以通过将 <file list> 复制到新文件、删除引用不应还原的文件的行以及保留应还原的文件来生成 foundfiles.<volume signature>.txt。 PowerShell cmdlet Select-String 可能有助于筛选 foundfiles.<volume signature>.txt,以便仅包含所需的路径、扩展或文件名。
refsutil salvage -SL <source volume> <working directory> <target directory> <file list> <options>
使用交互式控制台的复制阶段
高级用户可以使用交互式控制台补救文件。 此模式还需要从任一扫描阶段生成的文件。
refsutil salvage -IC <source volume> <working directory> <options>
在 Windows 系统中,可以使用 PowerShell 命令来查看和管理 REFS 文件系统的相关信息。以下是一些常用的 PowerShell 命令:
-
查看 REFS 文件系统的信息:
Get-Volume:显示系统中的卷信息,包括文件系统类型。Get-FileIntegrity:显示指定卷上的文件完整性设置。
-
管理 REFS 文件系统的设置:
Enable-DedupVolume:启用指定卷上的数据去重功能。Disable-DedupVolume:禁用指定卷上的数据去重功能。Set-FileIntegrity:设置指定卷上的文件完整性选项。
-
管理 REFS 文件系统的快照:
Get-FileShare:显示指定卷上的文件共享信息,包括快照信息。Get-SmbShare:显示指定卷上的 SMB 共享信息,包括快照信息。
-
管理 REFS 文件系统的卷:
New-Volume:创建新的卷,并指定文件系统类型为 REFS。Resize-Volume:调整指定卷的大小。Set-Volume:设置指定卷的属性,如标签、驱动器号等。
-
管理 REFS 文件系统的数据恢复:
Get-FileRestore:显示指定卷上的文件恢复信息。
-
其他操作:
Repair-FileIntegrity:修复指定卷上的文件完整性。
请注意,执行这些命令需要以管理员权限运行 PowerShell。可以使用 -WhatIf 参数来预览命令执行的效果,确保操作的安全性。同时,建议在执行任何修改操作之前备份重要数据。
在 PowerShell 中,可以通过以下命令来查看 REFS 文件系统的版本:
Get-Filesystem | Where-Object { $_.TypeName -eq "ReFS" } | Select-Object Version
这条命令会列出系统中所有的文件系统,然后筛选出类型为 ReFS 的文件系统,并显示其版本号。
PowerShell 命令,用于管理和操作 REFS 文件系统:
-
获取 REFS 文件系统信息:
Get-Volume:显示系统中的卷信息,包括文件系统类型。Get-FileIntegrity:显示指定卷上的文件完整性设置。
-
管理 REFS 文件系统设置:
Enable-DedupVolume:启用指定卷上的数据去重功能。Disable-DedupVolume:禁用指定卷上的数据去重功能。Set-FileIntegrity:设置指定卷上的文件完整性选项。
-
管理 REFS 文件系统快照:
Get-FileShare:显示指定卷上的文件共享信息,包括快照信息。Get-SmbShare:显示指定卷上的 SMB 共享信息,包括快照信息。
-
管理 REFS 文件系统卷:
New-Volume:创建新的卷,并指定文件系统类型为 REFS。Resize-Volume:调整指定卷的大小。Set-Volume:设置指定卷的属性,如标签、驱动器号等。
-
管理 REFS 文件系统数据恢复:
Get-FileRestore:显示指定卷上的文件恢复信息。
-
其他操作:
Repair-FileIntegrity:修复指定卷上的文件完整性。
这些命令可以帮助你管理和操作 REFS 文件系统的各种功能和设置
PowerShell 命令,用于管理和操作 REFS 文件系统:
-
管理 REFS 卷的层次空间:
Get-StorageTier:显示存储池中的存储层次信息。New-StorageTier:创建新的存储层次。Remove-StorageTier:移除指定的存储层次。
-
管理 REFS 存储池:
Get-StoragePool:显示系统中的存储池信息。New-StoragePool:创建新的存储池。Remove-StoragePool:移除指定的存储池。
-
管理 REFS 卷的优化:
Optimize-Volume:优化指定卷的性能,可选参数包括逻辑布局和磁盘布局。
-
监视 REFS 文件系统:
Get-FileIntegrityPolicy:显示文件完整性策略的详细信息。Get-FileIntegrityPolicyTemplate:显示文件完整性策略模板。
-
设置 REFS 文件系统配额:
Set-FsrmQuota:设置文件系统配额。
-
修复 REFS 文件系统:
Repair-Volume:修复指定卷上的文件系统错误。
-
处理 REFS 文件系统事件:
Get-WinEvent:检索 Windows 事件日志中的信息,可以用于监视 REFS 文件系统相关的事件。
这些命令提供了更多的灵活性和功能,可用于进一步管理和操作 REFS 文件系统
PowerShell 命令,可以用于管理和操作 REFS 文件系统。以下是其中的一些:
-
管理 REFS 文件系统驱动器:
Get-PhysicalDisk:显示系统中的物理磁盘信息。Get-VirtualDisk:显示系统中的虚拟磁盘信息。Initialize-Disk:初始化磁盘以供使用。New-VirtualDisk:创建新的虚拟磁盘。Remove-Partition:移除指定的分区。Remove-VirtualDisk:移除指定的虚拟磁盘。
-
监视 REFS 文件系统性能:
Get-Counter:检索系统性能计数器信息,可用于监视 REFS 文件系统的性能指标,如吞吐量、延迟等。
-
配置 REFS 文件系统高级选项:
Set-FileIntegrityPolicy:设置文件完整性策略,包括保护级别、扫描周期等选项。Set-StoragePool:配置存储池属性,如故障域、缓存策略等。
-
恢复 REFS 文件系统数据:
Repair-FileIntegrity:修复指定卷上的文件完整性。
-
处理 REFS 文件系统故障:
Repair-VirtualDisk:修复虚拟磁盘上的故障。
这些命令提供了更多的选项和功能,可以用于更细致地管理和操作 REFS 文件系统
PowerShell 命令可以用于管理和操作 REFS 文件系统。以下是其中的一些:
-
查看 REFS 文件系统信息:
Get-Volume:显示系统中的卷信息,包括文件系统类型、容量等。Get-FileIntegrity:显示指定卷上的文件完整性信息。
-
调整 REFS 文件系统属性:
Set-Volume:设置卷的属性,如标签、驱动器号等。Set-FileIntegrity:设置指定卷上的文件完整性选项,如启用或禁用数据一致性扫描等。
-
备份和恢复 REFS 文件系统:
Checkpoint-Computer:创建系统的检查点,用于备份和还原系统状态,包括文件系统。Restore-Computer:从检查点中恢复系统状态,可用于恢复文件系统数据。
-
监控 REFS 文件系统:
Get-DiskUsage:显示磁盘使用情况的摘要信息,可用于监控文件系统的空间使用情况。Get-StorageJob:显示正在运行的存储作业,可用于监控文件系统操作的进度和状态。
-
设置 REFS 文件系统配额:
Set-VolumeQuota:设置卷的配额限制,用于控制用户或应用程序对文件系统的使用量。
这些命令提供了更多的选项和功能,可以用于更灵活地管理和操作 REFS 文件系统
PowerShell 命令可以用于管理和操作 REFS 文件系统。以下是其中的一些:
-
设置 REFS 文件系统属性:
Get-FileShare:显示文件共享的属性,可用于管理共享到 REFS 文件系统的文件夹。Set-FileShare:设置文件共享的属性,如权限、配额等。
-
监控 REFS 文件系统状态:
Get-FsrmQuota:显示文件服务器资源管理器 (FSRM) 配额信息,可用于监控 REFS 文件系统的配额使用情况。Get-FsrmFileScreen:显示文件服务器资源管理器 (FSRM) 文件筛选器信息,可用于监控和管理 REFS 文件系统上的文件筛选。
-
执行文件系统维护:
Optimize-Volume:优化指定卷的性能,包括文件碎片整理等操作。Repair-Volume:修复指定卷上的文件系统错误,如文件系统一致性问题等。
-
配置文件系统策略:
Set-FsrmQuota:配置文件服务器资源管理器 (FSRM) 配额,可用于限制 REFS 文件系统上的存储空间使用。Set-FsrmFileScreen:配置文件服务器资源管理器 (FSRM) 文件筛选器,可用于限制 REFS 文件系统上的文件类型和大小。
这些命令提供了更多的选项和功能,可以用于更全面地管理和操作 REFS 文件系统

浙公网安备 33010602011771号