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 秒阈值的操作数及其持续时间。

后续步骤