Windows Server 2022 21H2: aggiornamenti lenti o bloccati al 100%? Cause reali e soluzioni efficaci

Windows Server 2022 (21H2) può impiegare molto tempo per completare gli aggiornamenti, con la schermata “configuring updates 100%” che resta ferma per oltre 30 minuti. Qui trovi cause tecniche, come capire se è davvero bloccato e una procedura efficace per sbloccarlo senza rischi.

Indice

Sintomi e scenario

  • Durante o dopo il riavvio, la schermata mostra “100% completato” per 20–40 minuti (o più), senza avanzamenti apparenti.
  • Il comportamento ricorda i tempi di Windows Server 2016, specialmente su macchine con storage non ottimale o molte feature/ruoli installati.
  • Il server può risultare lento anche una volta entrato nel desktop, con TiWorker.exe (Windows Modules Installer Worker) che continua a lavorare in background.

Perché gli update sono lenti su Server 2022 21H2

Le cause più comuni si collocano in tre aree: servicing, risorse e integrazioni.

  • Servicing (CBS/WinSxS): l’architettura Component‑Based Servicing ri‑compone i componenti nella cartella WinSxS e finalizza file e manifest; su sistemi “vissuti” (molti aggiornamenti, ruoli e feature) questa fase può richiedere molto I/O casuale.
  • Risorse: colli di bottiglia su CPU, RAM e soprattutto storage (IOPS/latency) rallentano la finalizzazione. RAID con scritture penalizzate (es. RAID 5), snapshot aperti, spazio disco insufficiente e antivirus in scansione real‑time sono fattori ricorrenti.
  • Integrazioni: WSUS/SCCM, driver obsoleti (RAID/NIC), firmware vecchi o policy che influiscono sul servizio di update possono introdurre ritardi e loop di riprova.

Nota: su Windows Server 2022 gli aggiornamenti cumulativi includono anche il Servicing Stack, ma in scenari offline o con component store danneggiato può essere necessario un ripristino manuale.

Cosa fare subito: verifiche rapide (5–10 minuti)

  1. Controlla che non sia un “falso blocco”. Se il LED del disco o l’attività I/O in hypervisor continua, attendi (fino a 40 min è fisiologico su alcuni profili).
  2. Conferma spazio libero: mantieni almeno 10–15 GB liberi su C: (meglio 20 GB).
  3. Sospendi BitLocker prima del riavvio di update (se attivo): manage-bde -protectors -disable C: -RebootCount 1 o Suspend-BitLocker -MountPoint C: -RebootCount 1.
  4. Disabilita temporaneamente la protezione in tempo reale dell’antivirus durante la fase di installazione (se la tua policy di sicurezza lo consente e solo nella finestra di manutenzione).
  5. Evita snapshot persistenti: crea lo snapshot appena prima della manutenzione e rimuovilo appena verificata la stabilità; tenere snapshot aperti degrada sensibilmente le performance I/O.

Procedura di risoluzione: ordine consigliato

Verifica risorse e colli di bottiglia

Da sessione RDP o console:

resmon.exe

Oppure PowerShell per I/O e CPU:

# Utilizzo CPU e memoria in tempo reale (10 campioni)
Get-Counter '\Processor(_Total)\% Processor Time','\Memory\Available MBytes' -SampleInterval 1 -MaxSamples 10

Latenza e throughput disco (tutti i dischi)

Get-Counter '\PhysicalDisk()\Avg. Disk sec/Transfer','\PhysicalDisk()\Disk Transfers/sec' -SampleInterval 1 -MaxSamples 10 

Pausa e ripresa degli aggiornamenti

Spesso “risveglia” i componenti senza azioni invasive:

  1. Impostazioni > Windows Update > Pausa aggiornamenti 7 giorni.
  2. Riavvia il server.
  3. Torna in Windows Update e Riprendi aggiornamenti, quindi cerca nuovi update.

Pulizia della cache di Windows Update

Arresta i servizi, elimina cache e riparti:

net stop wuauserv
net stop bits
net stop cryptsvc
net stop msiserver

rd /s /q %SystemRoot%\SoftwareDistribution
rd /s /q %SystemRoot%\System32\catroot2

net start msiserver
net start cryptsvc
net start bits
net start wuauserv 

In PowerShell (e con log minimale):

Stop-Service wuauserv,bits,cryptsvc,msiserver -Force
Remove-Item "$env:SystemRoot\SoftwareDistribution" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$env:SystemRoot\System32\catroot2" -Recurse -Force -ErrorAction SilentlyContinue
Start-Service msiserver,cryptsvc,bits,wuauserv

