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.
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)
- 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).
- Conferma spazio libero: mantieni almeno 10–15 GB liberi su
C:
(meglio 20 GB). - Sospendi BitLocker prima del riavvio di update (se attivo):
manage-bde -protectors -disable C: -RebootCount 1
oSuspend-BitLocker -MountPoint C: -RebootCount 1
. - 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).
- 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:
- Impostazioni > Windows Update > Pausa aggiornamenti 7 giorni.
- Riavvia il server.
- 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):
- Esegui
msconfig
, scheda Servizi > spunta Nascondi tutti i servizi Microsoft > Disabilita tutto. - Scheda Avvio > apri Gestione attività > disabilita voci non Microsoft.
- 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
Area | Azione consigliata | Scopo |
---|---|---|
Risorse di sistema | Verificare 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 aggiornamenti | Mettere in pausa per 7 giorni, riavviare, quindi riprendere. | Forza il riavvio del servizio di update senza operazioni invasive. |
Pulizia cache Windows Update | Arrestare wuauserv e BITS → cancellare %SystemRoot%\SoftwareDistribution\Download e DataStore → riavviare i servizi. | Elimina file corrotti che possono bloccare l’installazione. |
Risolutore Windows Update | Eseguire il troubleshooter da Impostazioni > Aggiornamento e sicurezza > Risoluzione dei problemi avanzata. | Rileva e corregge automaticamente errori comuni. |
Verifica disco | chkdsk /f /r | Settori danneggiati o errori NTFS possono impedire la scrittura dei pacchetti di update. |
Installazione manuale | Scaricare 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 Viewer | Controllare log System e Application per codici errore durante l’update. | Fornisce indizi specifici (es. errore 0x800f0831). |
Windows Update Agent | Assicurarsi 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:
- Avvia in WinRE (Ambiente ripristino).
- Apri Prompt dei comandi e lancia:
dism /image:C:\ /cleanup-image /revertpendingactions
- 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
- Attività disco presente? Sì → attendi fino a 40 min; No → vai al punto 2.
- Spazio e integrità OK? Libera spazio, esegui
chkdsk
programmato eDISM /RestoreHealth
. - Cache pulita? Svuota
SoftwareDistribution
ecatroot2
, riavvia i servizi. - Policy/WSUS corretti?
gpupdate
, verifica chiaviWUServer
, prova scan manuale. - Ancora lento? Avvio pulito, sospendi AV, installazione manuale del KB.
- 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
- Conferma spazio > 15 GB su
C:
e sospendi BitLocker (se presente). - Pausa/Riprendi update + riavvio.
- Pulisci
SoftwareDistribution
ecatroot2
, riavvia servizi. - Esegui
DISM /ScanHealth
&/RestoreHealth
e quindisfc /scannow
. - Controlla Event Viewer per errori e codici KB.
- Avvio pulito e installazione manuale del KB se necessario.
- Se bloccato all’avvio: WinRE >
/revertpendingactions
> ciclo DISM. - 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.