Vysvětlení využití a výkonu komprimace disku VHD

Důležité

Připravovaná změna Windows, která je součástí aktualizace Windows Serveru z dubna 2026, se výchozí typ šifrování Kerberos mění z RC4 na AES-SHA1.

Sdílené složky hostující kontejnery FSLogix, které nejsou upgradované na AES-SHA1 můžou po použití této změny mít problémy s přístupem. Abyste se vyhnuli přerušení, dokončete upgrade tak, aby před instalací aktualizace AES-SHA1.

Na zákazníky, kteří už upgradovali na AES-SHA1, to nemá vliv.

Další informace najdete v blogu FSLogix: Vyžaduje se akce: Posílení zabezpečení protokolu Windows Kerberos (RC4) může mít vliv na profily FSLogix v úložišti SMB.

Pomocí protokolu událostí systému Windows můžete zjistit, jak často se používá komprimace disku virtuálního pevného disku, kolik místa se ukládá, a čas potřebný ke spuštění. Tady je několik ukázkových skriptů PowerShellu a dotazů Azure Log Analytics, které můžete použít k interpretaci událostí.

PowerShell

Skript metrik komprimace disku VHD

Tento příklad používá PowerShell k získání událostí komprimace disku VHD z předchozích 30 dnů naformátovaných do mřížky. Z příkazového řádku PowerShellu se zvýšenými oprávněními spusťte následující blok kódu:

# 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

Dotazy Azure Log Analytics

Důležité

Abyste mohli použít následující dotaz, musíte nejprve nakonfigurovat virtuální počítače tak, aby odesílaly protokoly událostí do pracovního prostoru služby Log Analytics. Další informace najdete v tématu Shromažďování zdrojů dat protokolu událostí Windows pomocí agenta Log Analytics. Protokoly, které se používají pro komprimace disku VHD, jsou:

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

Dotaz na metriky komprimace disku VHD

Čas strávený během operace VHD Disk Compact

Zobrazí průměrnou, minimální a maximální dobu strávenou během kompaktní operace. Data se shrnují na základě toho, jestli byl disk schopen komprimovat.

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

Tady je příklad výstupu:

Pruhový graf zobrazující výsledek spuštění dotazu Time Spent (Čas strávený dotazem)

Počet komprimovaných souborů VHD(x) kontejneru

Zobrazí, kolik souborů VHD(x) kontejneru bylo vybráno pro komprimace na základě prahových hodnot.

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

Tady je příklad výstupu:

Výsečový graf zobrazující počet komprimovaných souborů V H D (kontejnerů)

Celkový uložený prostor úložiště

Zobrazí množství úložiště v GB uvolněné během operace komprimace disku 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"))

Upozornění zpoždění protokolu Winlogon (odhlášení)

Zobrazí všechny služby, které způsobily Winlogon překročení 60sekundové prahové hodnoty. Zobrazuje počet výskytů společně s průměrnou a maximální dobou strávenou.

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

Tady je příklad výstupu:

Tabulka zobrazující služby, které překročily prahovou hodnotu Winlogonu