Controllo integrità component store

Dism /Online /Cleanup-Image /ScanHealth
Dism /Online /Cleanup-Image /RestoreHealth
sfc /scannow

Se /RestoreHealth fallisce per sorgenti mancanti, fornisci una ISO compatibile:

DISM /Online /Cleanup-Image /RestoreHealth /Source:WIM:D:\sources\install.wim:1 /LimitAccess

(Sostituisci D: con la lettera della ISO montata e l’indice :1 con l’edizione corretta. /LimitAccess evita Windows Update in rete.)

Verifica e correzione del file system

Programma un controllo del disco (richiede riavvio, finestra di manutenzione):

chkdsk C: /f /r

Installazione manuale (offline)

Scarica il pacchetto cumulativo o lo specifico KB da un repository aziendale o dal catalogo ufficiale, copia sul server e installa con wusa:

wusa C:\Temp\NomePacchetto.msu /quiet /norestart

Oppure, per .cab:

dism /Online /Add-Package /PackagePath:C:\Temp\update.cab

Avvio pulito (Clean Boot)

Per isolare conflitti con software di terze parti (AV, agent di backup, monitoraggio):

  1. Esegui msconfig, scheda Servizi > spunta Nascondi tutti i servizi Microsoft > Disabilita tutto.
  2. Scheda Avvio > apri Gestione attività > disabilita voci non Microsoft.
  3. Riavvia, riprova l’update. Ripristina le voci dopo il successo.

Event Viewer: dove guardare

  • Registri di Windows > Sistema e Applicazione (filtra per Error/Warning nell’intervallo dei riavvii).
  • Applications and Services Logs > Microsoft > Windows > WindowsUpdateClient > Operational.
  • Applications and Services Logs > Microsoft > Windows > Servicing.

Errori frequenti: 0x800f0831 (dipendenza mancante), 0x800f0922 (spesso spazio/servicing), 0x80073701 (manifest mancanti). Annota il KB interessato.

Aggiornamento dell’agent e dei componenti

  • Verifica che il servizio Windows Modules Installer (TrustedInstaller) sia in esecuzione: sc query trustedinstaller.
  • Controlla presenza di pending reboot prima di riprovare:
# PowerShell - pending reboot?
Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'

Tabella: risposta e soluzioni proposte

AreaAzione consigliataScopo
Risorse di sistemaVerificare consumo di CPU, RAM e I/O disco.Un collo di bottiglia hardware può rallentare la fase di “configuring updates”.
ConnettivitàControllare latenza e perdita di pacchetti sulla rete.Download e validazione degli aggiornamenti dipendono da una rete stabile.
Pausa/Riprendi aggiornamentiMettere in pausa per 7 giorni, riavviare, quindi riprendere.Forza il riavvio del servizio di update senza operazioni invasive.
Pulizia cache Windows UpdateArrestare wuauserv e BITS → cancellare %SystemRoot%\SoftwareDistribution\Download e DataStore → riavviare i servizi.Elimina file corrotti che possono bloccare l’installazione.
Risolutore Windows UpdateEseguire il troubleshooter da Impostazioni > Aggiornamento e sicurezza > Risoluzione dei problemi avanzata.Rileva e corregge automaticamente errori comuni.
Verifica discochkdsk /f /rSettori danneggiati o errori NTFS possono impedire la scrittura dei pacchetti di update.
Installazione manualeScaricare il pacchetto dal catalogo ufficiale e installarlo offline.Bypass dell’agente di update integrato.
Avvio pulito (Clean Boot)Disabilitare servizi non‑Microsoft e voci di avvio, poi riavviare.Isola eventuali conflitti con software di terze parti (AV, backup, monitoraggio).
Event ViewerControllare log System e Application per codici errore durante l’update.Fornisce indizi specifici (es. errore 0x800f0831).
Windows Update AgentAssicurarsi che l’agente sia all’ultima versione e che TrustedInstaller funzioni.Corregge bug noti nelle versioni precedenti.

Come capire se è davvero bloccato

  • Disco attivo: se l’attività disco è intermittente ma presente, è meglio attendere. Interrompere in questa fase può corrompere il component store.
  • Log in tempo reale: quando accessibile il desktop, verifica: Get-WinEvent -LogName "Microsoft-Windows-Servicing/Operational" -MaxEvents 50 | Format-Table TimeCreated,Id,LevelDisplayName,Message -Auto Get-Process tiworker,trustedinstaller | Select-Object Name,CPU,Id,StartTime
  • WindowsUpdate.log: ricostruiscilo se necessario (post‑riavvio): Get-WindowsUpdateLog -LogPath C:\Temp\WindowsUpdate.log

