Perché la cartella / winsxs diventa così grande e può essere ridotta?


174

Una macchina virtuale Vista che utilizzo ha solo un disco rigido virtuale da 10 GB - e sono preoccupato che rimanga senza spazio nel tempo.

Ho usato TreeSize per verificare i colpevoli ..

inserisci qui la descrizione dell'immagine

E il colpevole principale è quello /winsxso la cartella "Windows side-by-side" .

inserisci qui la descrizione dell'immagine

Che cos'è la cartella Windows Side by Side? Bene, questo è spiegato abbastanza bene qui .

Tutti i componenti nel sistema operativo si trovano nella cartella WinSxS - infatti chiamiamo questa posizione l'archivio componenti. Ogni componente ha un nome univoco che include la versione, la lingua e l'architettura del processore per cui è stato creato. La cartella WinSxS è l'unica posizione in cui è stato trovato il componente sul sistema, tutte le altre istanze dei file che vedi sul sistema sono "proiettate" tramite collegamenti diretti dall'archivio componenti. Consentitemi di ripetere l'ultimo punto: esiste solo un'istanza (o copia completa dei dati) di ciascuna versione di ciascun file nel sistema operativo e tale istanza si trova nella cartella WinSxS. Quindi, da quel punto di vista, la cartella WinSxS è in realtà l'intero sistema operativo, indicato come "piatto" nei sistemi operativi di livello inferiore.

Questo spiega perché la cartella inizia in grande, ma non perché si ingrandisce nel tempo: la risposta a questa domanda è la manutenzione. Nelle versioni precedenti di Windows l'unità atomica di manutenzione era il file, in Windows Vista è il componente. Quando aggiorniamo un determinato binario rilasciamo una nuova versione dell'intero componente e quella nuova versione viene archiviata insieme a quella originale nell'archivio componenti. La versione superiore del componente viene proiettata sul sistema, ma la versione precedente nel negozio non viene toccata. Il motivo è la terza parte del motivo per cui l'archivio componenti diventa così grande.

Molte altre persone che si lamentano della dimensione della cartella / winsxs :

Un collega ha recentemente ricevuto il suo aggiornamento del laptop ogni due anni e stava caricando il suo nuovo laptop con Vista. Per qualche motivo, il suo disco rigido C: era partizionato a soli 25 GB e il resto dello spazio riservato a un'unità molto più grande D :.

Ad ogni modo, dopo aver caricato molti aggiornamenti di Windows, è rimasto quasi senza spazio su disco in C :, e per qualche ragione, la directory di WinSxS era passata a oltre 8 GB.

Sebbene sapessi a cosa servisse la directory WinSxS (Windows side-by-Side), non ero del tutto sicuro del motivo per cui quella directory sarebbe esplosa in dimensioni così velocemente con i normali aggiornamenti del sistema operativo.

Non mi importa di avere tutti questi file duplicati per la sicurezza, ma io faccio a cuore la VM esplodere a causa di un errore di spazio su disco. Quindi ... Can / Winsxs può essere ridotto in modo sicuro in qualche modo? Non sembra che possa essere ..

Gli amministratori non dovrebbero, per nessun motivo, assumersi la responsabilità di ripulire la directory / winsxs - ciò potrebbe impedire a Windows Update e MSI di funzionare correttamente in seguito. La prevenzione dell'eliminazione accidentale dalla directory viene eseguita inserendo un descrittore di sicurezza forte nella directory che eredita ai suoi figli.

Se questa cartella / winsxs diventa più grande, dovrò ricreare l'immagine di questa macchina virtuale ... cosa che davvero non voglio fare!


24
TreeSize Free ... Uso windirstat.info per questo scopo ;-)
Steve Schnepp,

6
Non puoi far crescere la VM ed estendere la partizione principale?
Sam Saffron,

1
Potresti usare questo: windowsfixup.com/2009/05/… personalmente starei lontano da esso a meno che non trovassi il codice sorgente
Sam Saffron,

