Windows Vista & Server 2008 - Perchè la cartella WinSXS è così grande?

Ciao a tutti!

Oggi parleremo di un argomento che sta a cuore a molti nella rete. Infatti diversi utenti ci segnalano di avere problemi di spazio sul disco C: e ci chiedono per quale motivo la cartella C:\Windows\Winsxs risulta occupare anche decine di Gigabytes.

Innanzitutto, è bene descrivere che cos’è la cartella Winsxs. Semplicemente, essa contiene tutti i componenti (files binari, catalog e descrittori XML) di Windows. Per questo motivo la cartella è anche chiamata component store. La cartella è l’unico luogo in cui i componenti sono memorizzati; tutte le altre istanze dei files di sistema sono collegate in modo univoco alle risorse salvate in Winsxs. Questo ci spiega facilmente perchè la cartella è grande, e perchè aumenta sempre di dimensioni nel tempo: infatti ogni volta che installeremo un aggiornamento del Sistema Operativo, verranno mantenute in memoria sia le vecchie che la nuova versione di ogni componente.

In verità la cartella non consuma tanto spazio su disco come sembra. Quasi tutti i files nella directory sono “hard link” di files presenti da qualche altra parte nel sistema, come ad esempio in C:\Windows\system32 ; ciò significa che possono essere considerati due volte (o più) nel conteggio generale dello spazio occupato su disco quando lo visualizziamo tramite Explorer, anche se fisicamente su disco è presente una volta sola. Ad esempio nel mio caso la cartella risulta di oltre 4 Gb:

image

Esiste uno script che ci permette di ottenere in output il numero di hard links e la VERA dimensione della cartella Winsxs che sarà minore di quanto dichiarato da explorer. Nel mio caso è di circa 2 Gb:

image

Per farlo, è necessario installare il Windows Resource Kit (scaricabile da qui ) e copiare nella stessa cartella il file hdfilesize.vbs. Il comando da eseguire è:

cscript hdfilesize.vbs c:\windows\winsxs

Ricordandosi di accedere da Prompt dei Comandi (eseguendolo come Amministratore) alla cartella dove sono stati scaricati i files

Fatta questa premessa, è opportuno rammentare che per risparmiare spazio è fortemente sconsigliato cancellare manualmente i contenuti della cartella Winsxs . Cancellarla avrebbe lo stesso effetto di cancellare C:\Windows o C:\Windows\system32!!! Ad ogni modo, per ridurne le dimensioni, è presente un meccanismo automatico di “scavenging” che nel tempo cancellerà i files obsoleti in Winsxs .

Se ciò non bastasse, esiste un tool automatico, incluso nel Sistema Operativo, che “pulisce” il contenuto di Winsxs di tutti i files vecchi e non più utilizzati permettendoci di guadagnare qualche Gigabyte di spazio.

Per Windows Vista/2008 Service Pack 1 il tool si chiama The Windows Vista Service Pack 1 (SP1) Files Removal Tool (Vsp1cln.exe)

Attenzione: applicando questo commando NON sarà più possibile disinstallare SP1 perchè verranno rimossi tutti i files precedenti relativi all’installazione RTM.

http://technet.microsoft.com/en-us/library/cc709655(WS.10).aspx

In Vista/2008 Service Pack 2 invece Vsp1cln.exe è stato sostituito con Compcln.exe ma la funzionalità è la stessa.

Attenzione: in questo caso verranno rimossi tutti i files relativi a RTM e SP1. Non sarà quindi più possibile disinstallare la SP2.

Entrambi i comandi vanno eseguiti da Command Prompt in modalità Administrator digitando semplicemente

vsp1cln

oppure

compcln

e confermando con “Y” la scelta.

I files che non vengono rimossi dopo l’esecuzione di questi comandi vanno in ogni caso mantenuti. Tuttavia, esiste una eccezione, la sottocartella C:\Windows\Winsxs\ManifestCache , i contenuti della quale possono essere rimossi senza creare problemi.

In tale cartella sono presenti files del tipo <ID>_blobs.bin che funzionano da cache per gli updates non ancora installati. Normalmente, se viene installato l’update i files dovrebbero essere rimossi da ManifestCache, ma rimangono presenti in caso contrario. In alcuni casi, le dimensioni possono arrivare anche a centinaia di Gigabytes. Tuttavia, eliminarli non è un problema. Così facendo però gli aggiornamenti verrebbero ri-scaricati e i file automaticamente ricreati. Un trucco per evitarlo è:

  • Rinominare l’estensione del file originale a *.temp o *.old
  • Crearne uno vuoto con lo stesso identico nome
  • Modificare le permission del file nuovo in modo che nessuno possa modificarlo (read-only)

Ulteriori informazioni su Winsxs sono disponibili ai seguenti link:

In ogni caso, la migliore idea per fare spazio sul disco C: è sempre cancellare i files temporanei e quelli che non ci servono più, oltre ad eseguire regolarmente il Disk Cleanup Tool (cleanmgr.exe)

Ciao e alla prossima!

Stefano Gagliardi
Support Engineer
Microsoft Enterprise Platform Support

HDFileSize.vbs.txt