Procedure avanzate (usare con cautela)

Reimpostazione completa dei componenti di Windows Update

Oltre alla pulizia di SoftwareDistribution e catroot2, in rari casi può servire ripristinare registrazioni dei componenti BITS/WUA. Su Server 2022 è di rado necessario, ma può aiutare in ambienti migrati:

net stop bits
net stop wuauserv
net stop appidsvc
net stop cryptsvc

Del "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader\qmgr*.dat"

net start cryptsvc
net start appidsvc
net start wuauserv
net start bits 

Ripristino da avvio (update rimasto “pending”)

Se il sistema non supera la schermata “configuring updates” per oltre 90 minuti e non c’è attività disco, valuta un riavvio forzato in finestra di manutenzione. Se non riparte:

  1. Avvia in WinRE (Ambiente ripristino).
  2. Apri Prompt dei comandi e lancia: dism /image:C:\ /cleanup-image /revertpendingactions
  3. Riavvia, accedi e ripeti la pulizia di SoftwareDistribution + DISM /RestoreHealth.

Attenzione: /revertpendingactions annulla gli aggiornamenti in corso; usalo solo se l’avvio è compromesso.

Ottimizzazione del component store

Per ridurre i tempi delle future installazioni (non durante l’emergenza):

Dism /Online /Cleanup-Image /StartComponentCleanup

Facoltativo e irreversibile (non in ambienti che richiedono roll‑back):

Dism /Online /Cleanup-Image /StartComponentCleanup /ResetBase

Gestione WSUS/SCCM

  • Verifica che il client punti al server giusto: reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v WUServer reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v WUStatusServer
  • Forza un refresh policy e lo stato: gpupdate /force wuauclt /detectnow usoclient StartScan
  • Se il WSUS usa “Express updates”, su storage lento valuta di disabilitarli lato server o di distribuire i pacchetti completi per ridurre CPU/I/O lato client durante la ricostruzione.
  • Esegui periodicamente la manutenzione del WSUS (Server Cleanup, re‑index DB) per evitare offerte duplicate o scadute che confondono il client.

Driver, firmware e BIOS/UEFI

Driver del controller RAID/NVMe, firmware di dischi e BIOS/UEFI obsoleti possono impattare la fase di post‑installazione. Aggiornali fuori finestra di rischio, uno per volta, validando tra un passo e l’altro.

Decision tree operativo

  1. Attività disco presente? Sì → attendi fino a 40 min; No → vai al punto 2.
  2. Spazio e integrità OK? Libera spazio, esegui chkdsk programmato e DISM /RestoreHealth.
  3. Cache pulita? Svuota SoftwareDistribution e catroot2, riavvia i servizi.
  4. Policy/WSUS corretti? gpupdate, verifica chiavi WUServer, prova scan manuale.
  5. Ancora lento? Avvio pulito, sospendi AV, installazione manuale del KB.
  6. Boot bloccato? WinRE + /revertpendingactions, poi ciclo DISM/SFC.

Monitoraggio in tempo reale

Per sapere se TiWorker.exe sta ancora lavorando e quanto “pesa”:

Get-Process TiWorker,TrustedInstaller | Select-Object Name,CPU,PM,StartTime
Get-WinEvent -FilterHashtable @{LogName='System'; Id=20,43,44,1001} -MaxEvents 100 | Sort-Object TimeCreated -Descending | Select TimeCreated, Id, ProviderName, LevelDisplayName, Message

Best practice per minimizzare i tempi in futuro

  • Pianifica manutenzioni regolari per evitare backlog di aggiornamenti cumulativi troppo grandi.
  • Evita snapshot longevi: eseguili solo per la finestra di update e rimuovili dopo il check.
  • Dimensiona correttamente lo storage: mira a latenza < 5 ms e IOPS adeguati al carico; prediligi cache/SSD per C:.
  • Spazio libero: mantieni un buffer minimo di 15–20 GB.
  • Ottimizza l’antivirus: escludi cartelle temporanee di update (%windir%\SoftwareDistribution, %windir%\Logs\CBS) se la policy lo consente.
  • Allinea driver/firmware di storage e rete a versioni supportate.
  • Automatizza i pre‑check (spazio, pending reboot, stato servizi) con script PowerShell prima di ogni ciclo di patching.

