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 🙂