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
- 20% 6 GB = 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 |
Fixed | 30 GB | 30 GB | N/A | 否 |
用户体验
当压缩操作进行时,用户会在一段时间内看到消息 等待 FSLogix 应用服务。 根据要恢复的空间,压缩过程应平均需要 20 - 30 秒。 第一个压缩操作是最长的,其依据是可回收空间和其他计算资源因素。
随着所需压缩的数据量减少,每次后续的退出操作应更快。 VHD 磁盘压缩最多可以运行 5 分钟。 如果达到此最大值,操作将结束,但注销将继续。 下一次注销时,操作将从先前状态恢复。
Winlogon 事件
VHD 磁盘压缩在用户注销时运行,该过程是 Winlogon 的一部分。 每当进程导致注销时间超过 60 秒时,进程 Winlogon 都会创建警告事件。 这些警告正常且预期。 压缩过程可能会超过 60 秒,具体取决于 VHD(x) 的大小和要恢复的空间。 阈值 Winlogon 是固定值,无法更改。
请参阅 Winlogon(注销)延迟警告,以获取用于显示超过60秒阈值的操作数量及其持续时间的 Log Analytics 查询。