11
Ci sono molti hard link in winsxs, quindi anche le dimensioni sono spesso sovrastimate.
Greg D,

4
Prima domanda su SuperUser
puretppc

Risposte:


101

C'è un bel comando che pulisce dopo un'installazione di Windows 7 SP1 (mi ha risparmiato circa 3 GB):

DISM /online /cleanup-Image /spsuperseded

Deve essere eseguito da un prompt dei comandi con privilegi elevati


2
eccellente, stavo solo pensando di ripulire Windows 7 SP1
Jeff Atwood il

6
ci sono altri comandi per Windows 7 che possono anche rimuovere backup di aggiornamento non SP?
galacticninja,

8
In alternativa è possibile utilizzare l'opzione "Pulizia file di sistema" nello strumento Pulizia disco ed eliminare i file di backup del Service Pack.
Michał T

5
@Pies, ho eseguito prima Disk Cleanup e DSIM ha comunque eliminato circa 3 GB in più (misurando% di spazio libero su disco, non dimensioni della cartella). Quindi vale la pena fare entrambe le cose.
matt wilkie,

3
@UpTheCreek, sei sicuro? Dopo aver eseguito Pulizia disco, Pulizia file di sistema, ottengoC:\Windows\system32>DISM /online /cleanup-Image /spsuperseded Deployment Image Servicing and Management tool Version: 6.1.7600.16385 Image Version: 6.1.7600.16385 Service Pack Cleanup can't proceed: No service pack backup files were found. The operation completed successfully.
Cees Timmerman il

44

TL; DR

winsxs in realtà contiene collegamenti reali . Non occupa tutti i dati aggiuntivi che pensi.

Un collegamento reale è come un "collegamento" o un "puntatore" a un file reale situato da qualche parte sul disco. Un hard link non occupa spazio sul disco rigido da solo: serve semplicemente come reindirizzamento.

Poiché winsxs è costituito da collegamenti reali, l'eliminazione di questi collegamenti non libererà spazio. I file effettivi continueranno a rimanere in varie posizioni sul disco.


Winsxs non è un problema

... è una soluzione! (Beh, soprattutto .)

Un riassunto, "Contrassegnato come risposta di Ronnie Vernon, MVP, Moderatore", dice qui :

Wow, lunga discussione su hardlink e winsxs. Comunque qui ci sono alcuni punti riassunti di ciò che ho capito su come funziona tutto.

Per iniziare rispondendo alla domanda del PO con la risposta perfetta pubblicata sopra da Andre.Ziegler, non si tocca winsxs. Forse alcuni dei file possono essere tagliati come mp3, avi, ecc., Ma il resto dei file di sistema dovrebbe essere lasciato solo . Anch'io sto usando Link Shell Extension come pubblicato sopra da Ronnie Vernon, un modo semplice per vedere quali sono hard link (freccia rossa) e quali sono semplici file.

Prima di arrivare qui ho visto in molti posti le persone che chiedevano lo strumento di pulizia dopo aver installato SP1 per Windows 7 come vsp1cln. Non esiste uno strumento dedicato, tutto è stato integrato nel servizio Pulizia disco. Una nota che vorrei fare qui è che anche se l'opzione dice che rimuoverà alcune centinaia di MB dopo aver ripulito il mio disco, il servizio ha rimosso circa 3 GB di file in eccesso, quindi varia da sistema a sistema. Divertente, ora ho ancora più spazio di quello che avevo prima di installare SP1. Bello, MS.

Per quanto riguarda gli hard link, mi sono divertito per la confusione creata intorno a loro. Non sono un fanatico di Linux, e di solito uso solo collegamenti soft ... sono sufficienti per me, ma la gente non ha capito come funzionano quelli più duri e come viene contata la dimensione.

Un gruppo di file selezionati, collegamenti o meno, verrà sempre conteggiato come somma. Ciò significa che se prendo un file da 10 MB e realizzo 2 hard link, la selezione di tutti e tre avrà 30 MB e questa è la dimensione corretta, perché a differenza dei soft link correlati alla voce Tabella del file master originale del file e hanno 0 byte, i collegamenti reali sono correlati ai dati stessi , hanno una propria voce in MFT ma puntano allo stesso indirizzo di dati, ovviamente avendo come dimensione la dimensione dei dati effettivi, stessi orari, attributi e così via. Perché, sotto.

Quanto è rimasto sul disco? Semplice: esattamente quanto i report delle proprietà dell'unità . Non andare a selezionare tutti i file, nascosti e non nascosti su C e fare confronti, o utilizzare strumenti che lo fanno automaticamente perché non mostrerà l'utilizzo effettivo dell'HDD. Perché? Perché:

  1. tale operazione crea un elenco di tutti i file selezionati, inclusi collegamenti fissi come file separati, li prende ciascuno e aggiunge le dimensioni, le proprietà delle unità contano i dati memorizzati effettivi
  2. non tutti i file verranno conteggiati, le cartelle protette dall'attraversamento e i file dalla lettura non verranno conteggiati e le informazioni sul volume del sistema di solito hanno file molto grandi protetti proprio in questo modo
  3. quel numero è utile solo in caso di trasferimento di file, se i file, i collegamenti, ecc. devono essere copiati su DVD o NAS, questo è quanto occuperebbero e i collegamenti non verranno conservati poiché sono funzionalità specifiche NTFS, non disponibili o disponibili in diverse forme in ISO, UDF, NFS e altri file system, ma verranno clonati.

Fai un test ... copia un file da 10 MB, a.exe, da un'unità diversa e osserva come lo spazio libero diminuisce di 10 MB. Creare un collegamento reale (mklink / H b.exe a.exe). Ora questi due file selezionati "utilizzeranno" 20 MB nelle proprietà di selezione , ma in realtà solo 10 MB verificati nelle proprietà dell'unità , che avranno lo stesso spazio libero che aveva / fa dopo la copia del file. Elimina uno, uno dei due, lo spazio libero rimarrà lo stesso. Ora elimina l'ultimo e lo spazio aumenterà di 10 MB. È stato fatto del male? NO.

Che cos'è winsxs? Una dllcache molto migliore. Laddove con dllcache in XP abbiamo avuto copie di file che in realtà sono stati aggiunti all'utilizzo delle dimensioni da quando sono stati clonati, ciò migliora effettivamente l'utilizzo ma non la protezione totale (contro i virus). Se un programma di disinstallazione non autorizzato pensa di dover rimuovere alcune librerie di runtime da System32, eliminerebbe solo i collegamenti, ma non i dati, quindi i collegamenti verrebbero ricreati mantenendo l'utilizzo dello spazio dati al minimo possibile, meglio dell'archiviazione di winsxs nei taxi e avendo i taxi lungo i file originali. Inoltre, winsxs porta la serializzazione, compartimentando i file con lo stesso nome ma versione diversa, per il bene dello sviluppatore, il che è una cosa buona / cattiva, li rende pigri per codificare correttamente ma aiuta quando non vogliono più codificare.

Ho fatto questo per aiutare chiunque atterra qui per le stesse ragioni per cui ho fatto ... un "uso eccessivo dello spazio" da parte di winsxs dopo SP1. E spero sia stato utile.


Questa risposta non è un aspetto estremamente importante che manca completamente nella risposta accettata?
mafu,

33

Questi duplicati e backup sono estremamente fastidiosi quando lo spazio su disco è limitato.

Essendo in quel posto, l'unico modo in cui ho scoperto che non avrebbe compromesso la stabilità del sistema operativo era usare generosamente l' impostazione "Comprimi i contenuti per risparmiare spazio su disco" .

Comprimendo tutte quelle directory di backup nella directory di Windows, sono stato in grado di ridurre le dimensioni della directory da 6,5 ​​GB a 5 GB, senza effetti collaterali riconoscibili. Usarlo su alcune delle tue cose al di fuori della directory di Windows aumenterebbe ulteriormente i tuoi 10 GB.


2
Ho provato a comprimerlo e dico "Accesso negato" alla cartella e quindi poqexec.log. Presumevo che fosse un blocco di lettura. Qualcosa per aggirare questo?
Quintin Par,

1
In realtà, stai ancora mettendo a repentaglio la stabilità del tuo sistema operativo. La cartella WinSxS NON deve essere compressa. In effetti, è una pessima idea. Basta "comprimere winsxs" di Google e lo scoprirai.
Ciao,

6
Non sono sicuro che questa tecnica sia una buona idea: molti file nell'albero di winsxs sono hard-link. L'abilitazione della compressione su questi file comprime tutte le istanze del file? Potrebbero esserci conseguenze non intenzionali sulle prestazioni.
Duffbeer703,

3
@FiascoLabs, hai notato che questa è una domanda di 4 anni, che si riferisce specificamente a un'unità da 10 GB? Si potrebbe anche affermare che "nessuno usa Vista". Potrebbe essere vero ora, ma non era così al momento in cui è stata posta la domanda.
Eran,

1
@eran Eppure tutte le domande su Win7 su winsx vengono chiuse come duplicato di questa domanda
Tobias Kienzler,

27

Se hai Vista e SP2 installato, puoi ripulire i vecchi file di sistema con il nuovo strumento di pulizia del Service Pack .

  1. Fare clic su Start> Tutti i programmi> Accessori> Prompt dei comandi o fare clic su Start> Esegui e digitare cmd per aprire Prompt dei comandi di Windows
  2. Eseguire il comando "Compcln.exe". Il percorso è "c: \ Windows \ System32 \ compcln.exe".
  3. Agli utenti verrà chiesto se mantenere SP2 Vista permanentemente nel sistema.
  4. Digitare "Y" e premere Invio, il sistema inizierà a pulire i componenti di Windows.

Non sono riuscito a individuarlo nel mio Vista SP1
pencilslate,

Sì, probabilmente è nuovo in Vista SP2.
Tomas Andrle

4
Non ho risparmiato così tanto per me, ma posso confermare che lo strumento esiste e mi ha salvato un G plus
itj

Compcln.exe non è in W10.
Laurie Stearn,

21

In Windows 8 è possibile ridurre le dimensioni della cartella WinSxS rimuovendo le funzionalità di Windows :

DISM.exe /Online /Disable-Feature /Featurename:<name> /Remove

L'importante è il parametro / Remove che è nuovo in Windows 8 .

La maggior parte dello spazio in WinSxS utilizza WindowsUpdates che si installa nel tempo. In Windows 8 / Windows 10 è possibile rilevare e rimuovere gli aggiornamenti che vengono sostituiti da aggiornamenti più recenti (come gli aggiornamenti IE cumulativi più recenti) eseguendo questo comando:

dism.exe /online /cleanup-image /startcomponentcleanup

o eseguendo la procedura guidata di pulizia del disco e selezionare "Pulizia di Windows Update"

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Assicurati anche di aver installato l'aggiornamento dello stack di manutenzione http://support.microsoft.com/kb/2821895 .

Questi aggiornamenti eseguono una pulizia completa di WinSxS e comprimono tutti i file DLL / Exe, da WinSxS che non sono attualmente in uso, in file delta più piccoli:

inserisci qui la descrizione dell'immagine

Guarda le diverse dimensioni del file.

Windows 8.1 aggiunge nuovi comandi DISM . Il /startcomponentcleanupottiene un nuovo parametro /ResetBaseche rende il vostro ultimo aggiornamento permanente e rimuove tutti i file più vecchi per risparmiare più spazio.

È inoltre possibile eseguire un nuovo comando dism /online /cleanup-image /analyzecomponentstoreper analizzare la cartella WinSxS:

inserisci qui la descrizione dell'immagine

Ora ti dice quando eseguire la pulizia per risparmiare spazio.


2
Questo è ora disponibile anche per Windows 7 SP1: support.microsoft.com/kb/2852386
Mark Henderson

Qui era 18,4 Gb su disco prima StartComponentCleanupdel 1809. 6,54 GB su disco dopo StartComponentCleanup, un enorme miglioramento. 92 eliminazioni in sospeso, nessuna ridenominazione in sospeso. Dei 76812 file in WinSXS , 21452 occupano 2,90 Gb su disco con date da settembre a ottobre dell'anno scorso, quando il computer è stato aggiornato al 1803. È tipico di un'installazione W10 corrente o siamo ancora intasati?
Laurie Stearn,

1
@LaurieStearn Non ne ho idea. Eseguo solo Win10 in VM e creo una nuova VM per ogni nuova versione di Win10 sul mio sistema host Windows 8.1.
magicandre1981


9

Buone notizie! Esiste ora un metodo ufficialmente sanzionato , da Microsoft, per Windows 7 SP1, per ripulire la cartella WinSXS .

  1. Installa HotFix 2852386 : puoi scaricare manualmente o attendere che arrivi tramite Windows Update
  2. Ciò aggiunge una nuova opzione alla Pulizia guidata disco (in Pulizia file di sistema) che è possibile abilitare per "Pulizia Windows Update". Seleziona questa opzione.
  3. Clicca OK

Avvertenza: potrebbe non essere possibile disinstallare determinati aggiornamenti di Windows dopo aver eseguito la pulizia della cartella WinSxS.


6

Sembra che ci sia finalmente un modo per farlo in Windows 8.1 Service Pack 1 e Windows Server 2012 R2 .

Strumento di analisi dell'archivio componenti:

Dism.exe /Online /Cleanup-image /AnalyzeComponentStore

Alla fine della scansione, l'utente ottiene un rapporto dei risultati (dimensione effettiva della cartella winsxs) in questo modo:

risultati del negozio di analisi

Pulizia archivio componenti:

Oggi, la pulizia dell'archivio componenti deve essere attivata manualmente da un utente finale, eseguendo DISM o utilizzando la procedura guidata di pulizia disco. Al fine di rendere più utile la pulizia dell'archivio componenti per l'utente finale medio, verrà aggiunto in un'attività di manutenzione, risparmiando automaticamente spazio su disco per gli utenti finali. Per consentire ciò, verrà apportata una modifica per consentire la disinstallazione dei driver della posta in arrivo sostituiti senza richiedere un riavvio (oggi, tutte le installazioni / disinstallazioni di driver eseguite da CBS richiedono un riavvio).

  1. Dism.exe /online /Cleanup-Image /StartComponentCleanup

  2. Strumento Pulizia disco, pulsante Pulisci file di sistema.

    strumento di pulizia del disco

  3. schtasks.exe /Run /TN "\Microsoft\Windows\Servicing\StartComponentCleanup"


4
già pubblicato molto tempo fa: superuser.com/a/594216/174557 Non è necessario pubblicare la stessa cosa due volte;)
magicandre1981

2

Dism ++ è quello che stai cercando ( https://www.chuyu.me/en/index.html ).

Risparmierai gigabyte di spazio ...

Dovrai selezionare "Sostituiti gli assiemi WinSxS". Se lo fai, ti avviserà che questi aggiornamenti installati non possono essere disinstallati. Fai clic su OK, quindi esegui la scansione

inserisci qui la descrizione dell'immagine

Ti darà un'idea di quanto spazio risparmierai. Hit cleanup, e dovrebbe liberare quello spazio.


1
Dovrebbero essere fornite istruzioni specifiche su come utilizzare questo programma. Sono in grado di ottenere il programma da Github ma non riesco a visitare il link che hai fornito.
Ramhound,

1
L'ho provato su una VM - sembra piuttosto veloce e non ha davvero rotto nulla per quanto posso dire. Potrei giocare con questo, dal momento che sembra avere alcune eleganti funzionalità post-installazione (ooh backup dei driver!). Ho modificato la tua risposta con i passaggi di base e uno screenshot. Si spera che dovresti vedere la differenza e i voti a breve
Journeyman Geek

Strumento fantastico! A differenza di WinSXSLite, ha funzionato e mi ha liberato quasi 8 GB di spazio.
Suncatcher,

1

Spero che sia utile avere un semplice oneliner in quanto altrimenti un'ottima risposta di Jeff Atwood non riesce a /ResetBasecambiare.

Attenzione : questa opzione aiuta notevolmente a ridurre le dimensioni della cartella WinSxS, ma elimina completamente le versioni precedenti dei componenti, quindi non sarà possibile ripristinare eventuali aggiornamenti installati in precedenza. Ma se il tuo sistema si comporta bene, dovresti essere al sicuro (soprattutto se non ti trovi in ​​un ambiente di produzione)

dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

Funziona con Windows 8.1 e versioni successive


0

Oltre alle soluzioni di cui sopra, un modo per guadagnare spazio significativo è comprimere l'intero contenuto della cartella. Tuttavia, ciò non può essere fatto utilizzando Explorer (sono necessari i diritti corretti), almeno a partire da Windows 7.

Queste istruzioni mostrano come raggiungere questo obiettivo:

sc query msiserver 
sc query TrustedInstaller

sc stop msiserver
sc stop TrustedInstaller

sc config msiserver start= disabled
sc config TrustedInstaller start= disabled

icacls "%WINDIR%\WinSxS" /save "%WINDIR%\WinSxS.acl" /t

takeown /f "%WINDIR%\WinSxS" /r

icacls "%WINDIR%\WinSxS" /grant "%USERDOMAIN%\%USERNAME%":(F) /t

compact /s:"%WINDIR%\WinSxS" /c /a /i *

icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t

icacls "%WINDIR%" /restore "%WINDIR%\WinSxS.acl"
del "%WINDIR%\WinSxS.acl"

sc config msiserver start= demand
sc config TrustedInstaller start= demand

sc start msiserver
sc start TrustedInstaller

Note / suggerimenti:

  1. Il raggruppamento segna il modo consigliato per eseguire questi comandi, se eseguito manualmente. Normalmente, non dovrebbero esserci problemi (tranne che per alcuni file saltati, perché sono in uso), ma il risultato per ogni gruppo deve essere controllato

  2. Ho eseguito questi passaggi sull'installazione di vari sistemi operativi a casa e al lavoro: Win7x64, Win10x64, Windows Server 2008R2 e Windows Server 2012 e finora non ho riscontrato alcun problema.

  3. Alcuni passaggi richiedono parecchio tempo, in particolare il tempo di compressione. La maggior parte dei passaggi eseguirà l'iterazione e mostrerà i file elaborati. Ridurre al minimo la finestra del prompt dei comandi potrebbe aumentare la velocità.


-4

Puoi rimuovere quei file in modo sicuro. Se ne avrai più bisogno, dovrai solo installare qualche altra cosa.

Ora sulla correzione!

  • Apri Esplora risorse e vai a C: \ Windows \ System32. Cerca il file "vsp1cln.exe."
  • Fare clic con il tasto destro su questo file e selezionare l'opzione "Esegui come amministratore".
  • Lo strumento di pulizia di Vista Service Pack 1 rimuoverà tutti i file ridondanti che ha sostituito.

La quantità di spazio su disco che guadagni dipenderà dal sistema, dai programmi installati, ecc.


16
È possibile rimuovere in sicurezza i file winsxs? Sei sicuro?!
UpTheCreek
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.