¿Por qué la carpeta / winsxs crece tanto y puede hacerse más pequeña?

174

Una máquina virtual Vista que uso solo tiene un disco duro virtual de 10 GB, y me preocupa que se quede sin espacio con el tiempo.

Solía TreeSize para comprobar si los culpables ..

ingrese la descripción de la imagen aquí

Y el principal culpable es esa /winsxso la carpeta "Windows Side-by-Side" .

ingrese la descripción de la imagen aquí

¿Qué es la carpeta Windows Side By Side? Bueno, eso se explica bastante bien aquí .

Todos los componentes del sistema operativo se encuentran en la carpeta WinSxS; de hecho, llamamos a esta ubicación el almacén de componentes. Cada componente tiene un nombre único que incluye la versión, el idioma y la arquitectura del procesador para el que se creó. La carpeta WinSxS es la única ubicación en la que el componente se encuentra en el sistema, todas las demás instancias de los archivos que ve en el sistema se "proyectan" mediante enlaces duros desde el almacén de componentes. Permítanme repetir ese último punto: solo hay una instancia (o copia de datos completa) de cada versión de cada archivo en el sistema operativo, y esa instancia se encuentra en la carpeta WinSxS. Visto desde esa perspectiva, la carpeta WinSxS es realmente la totalidad del sistema operativo completo, denominado "plano" en los sistemas operativos de nivel inferior.

Eso explica por qué la carpeta comienza en grande, pero no por qué se agranda con el tiempo: la respuesta a esa pregunta es el servicio. En versiones anteriores de Windows, la unidad atómica de servicio era el archivo, en Windows Vista es el componente. Cuando actualizamos un binario en particular, lanzamos una nueva versión del componente completo, y esa nueva versión se almacena junto con la original en la tienda de componentes. La versión superior del componente se proyecta en el sistema, pero la versión anterior en la tienda no se toca. La razón de esto es la tercera parte de por qué la tienda de componentes es tan grande.

Muchas otras personas también se quejan del tamaño de la carpeta / winsxs :

Un compañero de trabajo recibió recientemente la actualización de su computadora portátil de trabajo cada dos años y estaba cargando su nueva computadora portátil con Vista. Por alguna razón, su disco duro C: estaba particionado a solo 25 GB y el resto del espacio reservado para un disco mucho más grande D :.

De todos modos, después de cargar muchas actualizaciones de Windows, se quedó sin apenas espacio en disco en C :, y por alguna razón, el directorio WinSxS se había disparado a más de 8 GB.

Si bien sabía para qué era el directorio WinSxS (Windows Side-by-Side), no estaba muy seguro de por qué ese directorio explotaría en tamaño tan rápido con las actualizaciones normales del sistema operativo.

Realmente no me importa tener todos estos archivos duplicados de seguridad, pero se preocupan por la máquina virtual explosión debido a un error de falta de espacio en disco. Entonces, ¿ puede / winsxs reducirse de forma segura de alguna manera? No parece que pueda ser ...

Los administradores no deben, por ningún motivo, asumir la responsabilidad de limpiar el directorio / winsxs , ya que esto puede evitar que Windows Update y MSI funcionen correctamente después. La prevención de la eliminación accidental del directorio se logra colocando un descriptor de seguridad sólido en el directorio que hereda a sus hijos.

Si esta carpeta / winsxs se hace más grande, voy a tener que volver a crear una imagen de esta máquina virtual ... ¡lo que realmente no quiero hacer!

Jeff Atwood
fuente
24
TreeSize Free ... Yo uso windirstat.info para este propósito ;-)
Steve Schnepp el
66
¿No puedes hacer crecer la VM y extender la partición principal?
Sam Saffron
1
Usted podría utilizar esto: windowsfixup.com/2009/05/...~~MD~~aux~~singular~~1st personalmente me gustaría permanecer lejos de ella a menos que pudiera encontrar el código fuente
Sam azafrán
11
Hay muchos enlaces duros en winsxs, por lo que el tamaño también se informa con demasiada frecuencia.
Greg D
44
Primera pregunta sobre el
superusuario

Respuestas:

101

Hay un buen comando que se limpia después de una instalación de Windows 7 SP1 (me ahorró alrededor de 3 GB):

DISM /online /cleanup-Image /spsuperseded

Debe ejecutarse desde un símbolo del sistema elevado

GvS
fuente
2
excelente, estaba pensando en limpiar Windows 7 SP1
Jeff Atwood
66
¿Hay otros comandos para Windows 7 que también puedan eliminar las copias de seguridad de actualizaciones que no sean SP?
galacticninja el
8
Alternativamente, puede usar la opción "Limpiar archivos del sistema" en la herramienta Liberador de espacio en disco y eliminar los archivos de respaldo del Service Pack.
Michał T
55
@Pies, ejecuté primero Disk Cleanup y DSIM aún eliminó un ~ 3GB adicional (midiendo el% de espacio libre en disco, no el tamaño de la carpeta). Entonces vale la pena hacer ambas cosas.
Matt Wilkie
3
@UpTheCreek, ¿estás seguro? Después de hacer la limpieza del disco, limpiar los archivos del sistema, obtengoC:\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
44

TL; DR

Winsxs en realidad contiene enlaces duros . No toma tantos datos adicionales como cree.

Un enlace duro es como un 'acceso directo' o 'puntero' a un archivo real ubicado en algún lugar de su disco. Un enlace duro no ocupa espacio en el disco duro por sí mismo: simplemente sirve como una redirección.

Debido a que winsxs consiste en enlaces duros, eliminar estos enlaces no liberará espacio. Los archivos reales continuarán en varias ubicaciones en su disco.


winsxs no es un problema

... es una solución! (Bueno, mayormente )

Un resumen, "Marcado como respuesta por Ronnie Vernon, MVP, Moderador", dice aquí :

Wow, larga discusión sobre enlaces duros y winsxs. De todos modos, aquí hay algunos puntos resumidos de lo que entendí sobre cómo funciona todo.

Para comenzar respondiendo la pregunta del OP con la respuesta perfecta publicada anteriormente por Andre.Ziegler, no toque winsxs. Tal vez algunos de los archivos se pueden recortar como los mp3, avi, etc., pero el resto de los archivos del sistema deben dejarse solos . Yo también estoy usando Link Shell Extension como lo publicó Ronnie Vernon, una manera fácil de ver cuáles están vinculados (flecha roja) y cuáles son archivos simples.

Antes de llegar aquí, vi en muchos lugares a personas que pedían la herramienta de limpieza después de instalar SP1 para Windows 7 como vsp1cln. No hay una herramienta dedicada, todo se integró en el servicio Disk Cleanup. Una nota que haría aquí es que, incluso si la opción dice que eliminará unos cientos de MB después de limpiar mi unidad, el servicio eliminó alrededor de 3 GB de archivos en exceso, por lo que varía de un sistema a otro. Es curioso, ahora tengo aún más espacio que antes de instalar SP1. Buena, MS.

Con respecto a los enlaces duros, me divirtió la confusión creada a su alrededor. No soy un geek de Linux, y generalmente uso solo enlaces blandos ... son suficientes para mí, pero la gente no entendió cómo funcionan los duros y cómo se cuenta el tamaño.

Un grupo de archivos seleccionados, enlaces o no, siempre se contará como una suma. Esto significa que si tomo un archivo de 10 MB y hago 2 enlaces duros, la selección de los tres tendrá 30 MB y este es el tamaño correcto, porque a diferencia de los enlaces blandos que están relacionados con la entrada original de la tabla del archivo maestro y tienen 0 bytes, los enlaces duros están relacionados con los datos en sí , tienen su propia entrada en MFT pero apuntan a la misma dirección de datos, obviamente tienen como tamaño el tamaño de los datos reales, los mismos tiempos, atributos, etc. ¿Por qué abajo?

¿Cuánto queda en el disco? Simple: exactamente tanto como los informes de propiedades de la unidad . No vaya a seleccionar todos los archivos, ocultos y no ocultos en C, ni haga comparaciones, ni use herramientas que lo hagan automáticamente porque no mostrará el uso real del HDD. ¿Por qué? Porque:

  1. esa operación hace una lista de todos los archivos seleccionados, incluidos los enlaces duros como archivos separados, toma cada uno de ellos y agrega los tamaños, las propiedades de las unidades cuentan los datos reales almacenados
  2. no se contarán todos los archivos, no se contarán las carpetas protegidas del recorrido y los archivos de la lectura, y la información del volumen del sistema generalmente tiene archivos muy grandes protegidos de esta manera
  3. ese número es útil solo en casos de transferencia de archivos, si los archivos, enlaces, etc. necesitan copiarse en DVD o NAS, eso es lo que ocuparían, y los enlaces no se conservarán ya que son características específicas de NTFS, no disponibles o disponible en diferentes formas bajo ISO, UDF, NFS y otros sistemas de archivos, pero serán clonados.

Haga una prueba ... copie un archivo de 10 MB, a.exe, desde una unidad diferente y observe cómo el espacio libre cae en 10 MB. Haga un enlace duro (mklink / H b.exe a.exe). Ahora, estos dos archivos seleccionados "usarán" 20 MB en las propiedades de selección , pero en realidad solo se verificaron 10 MB en las propiedades de la unidad , que tendrán el mismo espacio libre que tenía / tiene después de la copia del archivo. Elimine uno, cualquiera, el espacio libre seguirá siendo el mismo. Ahora elimine el último y el espacio aumentará en 10 MB. ¿Se hizo algún daño? NO.

¿Qué es el winsxs? Un dllcache mucho mejor. Donde con el dllcache en XP teníamos copias de archivos que realmente aumentaron el uso de tamaño desde que fueron clonados, esto realmente mejora el uso pero no la protección total (contra virus). Si un desinstalador falso cree que tiene que eliminar algunas bibliotecas de tiempo de ejecución de System32, solo eliminaría los enlaces, pero no los datos, entonces los enlaces se volverían a crear mientras se mantiene el uso del espacio de datos en el menor nivel posible, mejor que archivar winsxs en cabinas y tener las cabinas junto a los archivos originales. También winsxs trae serialización, compartimentando archivos con el mismo nombre pero con una versión diferente, por el bien del desarrollador, lo cual es bueno / malo, los hace perezosos para codificar correctamente, pero ayuda cuando ya no quieren codificar.

Hice esto para ayudar a cualquiera que aterrice aquí por las mismas razones que hice ... "uso excesivo del espacio" por parte de winsxs después de SP1. Y espero que haya sido útil.

Mateen Ulhaq
fuente
¿No es esta respuesta un aspecto extremadamente importante que falta por completo en la respuesta aceptada?
mafu
33

Estos duplicados y copias de seguridad son extremadamente molestos cuando se tiene espacio en disco limitado.

Al estar en ese lugar, la única forma en que descubrí que no pondría en peligro la estabilidad del sistema operativo fue utilizar generosamente la configuración "Comprimir contenido para ahorrar espacio en disco" .

Al comprimir todos esos directorios de respaldo en el directorio de Windows, pude reducir el tamaño del directorio de 6.5 GB a 5 GB, sin efectos secundarios reconocibles. Usarlo en algunas de sus cosas fuera del directorio de Windows alargaría aún más sus 10 GB.

eran
fuente
2
Intenté comprimirlo y digo "Acceso denegado" a la carpeta y luego poqexec.log. Supongo que era un bloqueo de lectura. ¿Algo para evitar esto?
Quintin Par
1
En realidad, todavía estás poniendo en peligro la estabilidad de tu sistema operativo. La carpeta WinSxS NO se debe comprimir. De hecho, es una muy mala idea. Solo google 'comprima winsxs' y lo descubrirá.
Hola71
66
No estoy seguro de que esta técnica sea una buena idea: muchos archivos en el árbol winsxs son enlaces duros. ¿Habilitar la compresión en estos archivos comprimirá todas las instancias del archivo? Podría haber algunas consecuencias no deseadas en el rendimiento.
duffbeer703
3
@FiascoLabs, ¿ha notado que esta es una pregunta de 4 años, que se refiere específicamente a un disco de 10GB? También podría decir que "nadie usa Vista". Puede ser cierto ahora, pero no fue así cuando se hizo la pregunta.
eran 22/0613
1
@eran Sin embargo, todas las preguntas de Win7 sobre winsxs se cierran como duplicado de esta pregunta
Tobias Kienzler
27

Si tiene Vista y tiene instalado SP2, puede limpiar los archivos de sistema antiguos con la nueva herramienta de limpieza de Service Pack .

  1. Haga clic en Inicio> Todos los programas> Accesorios> Símbolo del sistema o haga clic en Inicio> Ejecutar y escriba cmd para abrir el Símbolo del sistema Windows
  2. Ejecute el comando "Compcln.exe". La ruta es "c: \ Windows \ System32 \ compcln.exe".
  3. A los usuarios se les preguntará si deben mantener Vista SP2 permanentemente en el sistema.
  4. Escriba "Y" y presione Intro, el sistema comenzará a realizar la limpieza de los componentes de Windows.
Tomás Andrle
fuente
No pude localizar esto en mi Vista SP1
lapiz
Sí, probablemente sea nuevo en Vista SP2.
Tomas Andrle
44
No salvó tanto por mí, pero puedo confirmar que existe la herramienta y me salvó un G más
itj
Compcln.exe no está en W10.
Laurie Stearn
21

En Windows 8 puede reducir el tamaño de la carpeta WinSxS eliminando las características de Windows :

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

Lo importante es el parámetro / Eliminar , que es nuevo en Windows 8 .

La mayor parte del espacio en WinSxS se usa en las actualizaciones de Windows que instala con el tiempo. En Windows 8 / Windows 10 , puede detectar y eliminar las actualizaciones que se reemplazan por actualizaciones más recientes (como las actualizaciones acumulativas más nuevas de IE) ejecutando este comando:

dism.exe /online /cleanup-image /startcomponentcleanup

o ejecutando el asistente de limpieza de disco y seleccione "Windows Update Cleanup"

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

También asegúrese de haber instalado la actualización de la pila de servicio http://support.microsoft.com/kb/2821895 .

Estas actualizaciones ejecutan una limpieza profunda de WinSxS y comprime todos los archivos DLL / Exe, desde WinSxS que no están actualmente en uso, en un archivo delta más pequeño:

ingrese la descripción de la imagen aquí

Mira los diferentes tamaños de archivo.

Windows 8.1 agrega nuevos comandos DISM . El /startcomponentcleanupconsigue un nuevo parámetro /ResetBaseque hace que su última actualización permanente y borra todos los archivos más antiguos para ahorrar más espacio.

También puede ejecutar un nuevo comando dism /online /cleanup-image /analyzecomponentstorepara analizar la carpeta WinSxS:

ingrese la descripción de la imagen aquí

Ahora le indica cuándo debe ejecutar la limpieza para ahorrar espacio.

magicandre1981
fuente
2
Ahora también está disponible para Windows 7 SP1: support.microsoft.com/kb/2852386
Mark Henderson
Aquí tenía 12.4 Gb en disco antes StartComponentCleanupen 1809. 6.54 GB en disco después StartComponentCleanup, una mejora masiva. 92 eliminaciones pendientes, no hay cambios de nombre pendientes. De los 76812 archivos en WinSXS , 21452 ocupan 2.90 Gb en disco con fechas de septiembre a octubre del año pasado, cuando la computadora se actualizó a 1803. ¿Es esto típico de una instalación W10 actual o todavía estamos obstruidos?
Laurie Stearn
1
@LaurieStearn No tengo idea. Solo ejecuto Win10 en VM y creo una nueva VM para cada nueva versión de Win10 en mi sistema host Windows 8.1.
magicandre1981
9

¡Buenas noticias! Ahora hay un método oficialmente autorizado , de Microsoft, para Windows 7 SP1, para limpiar su carpeta WinSXS .

  1. Instale HotFix 2852386 : puede descargarlo manualmente o esperar a que llegue a través de su Actualización de Windows
  2. Esto agrega una nueva opción al Asistente de limpieza de disco (en Limpieza de archivos del sistema) que puede habilitar para "Limpieza de actualización de Windows". Marque esta opción.
  3. Haga clic en Aceptar

Advertencia: es posible que no pueda desinstalar ciertas actualizaciones de Windows después de ejecutar la limpieza de su carpeta WinSxS.

Mark Henderson
fuente
6

Parece que finalmente hay una manera de hacerlo en Windows 8.1 service pack 1 y Windows Server 2012 R2 .

Herramienta de análisis de tienda de componentes:

Dism.exe /Online /Cleanup-image /AnalyzeComponentStore

Al final de la exploración, el usuario obtiene un informe de los resultados (tamaño real de la carpeta winsxs) de esta manera:

analizar los resultados del almacén de componentes

Limpieza de la tienda de componentes:

