Descripción del uso y el rendimiento de la compactación de discos VHD

Importante

Un próximo cambio en Windows, incluido en la actualización de abril de 2026 de Windows Server, el tipo de cifrado Kerberos predeterminado cambia de RC4 a AES-SHA1.

Los recursos compartidos de archivos que hospedan contenedores de FSLogix que no se actualizan a AES-SHA1 podrían tener problemas de acceso después de aplicar este cambio. Para evitar interrupciones, complete la actualización a AES-SHA1 antes de instalar la actualización.

Los clientes que ya se han actualizado a AES-SHA1 no se ven afectados.

Para obtener más información, consulte el blog de FSLogix: Acción necesaria: Protección de Windows Kerberos (RC4) puede afectar a los perfiles de FSLogix en el almacenamiento SMB.

Puede usar el registro de eventos de Windows para comprender la frecuencia con la que se usa VHD Disk Compaction, el espacio guardado y el tiempo necesario para ejecutarse. Estos son algunos scripts de PowerShell de ejemplo y consultas de Azure Log Analytics que puede usar para ayudarle a interpretar los eventos.

PowerShell

Script de métricas de VHD Disk Compaction

En este ejemplo se usa PowerShell para obtener los eventos VHD Disk Compaction de los 30 días anteriores, con formato en una cuadrícula. Desde un símbolo del sistema de PowerShell con privilegios elevados, ejecute el siguiente bloque de código:

# Set startTime to number of days to search the event logs
$startTime = (Get-Date).AddDays(-30)

# Query Event Log using Get-WinEvent filtered to the VHD Disk Compaction metric events
$diskCompactionEvents = Get-WinEvent -FilterHashtable @{
    StartTime       = $startTime
    ProviderName    = 'Microsoft-FSLogix-Apps'
    ID         = 57
}

# Format event properties
$compactionMetrics = $diskCompactionEvents | Select-Object `
    @{l="Timestamp";e={$_.TimeCreated}},`
    @{l="ComputerName";e={$_.MachineName}},`
    @{l="Path";e={$_.Properties[0].Value}},`
    @{l="WasCompacted";e={$_.Properties[1].Value}},`
    @{l="TimeSpent(sec)";e={[math]::round($_.Properties[7].Value / 1000,2)}},`
    @{l="MaxSize(GB)";e={[math]::round($_.Properties[2].Value / 1024,2)}},`
    @{l="MinSize(GB)";e={[math]::round($_.Properties[3].Value / 1024,2)}},`
    @{l="InitialSize(GB)";e={[math]::round($_.Properties[4].Value / 1024,2)}},`
    @{l="FinalSize(GB)";e={[math]::round($_.Properties[5].Value / 1024,2)}},`
    @{l="SavedSpace(GB)";e={[math]::round($_.Properties[6].Value / 1024,2)}}

# Display metrics in Out-GridView
$compactionMetrics | Out-GridView

Consultas de Azure Log Analytics

Importante

Para usar la consulta siguiente, primero debe configurar las máquinas virtuales para enviar sus registros de eventos a un área de trabajo de Log Analytics. Para obtener más información, consulte Recopilación de orígenes de datos del registro de eventos de Windows con el agente de Log Analytics. Los registros que se usan para la compactación de disco VHD son:

  • Microsoft-FSLogix-Apps/Operational
  • Microsoft-FSLogix-Apps/Admin

Consulta de métricas de VHD Disk Compaction

Tiempo invertido durante la operación de VHD Disk Compact

Muestra el tiempo medio, mínimo y máximo invertido durante la operación compacta. Los datos se resumen en función de si el disco pudo compactarse.

Event
| where EventLog == 'Microsoft-FSLogix-Apps/Operational' and EventID == 57
| parse kind=relaxed EventData with *
    "<Data Name=\"Path\">" Path
    "</Data><Data Name=\"WasCompacted\">" DiskCompaction
    "</Data><Data Name=\"MaxSupportedSizeMB\">" MaxSupportedSizeMB
    "</Data><Data Name=\"MinSupportedSizeMB\">" MinSupportedSizeMB
    "</Data><Data Name=\"SizeBeforeMB\">" SizeBeforeMB
    "</Data><Data Name=\"SizeAfterMB\">" SizeAfterMB
    "</Data><Data Name=\"SavedSpaceMB\">" SavedSpaceMB
    "</Data><Data Name=\"TimeSpentMillis\">" TimeSpentMillis "</Data>" *
| extend TimeSpent = todecimal(TimeSpentMillis) / 1024
| where DiskCompaction <> ""
| summarize Average=round(avg(TimeSpent),2), Max=round(max(TimeSpent),2), Min=round(min(TimeSpent),2) by DiskCompaction

A continuación, presentamos un ejemplo de la salida:

Gráfico de barras que muestra el resultado de ejecutar la consulta De tiempo invertido

Número de archivos VHD(x) de contenedor compactados

Muestra cuántos archivos VHD(x) de contenedor se seleccionaron para la compactación en función de los valores de umbral.

Event
| where EventLog == 'Microsoft-FSLogix-Apps/Operational' and EventID == 57
| parse kind=relaxed EventData with *
    "<Data Name=\"Path\">" Path
    "</Data><Data Name=\"WasCompacted\">" DiskCompaction
    "</Data><Data Name=\"MaxSupportedSizeMB\">" MaxSupportedSizeMB
    "</Data><Data Name=\"MinSupportedSizeMB\">" MinSupportedSizeMB
    "</Data><Data Name=\"SizeBeforeMB\">" SizeBeforeMB
    "</Data><Data Name=\"SizeAfterMB\">" SizeAfterMB
    "</Data><Data Name=\"SavedSpaceMB\">" SavedSpaceMB
    "</Data><Data Name=\"TimeSpentMillis\">" TimeSpentMillis "</Data>" *
| where DiskCompaction <> ""
| summarize NumberOfVhdContainers=count() by DiskCompaction

A continuación, presentamos un ejemplo de la salida:

Gráfico circular que muestra el número de archivos V HD (contenedores) compactados

Espacio de almacenamiento total guardado

Muestra la cantidad de almacenamiento en GB reclamados durante la operación de compactación de disco VHD.

Event
| where EventLog == 'Microsoft-FSLogix-Apps/Operational' and EventID == 57
| parse kind=relaxed EventData with *
    "<Data Name=\"Path\">" Path
    "</Data><Data Name=\"WasCompacted\">" DiskCompaction
    "</Data><Data Name=\"MaxSupportedSizeMB\">" MaxSupportedSizeMB
    "</Data><Data Name=\"MinSupportedSizeMB\">" MinSupportedSizeMB
    "</Data><Data Name=\"SizeBeforeMB\">" SizeBeforeMB
    "</Data><Data Name=\"SizeAfterMB\">" SizeAfterMB
    "</Data><Data Name=\"SavedSpaceMB\">" SavedSpaceMB
    "</Data><Data Name=\"TimeSpentMillis\">" TimeSpentMillis "</Data>" *
| extend Storage = todecimal(SavedSpaceMB)
| summarize StorageSavings = (format_bytes(sum(Storage * 1024 * 1024),2,"GB"))

Advertencias de retraso de Winlogon (cierre de sesión)

Muestra cualquier servicio que haya provocado Winlogon que supere el umbral de 60 segundos. Muestra el número de repeticiones junto con el promedio y el tiempo máximo invertido.

Event
| where Source == 'Microsoft-Windows-Winlogon' and EventID == 6006
| parse kind=relaxed ParameterXml with "<Param>" ServiceName "</Param><Param>" Duration "</Param><Param>" EventType "</Param><Param>-</Param>"
| extend TimeInSeconds = todecimal(Duration)
| where EventType == "Logoff"
| summarize Occurrences=count(),Average=round(avg(TimeInSeconds),2), Minimum=round(min(TimeInSeconds),2), Maximum=round(max(TimeInSeconds),2) by ServiceName

A continuación, presentamos un ejemplo de la salida:

Tabla que muestra los servicios que superaron el umbral de Winlogon