使用 Azure Stack HCI 中的 ReFS 重复数据删除和压缩优化存储
适用于:Azure Stack HCI 版本 23H2
本文介绍弹性文件系统(ReFS)重复数据删除和压缩功能,以及如何在 Azure Stack HCI 中使用此功能来优化存储。
什么是 ReFS 重复数据删除和压缩?
ReFS 重复数据删除和压缩是专为活动工作负荷设计的存储优化功能,例如 Azure Stack HCI 上的 Azure 虚拟桌面基础结构(VDI)。 此功能有助于优化存储使用情况并降低存储成本。
此功能使用 ReFS 块克隆 来减少数据移动并仅启用元数据操作。 该功能在数据块级别运行,并根据群集大小使用固定块大小。 压缩引擎生成热度地图,用于确定块是否应有资格进行压缩,从而优化 CPU 使用率。
可以将 ReFS 重复数据删除和压缩作为一次性作业运行,或使用计划作业自动执行它。 此功能适用于全闪存和混合系统,并支持各种复原设置,例如双向镜像、嵌套双向镜像、三向镜像和镜像加速奇偶校验。
好处
下面是使用 ReFS 重复数据删除和压缩的好处:
- 活动工作负荷的存储节省。 专为活动工作负荷(如 VDI)设计,可确保在要求苛刻的环境中获得高效的性能。
- 多种模式。 以三种模式运行:仅重复数据删除、仅压缩和重复数据删除和压缩(默认模式),从而根据需要进行优化。
- 增量重复数据删除。 重复数据删除只会删除新的或更改的数据,而不是每次扫描整个卷,优化作业持续时间并减少对系统性能的影响。
先决条件
在开始之前,请确保满足以下先决条件:
- 你有权访问已部署并注册的 Azure Stack HCI 群集。
- 群集上创建了群集共享卷(CSV),并且你有权访问该卷。
- CSV 尚未启用 Windows 重复数据删除功能。
使用 ReFS 重复数据删除和压缩
可以通过 Windows Admin Center 或 PowerShell 使用 ReFS 重复数据删除和压缩。 PowerShell 允许手动和自动化作业,而 Windows Admin Center 仅支持计划作业。 无论使用哪种方法,都可以自定义作业设置,并利用文件更改跟踪来加快后续运行。
启用并运行 ReFS 重复数据删除和压缩
在 Windows Admin Center 中,可以创建 ReFS 重复数据删除和压缩计划,以便在创建卷期间在现有卷或新卷上运行。
按照以下步骤通过 Windows Admin Center 启用 ReFS 重复数据删除和压缩,并在其应运行时设置计划:
连接到群集,然后在 左侧的“工具 ”窗格中,选择“ 卷”。
在“卷”页上,选择“清单”选项卡,选择相应的卷,然后选择“设置”。 若要为新卷启用 ReFS 重复数据删除和压缩,请选择“ + 创建”。
在右侧的“卷设置”窗格的“更多选项”下拉列表下,选中“使用 ReFS 重复数据删除和压缩”复选框。
选择 ReFS 重复数据删除和压缩应运行的星期几、作业开始运行的时间以及最长持续时间(默认值为无限制),然后选择“ 保存”。
以下屏幕截图显示 ReFS 重复数据删除和压缩在星期五和星期六的上午 10:40 运行,最长持续时间为 2 小时,从 2023 年 9 月 22 日开始。 如果开始日期更改为 2023 年 9 月 21 日,第一次运行仍将是 2023 年 9 月 22 日上午 10:40,这是 2023 年 9 月 21 日之后的第一个星期五。
验证卷的 “属性” 部分中的更改。 计划显示在“ 属性” 部分下,并显示节省明细和下一个计划的运行时。 每次运行后都会更新这些节省,可以在“性能”部分下的图表中观察性能影响。
若要通过 PowerShell 使用 ReFS 重复数据删除和压缩,请先启用该功能,然后将其作为一次性手动作业运行,或自动将其作为计划作业运行。 作业在每个群集的 CSV 级别设置,可以根据模式、持续时间、系统资源使用情况等进行自定义。
启用 ReFS 重复数据删除和压缩
按照以下步骤通过 PowerShell 启用 ReFS 重复数据删除和压缩:
连接到 Azure Stack HCI 群集,以管理员身份运行 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
下面是 cmdlet 的示例输出 Get-ReFSDedupStatus
,其中 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。 此 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...
计划重复重复数据删除和压缩作业
设置递归计划以运行卷的存储优化。 然后,可以查看、设置或修改、暂停、恢复或清除作业计划。
若要设置或修改计划,请运行以下 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 重复数据删除和压缩会停止正在进行的任何运行,并取消将来的计划作业。 此外,不会保留相关的卷元数据,并停止文件更改跟踪。
禁用此功能时,它不会撤消重复数据删除或压缩,因为所有操作都在元数据层发生。 随着时间的推移,数据会返回其原始状态,因为卷会产生读取和写入。
按照以下步骤使用 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
除非是Dedup
,Type
否则避免在手动启动的作业中使用。
请遵循以下步骤作为临时解决方法来缓解此问题:
对卷禁用重复数据删除和压缩:
Disable-ReFSDedup -Volume <path>
使用 refsutil
以下命令解压缩卷:
refsutil compression /c /f NONE <vol>
根据需要,使用唯一模式重新启用 ReFS 重复数据删除和压缩 Dedup
:
Enable-ReFSDedup -Volume <path> -Type Dedup
状态: 打开。
作为建议的最佳做法,请考虑错开作业的开始时间以避免任何重叠。 但是,如果所有作业必须同时运行,请在所有 CSV 中调整每个作业的 CPU 分配,使其相当于整个群集 CPU 利用率的 50% 以下。 请记住,施加 CPU 限制可能会导致作业执行时间更长。
ReFS 重复数据删除和压缩作业已完成(已成功或已取消),并且存储节省未在或 Windows Admin Center 中 Get-ReFSDedupStatus
列出。
状态: 已解决。
此问题的临时解决方法是立即启动一次性作业并立即更新结果。
Start-ReFSDedupJob -Volume <path>
在卷上禁用 ReFS 重复数据删除和压缩后,发送已停止监视 Windows 事件跟踪(ETW) 事件。
状态: 已解决。
在卷上禁用 ReFS 重复数据删除和压缩后,ReFS 重复删除日志的 ETW 通道将重复停止监视事件。 但是,由于此问题,我们预计不会对使用量产生重大影响。
如果卷在压缩期间移动到另一个节点,则作业失败事件未记录。
状态: 已解决。
如果在压缩正在进行时将 CSV 移动到群集的另一台服务器,则作业失败事件不会记录在 ReFS 重复数据删除通道中。 但是,由于此问题,我们预计不会对使用量产生重大影响。
后续步骤