适用于:Azure Local 2311.2 及更高版本
本文介绍可复原文件系统(ReFS)重复数据删除和压缩功能,以及如何在 Azure 本地环境中使用此功能来优化存储。
什么是 ReFS 重复数据删除和压缩?
ReFS 重复数据删除和压缩是一项存储优化功能,可帮助优化存储使用情况并降低存储成本。 删除重复专门适用于活跃的、对性能敏感或读取密集型工作负载,例如 Azure Local 上的 Azure 虚拟桌面基础结构 (VDI)。 对于性能较少的工作负荷,可以使用重复数据删除和压缩的组合,也可以只使用压缩。
此功能使用 ReFS 块克隆 来减少数据移动并仅启用元数据操作。 该功能在数据块级别运行,并根据系统大小使用固定块大小。 压缩引擎生成热度地图,用于确定块是否应有资格进行压缩,从而优化 CPU 使用率。
可以将 ReFS 重复数据删除和压缩作为一次性作业运行,或使用计划作业自动执行它。 此功能同时适用于全闪存和混合系统,并支持各种复原设置,例如双向镜像、嵌套双向镜像、三向镜像和镜像加速奇偶校验。
好处
下面是使用 ReFS 重复数据删除和压缩的好处:
- 活跃工作负载的存储节省。 专为活动工作负荷(如 VDI)设计,可确保在要求苛刻的环境中获得高效的性能。
- 多种模式。 以三种模式运行:仅重复数据删除(默认模式)、仅压缩,以及重复数据删除和压缩,从而能够根据您的需求进行优化。
- 增量删除重复。 仅对新的或更改过的数据执行删除重复,而不是每次扫描整个卷,从而优化作业持续时间并减少对系统性能的影响。
先决条件
在开始之前,请确保满足以下先决条件:
- 有权访问已部署和注册的 Azure 本地实例。
- 在实例上创建了群集共享卷(CSV),并且你有权访问该卷。
- CSV 尚未启用 Windows 重复数据删除功能。
使用 ReFS 删除重复和压缩
可以通过 Windows Admin Center 或 PowerShell 使用 ReFS 重复数据删除和压缩。 PowerShell 允许手动和自动化作业,而 Windows Admin Center 仅支持计划作业。 无论使用哪种方法,都可以自定义作业设置,并利用文件更改跟踪来加快后续运行。
注意
建议在将性能作为关键考量的工作负载中仅使用删除重复,而不是使用压缩或两者的组合。
启用并运行 ReFS 重复数据删除和压缩
在 Windows Admin Center 中,可以创建 ReFS 重复数据删除计划,以便在创建卷期间在现有卷或新卷上运行。 但是,仅通过 PowerShell 支持启用压缩。
请按照以下步骤通过 Windows Admin Center 启用 ReFS 重复数据删除,并设置其运行的计划时间:
连接到系统,然后在左侧的“工具”窗格中,选择“卷”。
在“卷”页上,选择“清单”选项卡,选择相应的卷,然后选择“设置”。 若要为新卷启用 ReFS 重复数据删除,请选择“ + 创建”。
在右侧的“卷设置”窗格中,在“更多选项”下拉列表下,选中“使用 ReFS 删除重复”复选框。
选择 ReFS 重复数据删除应运行的星期几、作业开始运行的时间以及最长持续时间(默认值不受限制),然后选择“ 保存”。
以下屏幕截图显示 ReFS 重复数据删除将在星期五和星期六下午 10:00 运行,最长持续时间为 2 小时,从 2024 年 9 月 27 日星期五开始。 如果开始日期更改为 2024/9/30 星期一,则第一次运行时间为 2024/10/4 下午 10:00,因为这是 2024/9/30 之后的第一个星期五。
验证卷的“属性”部分中的更改。 计划显示在“属性”部分中,并显示节省明细和下次计划运行时间。 每次运行后都会更新这些节省,可以在“性能”部分下的图表中观察性能影响。 如果通过 PowerShell 启用压缩,则其节省内容也会显示在 “属性” 部分。
若要通过 PowerShell 使用 ReFS 重复数据删除和压缩,请先启用该功能,然后将其作为一次性手动作业运行,或自动将其作为计划作业运行。 作业在每个系统的 CSV 级别设置,可以根据模式、持续时间、系统资源使用情况等进行自定义。
启用 ReFS 重复数据消除和压缩
按照以下步骤通过 PowerShell 启用 ReFS 重复数据删除和压缩:
连接到 Azure 本地实例,以管理员身份运行 PowerShell。
必须在所有者节点上运行所有命令来修改给定卷上的设置。 运行以下 cmdlet 以显示所有 CSV 所有者节点和卷路径:
Get-ClusterSharedVolume | FT Name, OwnerNode, SharedVolumeInfo
下面是 cmdlet 用法的示例输出:
Name OwnerNode SharedVolumeInfo
---- --------- ----------------
Cluster Virtual Disk (Volume1) hci-server1 {C:\ClusterStorage\Volume1}
运行以下 cmdlet 以在特定卷上启用 ReFS 的数据去重和压缩功能。
Enable-ReFSDedup -Volume <path> -Type <Dedup | DedupAndCompress | Compress>
其中: Type
是必需参数,可以采用以下值之一:
- Dedup:仅启用删除重复。 这是默认选项。
- DedupAndCompress:启用删除重复和压缩。
- 压缩:仅启用压缩。
如果要更改 Type
参数,必须先 禁用 ReFS 重复数据删除和压缩 ,然后使用新 Type
参数再次启用它。
例如,运行以下 cmdlet,对一个卷同时启用删除重复和压缩:
PS C:\Users\hciuser> Enable-ReFSDedup -Volume "C:\ClusterStorage\Volume1" -Type DedupAndCompress
启用 ReFS 重复数据删除和压缩后,验证 CSV 上的状态。 运行以下 cmdlet,并确保输出中 Enabled
字段显示为 True
,同时 Type
字段显示指定的模式。
Get-ReFSDedupStatus -Volume <path> | FL
下面是 Get-ReFSDedupStatus
cmdlet 的示例输出,其中 Enabled
字段显示为 True
,Type
字段显示为 DedupAndCompress
:
PS C:\Users\hciuser> Get-ReFSDedupStatus -Volume "C:\ClusterStorage\Volume1" | FL
Volume : C:\ClusterStorage\Volume1
Enabled : True
Type : DedupAndCompress
Status : --
Used : 1.4 TiB
Deduped : 0 B
Compressed : 0 B
ScannedOnLastRun : 0 B
DedupedOnLastRun : 0 B
LastRunTime : N/A
LastRunDuration : N/A
MextRunTime : N/A
CompressionFormat : Uncompressed
CompressionLevel : 0
CompressionChunkSize : 0 B
VolumeClusterSizeBytes : 4 KiB
VolumeTotale lusters : 805289984
VolumeTotalAllocatedelusters : 353850628
VolumeTotalAllocatedCompressibleClusters : 0
VolumeTota1InUseCompressibleClusters : 0
VolumeTota1Compressedelusters : 0
运行 ReFS 去重和压缩
启用此功能后,可以手动运行一次性作业或根据需要计划定期作业。
在你跑步之前,还应考虑以下其他因素:
- 如果未指定压缩格式,则默认算法为 LZ4。 可以根据需要更改算法以适应不同的运行需求。
- 可以为更复杂的用例指定更多参数。 本部分中使用的 cmdlet 是最简单的用例。
- 排除的文件夹、排除的文件扩展名和上次修改时间最小值筛选器仅在运行重复数据删除时适用,在运行压缩时不适用。
手动运行 ReFS 重复数据删除和压缩作业
若要立即启动作业,请运行以下 cmdlet。 启动作业后,其 State
可能显示为 NotStarted
,因为它可能仍处于初始化阶段。
Start-ReFSDedupJob -Volume <path> -Duration <TimeSpan> -CompressionFormat <LZ4 | ZSTD>
例如,以下 cmdlet 使用 LZ4 压缩格式立即启动作业,持续时间为 5 小时:
PS C:\Users\hciuser> $Start = “10/31/2023 08:30:00”
PS C:\Users\hciuser> $Duration = New-Timespan -Hours 5
PS C:\Users\hciuser> Start-ReFSDedupJob -Volume "C:\ClusterStorage\Volume1" -Duration $Duration -CompressionFormat LZ4
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
12 Job12 NotStarted True Start-Re...
若要停止正在运行的作业,请运行以下 cmdlet。 此命令行工具也适用于正在执行中的计划作业。
Stop-ReFSDedupJob -Volume <path>
例如,以下的 cmdlet 会停止在上一个示例中启动的作业:
PS C:\Users\hciuser> Stop-ReFSDedupJob -Volume "C:\ClusterStorage\Volume1"
若要查看作业的进度、已节省的资源和状态,请运行以下 cmdlet:
Get-ReFSDedupStatus -Volume <path> | FL
例如,以下 cmdlet 显示作业的状态:
PS C:\Users\hciuser> Get-ReFSDedupStatus -Volume "C:\ClusterStorage\Volume1"
Volume Type Used Deduped Compressed Format
------ ---- ---- ------- ---------- ------
C:\ClusterStorage\Volume1 DedupAndCompress 1.38 TiB 0 B 0 B Unc...
计划定期执行ReFS重复数据删除和压缩作业
设置重复计划以对卷运行存储优化。 然后,可以查看、设置或修改、暂停、恢复或清除作业计划。
若要设置或修改计划,请运行以下 cmdlet:
Set-ReFSDedupSchedule -Volume <Path> -Start <DateTime> -Days <DayOfWeek[]> -Duration <TimeSpan> -CompressionFormat <LZ4 | ZSTD> -CompressionLevel <UInt16> -CompressionChunkSize <UInt32>
例如,如果要设置一个计划于每周四上午 8:30 以 LZ4 格式运行 5 小时的定期作业,请运行以下 cmdlet。 如果要每天运行作业,请使用 -Days EveryDay
。
PS C:\Users\hciuser> $Start = “10/31/2023 08:30:00”
PS C:\Users\hciuser> $Duration = New-Timespan -Hours 5
PS C:\Users\hciuser> Set-ReFSDedupSchedule -Volume C:\ClusterStorage\Volume1 -Start $Start Days "Thursday" -Duration $Duration -CompressionFormat LZ4
若要查看作业计划,请运行以下 cmdlet:
Get-ReFSDedupSchedule -Volume <path> | FL
下面是上一示例中计划作业的输出:
PS C:\Users\hciuser> Get-ReFSDedupSchedule -Volume "C:\ClusterStorage\Volume1" | FL
Volume : C:\ClusterStorage\Volume1
Enabled : True
Type : DedupAndCompress
CpuPercentage : Automatic
ConcurrentOpenFiles : Automatic
MinimumLastModifiedTimeHours : 0
ExcludeFileExtension : {}
ExcludeFolder : {}
CpuPercentage : 0
CompressionFormat : LZ4
CompressionLevel : 1
CompressionChunkSize : 4 B
CompressionTuning : 70
RecompressionTuning : 40
DecompressionTuning : 30
Start : 8:30:00 AM
Duration : 00m:00.000s
Days : Thursday
Suspended : False
暂停计划的作业
暂停计划会取消任何正在运行的作业,并停止未来的计划运行。 此选项保留 ReFS 重复数据删除和压缩相关的元数据,并继续跟踪文件更改,以便在未来实现优化运行。 可以随时恢复计划,并保留计划设置。
按照以下步骤使用 Windows Admin Center 暂停计划作业:
连接到系统,然后在左侧的“工具”窗格中,选择“卷”。
在“卷”页上,选择“清单”选项卡,选择相应的卷,然后选择“设置”。
在右侧的“卷设置”窗格中,在“更多选项”下拉列表下,取消选中“设置计划”复选框,然后选择“保存”。
使用以下 cmdlet 暂停计划作业,并使用 PowerShell 检查状态:
Suspend-ReFSDedupSchedule -Volume <path>
下面是 cmdlet 用法的示例输出。 字段 Suspended
显示为 True
.
PS C:\Users\hciuser> Suspend-ReFSDedupSchedule -Volume "C:\ClusterStorage\Volume1"
PS C:\Users\user> Get-ReFSDedupSchedule -Volume "C:\ClusterStorage\Volume1" | FL
Volume : C:\ClusterStorage\Volume1
Enabled : True
Type : DedupAndCompress
CpuPercentage : Automatic
ConcurrentOpenFiles : Automatic
MinimumLastModifiedTimeHours : 0
ExcludeFileExtension : {}
ExcludeFolder : {}
CpuPercentage : 0
CompressionFormat : LZ4
CompressionLevel : 1
CompressionChunkSize : 4 B
CompressionTuning : 70
RecompressionTuning : 40
DecompressionTuning : 30
Start : 8:30:00 AM
Duration : 00m:00.000s
Days : Thursday
Suspended : True
对卷禁用 ReFS 删除重复和压缩
对卷禁用 ReFS 删除重复和压缩会停止所有正在进行的运行,并取消将来的计划任务。 此外,相关的卷元数据不会保留,并且文件更改跟踪会停止。
注意
禁用此功能时,它不会撤消重复数据删除或压缩,因为所有操作都在元数据层发生。 随着时间的推移,已删除重复的数据会返回到其原始状态,因为卷会产生读取和写入。 若要解压缩数据,请确保有足够的容量可用,并使用 ReFSUtil 执行以下操作。
refsutil compression /c /f NONE <vol>
按照以下步骤使用 Windows Admin Center 禁用该功能:
连接到系统,然后在左侧的“工具”窗格中,选择“卷”。
在“卷”页上,选择“清单”选项卡,选择相应的卷,然后选择“设置”。
在右侧的“卷设置”窗格中,在“更多选项”下拉列表下,取消选中“使用 ReFS 删除重复”复选框,然后选择“保存”。
使用以下 cmdlet 暂停计划作业并检查状态:
Disable-ReFSDedup -Volume <path>
下面是 cmdlet 用法的示例输出。 Enabled
字段显示为 False
,Type
字段显示为空白。
PS C:\Users\hciuser> Disable-ReFSDedup -Volume "C:\ClusterStorage\Volume1"
PS C:\Users\hciuser> Get-ReFSDedupSchedule -Volume "C:\ClusterStorage\Volume1" | FL
Volume : C:\ClusterStorage\Volume1
Enabled : False
Type :
CpuPercentage : Automatic
ConcurrentOpenFiles : Automatic
MinimumLastModifiedTimeHours : 0
ExcludeFileExtension : {}
ExcludeFolder : {}
CpuPercentage : 0
CompressionFormat : LZ4
CompressionLevel : 0
CompressionChunkSize : 0 B
CompressionTuning : 70
RecompressionTuning : 40
DecompressionTuning : 30
Start : N/A
Duration : N/A
Days : None
Suspended : False
常见问题 (FAQ)
本部分解答有关 ReFS 重复数据删除和压缩的常见问题。
ReFS 重复数据删除和压缩功能是否不同于 Windows 重复数据删除?
是的,此功能与 Windows 重复数据删除功能完全不同。
重要
我们不支持同时启用 ReFS 的数据重复删除和压缩功能以及 Windows 数据重复删除功能。
ReFS 重复数据删除和压缩专为活动工作负荷而设计,侧重于在优化后最大程度地降低性能影响。 与 Windows 重复数据删除不同,ReFS 重复数据删除和压缩不使用区块存储来存储重复数据,并且没有涉及物理数据移动。 此功能依赖于 ReFS 块克隆来启用仅元数据操作。 由于使用可变块大小,Windows 重复数据删除可能会提供更好的存储节省,它还适用于更广泛的工作负荷类型,例如常规用途文件服务器(GPFS)、备份目标等。
ReFS 重复数据删除和压缩的阶段是什么?
优化过程包括按顺序发生的以下阶段,具体取决于指定的模式。 如果优化运行达到持续时间限制,则压缩可能不会运行。
初始化。 在此阶段,将扫描存储卷以识别冗余的数据块。
数据去重 在此阶段,冗余块会进行单实例化,并使用 ReFS 块克隆进行跟踪。
压缩。 在此阶段,将生成热度地图,以确定块是否应符合压缩条件。 默认设置压缩不经常访问或冷数据以减少其大小。 可以更改压缩级别以调整符合压缩条件的块范围。
如果在完全优化卷之前达到持续时间限制,会发生什么情况?
持续时间限制用于防止在工作时间优化作业对客户工作负荷造成的任何性能影响。 删除重复服务会监视卷的优化部分和传入文件的修改。 将来的作业中会利用此数据来缩短优化时间。 例如,如果由于持续时间限制,第一次运行中只处理卷 30%,则后续运行将处理剩余 70% 和任何新数据。
已知问题
以下部分列出了 ReFS 重复数据删除和压缩当前存在的已知问题。
启用压缩后,在第一次优化运行后对作业使用 -FullRun
参数可能会导致系统中出现死锁。
状态: 打开。
除非-FullRun
是Type
,否则避免在手动启动的工作中使用Dedup
。
请遵循以下步骤作为临时解决方法来缓解此问题:
对卷禁用 ReFS 删除重复和压缩的步骤:
Disable-ReFSDedup -Volume <path>
使用 refsutil
解压缩卷:
refsutil compression /c /f NONE <vol>
根据需要,使用仅 Dedup
模式重新启用 ReFS 删除重复和压缩:
Enable-ReFSDedup -Volume <path> -Type Dedup
状态: 打开。
作为建议的最佳做法,请考虑错开作业的开始时间以避免任何重叠。 但是,如果所有作业必须同时运行,请对所有 CSV 调整每个作业的 CPU 分配,使其相当于整个系统 CPU 使用率的 50% 以下。 请记住,施加 CPU 限制可能会导致作业执行时间更长。
ReFS 删除重复和压缩作业已完成(已成功或已取消),并且存储节省未在 Get-ReFSDedupStatus
或 Windows Admin Center 中列出。
状态: 已解决。
此问题的临时解决方法是立即启动一次性作业,结果会立即更新。
Start-ReFSDedupJob -Volume <path>
对卷禁用 ReFS 删除重复和压缩后发送了已停止的监视 Windows 事件跟踪 (ETW) 事件。
状态: 已解决。
对卷禁用 ReFS 删除重复和压缩后,ReFS 删除重复日志的 ETW 通道会反复报告已停止的监视事件。 但是,由于此问题,我们预计不会对使用量产生重大影响。
如果卷在压缩期间移动到另一个节点,则不会记录作业失败事件。
状态: 已解决。
如果在压缩正在进行时将 CSV 移动到系统的另一台计算机,则作业失败事件不会记录在 ReFS 重复数据删除通道中。 但是,由于此问题,我们预计不会对使用量产生重大影响。
后续步骤