Script PowerShell “pre‑patch” (riutilizzabile)

Questo script esegue controlli rapidi e, se autorizzi, pulisce la cache di Windows Update.

# Pre‑patch quick check per Windows Server 2022
Eseguire in PowerShell con privilegi elevati

Write-Host "== Pre‑Patch Check =="

$errors = @()

Spazio libero

$sys = Get-PSDrive -Name C
if ($sys.Free -lt 20GB) {
$errors += "Spazio insufficiente su C: ($([math]::Round($sys.Free/1GB,1)) GB liberi)"
}

Pending reboot

$pending = Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'
if ($pending) { $errors += "Riavvio in sospeso rilevato (RebootPending)" }

Servizi critici

"wuauserv","bits","cryptsvc","trustedinstaller" | ForEach-Object {
$s = Get-Service $_ -ErrorAction SilentlyContinue
if ($null -eq $s) { $errors += "Servizio $_ non trovato" }
elseif ($s.Status -ne "Running" -and $_ -ne "trustedinstaller") {
$errors += "Servizio $_ non in esecuzione (stato: $($s.Status))"
}
}

if ($errors.Count -gt 0) {
Write-Warning ("Problemi rilevati:`n - " + ($errors -join "`n - "))
} else {
Write-Host "Nessun problema critico rilevato."
}

Pulizia cache (opzionale)

$answer = Read-Host "Pulire la cache di Windows Update ora? (y/n)"
if ($answer -match 'y|Y') {
Stop-Service wuauserv,bits,cryptsvc,msiserver -Force
Remove-Item "$env:SystemRoot\SoftwareDistribution" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$env:SystemRoot\System32\catroot2" -Recurse -Force -ErrorAction SilentlyContinue
Start-Service msiserver,cryptsvc,bits,wuauserv
Write-Host "Cache pulita. Esegui una nuova ricerca aggiornamenti."
} 

FAQ essenziali

È normale attendere 20–40 minuti al 100%?
Sì, specialmente su sistemi con molto software installato o storage lento. Se l’attività disco persiste, attendi.

Quando devo intervenire?
Se non c’è attività disco per > 15 min e il sistema resta fermo oltre 60–90 min complessivi, passa alla procedura di ripristino (riavvio controllato, WinRE, /revertpendingactions).

Posso cancellare file nella cartella WinSxS?
No, è non supportato. Usa solo DISM (/StartComponentCleanup) e le opzioni documentate.

Devo installare prima l’SSU?
Su Server 2022 gli SSU sono generalmente inclusi nei cumulativi recenti; in scenari offline o rollback potresti dover applicare un SSU precedente, ma di norma non serve.

WSUS può rallentare gli update?
Sì, soprattutto con Express updates e server WSUS non ottimizzato. Mantieni il WSUS pulito e coerente e valuta il pacchetto completo per i server più lenti.

Note operative importanti

  • Snapshot/backup: se virtualizzato, crea uno snapshot immediatamente prima della manutenzione e rimuovilo dopo i test; su fisico assicurati di avere un backup recente.
  • Driver/firmware: aggiorna controller RAID/NIC e BIOS/UEFI per ridurre incompatibilità durante il post‑install.
  • Tempi di attesa “normali”: su alcune configurazioni la fase finale può richiedere 20–40 min; non interrompere se il disco è attivo.
  • Monitoraggio: usa Resource Monitor o PowerShell (Get-Process TiWorker, Get-WinEvent) per capire se l’installazione è viva.

Checklist finale pronta all’uso

  1. Conferma spazio > 15 GB su C: e sospendi BitLocker (se presente).
  2. Pausa/Riprendi update + riavvio.
  3. Pulisci SoftwareDistribution e catroot2, riavvia servizi.
  4. Esegui DISM /ScanHealth & /RestoreHealth e quindi sfc /scannow.
  5. Controlla Event Viewer per errori e codici KB.
  6. Avvio pulito e installazione manuale del KB se necessario.
  7. Se bloccato all’avvio: WinRE > /revertpendingactions > ciclo DISM.
  8. Ottimizza storage/driver e rimuovi snapshot appena concluso.

Conclusioni

La lentezza degli aggiornamenti su Windows Server 2022 21H2 è quasi sempre legata a I/O e manutenzione del component store. Seguendo l’ordine proposto—verifiche rapide, pulizia cache, DISM/SFC, installazione manuale e, solo in caso di blocco reale, ripristino da WinRE—si risolvono nella grande maggioranza dei casi i blocchi prolungati e si riducono i tempi delle patch future.


Indice