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
    • 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 查询。

后续步骤