Hoy, la limpieza del almacén de componentes debe ser activada manualmente por un usuario final, ya sea ejecutando DISM o utilizando el asistente de limpieza de disco. Para hacer que la limpieza de la tienda de componentes sea más útil para el usuario final promedio, se agregará a una tarea de mantenimiento, ahorrando automáticamente espacio en disco para los usuarios finales. Para habilitar esto, se realizará un cambio para permitir la desinstalación de los controladores de bandeja de entrada reemplazados sin necesidad de reiniciar (hoy, todas las instalaciones / desinstalaciones de controladores realizadas por CBS requieren un reinicio).

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

  2. Herramienta de limpieza de disco, botón Limpiar archivos del sistema.

    herramienta de limpieza de disco

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

Jeff Atwood
fuente
44
ya publicado hace mucho tiempo: superuser.com/a/594216/174557 No es necesario publicar lo mismo dos veces;)
magicandre1981
2

Dism ++ es lo que estás buscando ( https://www.chuyu.me/en/index.html ).

Ahorrará gigabytes de espacio ...

Deberá seleccionar "Ensambles WinSxS reemplazados". Si hace esto, le advertirá que estas actualizaciones instaladas no se pueden desinstalar. Haga clic en Aceptar, luego escanee

ingrese la descripción de la imagen aquí

Le dará una idea de cuánto espacio ahorrará. Haga clic en la limpieza, y debería despejar ese espacio.

Journeyman Geek
fuente
1
Se deben proporcionar instrucciones específicas sobre cómo usar este programa. Puedo obtener el programa de Github pero no puedo visitar el enlace que me proporcionó.
Ramhound
1
He intentado esto en una máquina virtual, parece bastante rápido y realmente no ha roto nada por lo que puedo decir. Podría jugar con esto, ya que parece tener algunas características ingeniosas posteriores a la instalación (¡oh, copias de seguridad del controlador!). He editado tu respuesta con pasos básicos y una captura de pantalla. Con suerte, pronto verás la diferencia y los votos a favor
Journeyman Geek
Herramienta impresionante! A diferencia de WinSXSLite, funcionó y me liberó casi 8 Gb de espacio.
Suncatcher
1

Espero que sea útil tener una línea simple ya que, de lo contrario, la gran respuesta de Jeff Atwood falla /ResetBase.

Precaución : este modificador ayuda en gran medida a reducir el tamaño de la carpeta WinSxS, pero elimina completamente las versiones anteriores de los componentes, por lo que no podrá deshacer las actualizaciones instaladas anteriormente. Pero si su sistema se comporta bien, debe estar seguro (especialmente si no está en el entorno de producción)

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

Esto funciona en Windows 8.1 y posterior

maoizm
fuente
0

Además de las soluciones mencionadas anteriormente, una forma de ganar espacio significativo es comprimir todo el contenido de la carpeta. Sin embargo, esto no se puede hacer con Explorer (se necesitan los derechos adecuados), al menos a partir de Windows 7.

Estas instrucciones muestran cómo lograr esto:

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

Notas / consejos:

  1. La agrupación marca la forma recomendada de ejecutar estos comandos, si se realiza manualmente. Normalmente, no debería haber problemas (excepto de algunos archivos omitidos, porque están en uso), pero el resultado para cada grupo debe ser verificado

  2. He realizado estos pasos en la instalación de varios sistemas operativos en casa y en el trabajo: Win7x64, Win10x64, Windows Server 2008R2 y Windows Server 2012 y hasta ahora no vi ningún problema.

  3. Algunos pasos llevan bastante tiempo, especialmente el tiempo de compresión. La mayoría de los pasos iterarán y mostrarán los archivos procesados. Minimizar la ventana del símbolo del sistema puede ganar algo de velocidad.

Alexei
fuente
-4

Puede eliminar esos archivos de forma segura. Si alguna vez los necesita nuevamente, solo requerirá que instale algunas cosas más.

Ahora a la solución!

  • Abra el Explorador de Windows y navegue a C: \ Windows \ System32. Busque el archivo "vsp1cln.exe".
  • Haga clic derecho en este archivo y seleccione la opción 'Ejecutar como administrador'.
  • La herramienta de limpieza Vista Service Pack 1 eliminará todos los archivos redundantes que ha reemplazado.

La cantidad de espacio en disco que gane dependerá del sistema, qué programas estén instalados, etc.

Axxmasterr
fuente
16
¿Puede eliminar con seguridad los archivos winsxs? ¡¿Estás seguro de eso?!
UpTheCreek