Descubriendo el Misterio de la Carpeta WinSxs

Un tema que ha producido infinidad de preguntas y en general malas respuestas en Internet es la “misteriosa carpeta” WinSxs, que en muchos casos crece y crece y provoca mucha preocupación al que no la conoce

Antes de seguir leyendo ¡No la toque! ya veremos los motivos

Antes que nada aclaremos que WinSxs es una carpeta oculta que se hace visible únicamente cuando configuramos nuestro sistema para que nos muestre todos los archivos, inclusive los protegidos y del sistema

Todo comenzó con Windows Vista / Server 2008, y fue uno de los grandes avances que trajeron estos sistemas y que pasaron casi desapercibidos por otros motivos que no vamos a discutir acá 😉

Uno de los adelantos de Windows Vista / Server 2008, fue la posibilidad de agregar componentes hardware y software sin que nos vuelva a pedir el DVD de instalación ¿o ya no recuerdan qué sucedía con los sistemas operativos anteriores?

Como magia no se puede hacer, toda la información necesaria para estos agregados tenía que estar en algún lado. Si están pensando en WinSxs están en lo cierto

Una de las primeras preguntas que surgen es, si cuando instalo un componente “se copia/expande” desde la carpeta WinSxs y por lo tanto eso está prodiciendo ocupación redundante del espacio ocupado en disco, la respuesta es un rotundo NO

La carpeta WinSxs en realidad contiene todo el sistema operativo, no sólo componentes que podemos agregar. El truco es en realidad algo llamado “hard links”

Muchos de los archivos que vemos dentro de la carpeta Windows en realidad no están ahí, son sólo punteros (“hard links”) a su correspondiente dentro de la carpeta WinSxS

Para que quede un poco más claro un “hard link” es en muchos aspectos similar a los “atajos” (shortcuts) que ponemos muchas veces en nuestro escritorio, pero en este caso a nivel de sistema de archivos.
Tanto para Windows Explorer como para la línea de comandos (CMD.EXE) son indistinguibles del archivo real, por lo cual debemos ayudarnos con comandos adicionales

Para el que le interese el tema le recomiendo el siguiente enlace, que además de información oficial de Microsoft creo que es muy interesante, y aunque trata sobre sistemas anteriores aún válido para Windows 8 / Server 2012
What is the WINSXS directory in Windows 2008 and Windows Vista and why is it so large? – Ask the Core Team – Site Home – TechNet Blogs

¿Será verdad? vamos a averiguarlo y constatarlo

Haré uso de un comando muy útil, recomiendo dedicarle un tiempo a la ayuda del mismo como es FSUTIL.EXE

Mediante el mismo apuntaré a un archivo (casi cualquiera) dentro de la carpeta Windows, y veré si es un “hard link” y dónde apunta

FSUTIL HARDLINK LIST C:\Windows\System32\acledit.dll

Y veremos que apunta al interior de WinSxS

Si miramos un poco dentro de la carpeta WinSxs podemos ver, poniendo un poco de “imaginación” que encontraremos drivers y componentes. Por ejemplo si hago una búsqueda con “IIS” obtengo

 

Hay también una pregunta importante más ¿por qué crece? son las actualizaciones

Cuando actualizamos el sistema se copian los nuevos archivos a la carpeta WinSxs y se corrigen los “hard links” a la nueva ubicación, pero no se eliminan los obsoletos. Esto es así para permitir la desinstalación de los mismos en caso de problemas

Hay algunos comentarios en Internet sobre cómo eliminar los reemplazados, pero no lo he probado, y realmente no lo recomiendo

El que quiera tomar el riesgo… y luego comentar 🙂
dism /online /cleanup-image /StartComponentCleanup

 

De todas formas voy a ver una forma de disminuir el tamaño de la carpeta en cuestión, sin correr riesgos innecesarios.
Supongamos que tenemos una instalación de Windows Server 2012, ya configurada y que sabemos que no le agregaremos otros componentes (Roles o Features) podríamos eliminar los binarios correspondientes

Aclaro que no es un caso sin retorno, eventualmente que quisiéramos instalar un componente eliminado debemos recuperarlo desde el DVD como hemos mostrado en otras notas sobre la versión Core

Comencemos en PowerShell ejecutando:
Get-WindowsFeature

La salida de este comando nos mostrará las tres posibilidades de cada componente:

  • Installed: instalado y funcionando
  • Available: no instalado pero disponible para instalar
  • Removed: quitado. Si quisiéramos agregarlo debemos recurrir a una fuente externa

 

Observemos primero el tamaño de WinSxs

 

Ahora en PowerShell ejecutemos:
Get-WindowsFeature | where-object{$_.Installed -eq 0 -and $_.InstallState -eq ‘Available’} |
Uninstall-WindowsFeature -Remove

 

Trabajando…

 

Y el tamaño de la carpeta WinSxS ahora es

 

No es demasiado pero hemos reducido 1,82GB el tamaño de la misma. Aclaro que estoy haciendo estas medidas sobre una instalación de Windows Server 2012 con interfaz gráfica pero sin agregar componentes

Si quisieramos instalar un componente removido de la instalación debemos montar el DVD correspondiente, y ver el índice correspondiente a nuestra versión, usando

DISM /Get-ImageInfo
/ImageFile:D:\Sources\Install.wim

Y con el número obtenido adecuado (X) reemplazarlo en el siguiente comando, y por supuesto el nombre del componente

Install-WindowsFeature <NombreDelFeature> -source WIM:D:\Sources\Install.wim:X -Restart

Espero les sirva, creo que es más curiosidad que otra cosa, pero cuando más sepamos, mejor 🙂

Post a comment or leave a trackback: Trackback URL.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *