VHD 磁盘压缩
VHD 磁盘压缩是每次用户注销时运行的进程。压缩过程旨在根据预定义的阈值自动减少用户容器的存储量。 在注销阶段,FSLogix 会评估磁盘以确定是否应运行磁盘压缩。
注意
VHD 磁盘压缩会影响配置文件和 ODFC 容器(包括 云缓存 配置)
VHD 磁盘压缩 默认处于启用状态 。 如果要禁用它,请参阅 “禁用 VHD 磁盘压缩”。
压缩过程依赖于 优化驱动器 服务(defragsvc)。 此服务通过使用 GetSupportedSize 方法中的 SizeMin 参数查询 MSFT_Partition API 来确定支持的最小大小。 此操作将考虑不可移动文件的位置(即无法移动的文件)。 有关详细信息,请参阅 MSFT_Partition 类的 GetSupportedSize 方法。
重要
如果优化驱动器服务的 StartupType(defragsvc)设置为“已禁用”,VHD 磁盘压缩将无法查询支持的最小大小,并且进程不会运行。 无论服务状态是“正在运行”还是“已停止”,都必须将服务 StartupType 设置为“手动”或“自动”。
必须使用动态扩展虚拟硬盘;无法压缩固定大小的虚拟硬盘。
确定 VHD 磁盘压缩何时运行
FSLogix 确定每次用户注销时是否运行压缩过程。如果满足以下条件,VHD 磁盘压缩将运行:
- 容器的大小必须大于 1 GB(磁盘大小)。
- 磁盘上使用的大小(A)与查询的最小大小(B)之间的差异(C)。 差异必须大于或等于容器(A)中消耗大小的 20%。
差异的计算方式如下:
- A - B = C
- 如果 C ≥ (A x 0.2),则压缩运行。
- 如果 C < (A x 0.2),则压缩不会运行。
示例方案
下面是几个示例:
示例 1:容器的消耗大小为 6GB。 调用 GetSupportedSize 时,生成的最小大小为 2.5GB:
- 6 - 2.5 = 3.5 GB
- 6 GB 的 20% = 1.2 GB
- 3.5 GB 大于 1.2 GB,压缩运行。
示例 2:容器的消耗大小为 12GB。 调用 GetSupportedSize 时,生成的最小大小为 10GB:
- 12 - 10 = 2 GB
- 20% 的 12 GB = 2.4 GB
- 2 GB 小于 2.4 GB,压缩不会运行。
示例表:
容器 | 已修复/动态 | 配置的大小 | 已用大小 | 支持的大小 | 压缩吗? |
---|---|---|---|---|---|
<username> profile_.vhdx |
动态 | 30 GB | 6 GB | 2.5 GB | 是 |
<username> profile_.vhdx |
动态 | 30 GB | 12 GB | 10 GB | 否 |
<username> profile_.vhdx |
固定 | 30 GB | 30 GB | 不可用 | 否 |
用户体验
压缩运行时,用户会看到等待 FSLogix 应用服务一段时间的消息。 根据要恢复的空间,压缩过程应平均需要 20 - 30 秒。 第一个压缩操作最长,基于可恢复的空间和其他计算资源因素。
每次后续注销应更快,因为压缩的数据量应减少。 VHD 磁盘压缩最多可以运行 5 分钟。 如果达到此最大值,操作将结束,注销将继续。 在下一次注销期间,操作将从上一状态恢复。
Winlogon 事件
VHD 磁盘压缩在用户注销时运行,这是过程的一部分 Winlogon
。 每当进程导致注销时间超过 60 秒时,进程 Winlogon
都会创建警告事件。 这些警告正常且预期。 压缩过程可能会超过 60 秒,具体取决于 VHD(x) 的大小和要恢复的空间。 阈值 Winlogon
是固定值,无法更改。
请参阅 Log Analytics 查询的 Winlogon (注销) 延迟警告 ,以显示超过 60 秒阈值的操作数及其持续时间。