Comment mettre WinSxS au régime ?

Update 2014.08.28 : Ajout de la KB Microsoft afin de pouvoir cleaner des maj WSUS en 2008r2 sp1 en GUI, un grand merci a ctxblog.fr

Depuis l’arrivée de la version 6.0 du noyau Windows (c’est à dire l’arrivée de Windows Vista et Server 2008, historique disponible ici), une des questions les plus posées doit être « Pourquoi le dossier C:\Windows\WinSxs est si volumineux ? ». Ce billet est plus un pense-bête vu le nombre de fois où nous nous reposons la question (et ça fera un peu de vide dans Evernote).

Avant de lister toutes les commandes possibles (qui s’améliorent avec le temps) suivant les versions de Windows, nous nous disons qu’une petite explication plus en détail du fonctionnement de ce fameux dossier ne serait pas de trop.

Pour faire simple, la technologie Side-by-side (aka ‘SxS’) est un standard pour les fichiers exécutables depuis Windows ME afin d’atténuer les problèmes qui découlent de l’utilisation de bibliothèques de liens dynamiques (conflits de version, DLL en double…). Side-by-side est conceptuellement l’équivalent natif au Global Assembly Cache de .NET. Cela permet à Windows de stocker plusieurs versions d’une DLL dans le répertoire WinSxS, qui les charge sur demande (en s’appuyant sur un hardlink entre les dossiers systèmes et le dossier WinSxS):

Maintenant, voici les outils à votre disposition pour vous aider à mieux gérer WinSxS. La première commande qui est disponible est:

dism /online /cleanup-image /SPSuperseded

Cette commande n’est utile que si un Service Pack a été installé. Cela va supprimer les sauvegardes effectuées lors du passage du SP.

Windows 8 et Windows Server 2012 introduisent une nouvelle fonctionnalité appelée « Feature On Demand« . Cela permet tout simplement de supprimer les sources des rôles et des fonctionnalités de l’OS. Par défaut, Windows conserve dans %windir%\WinSxS toutes les sources des rôles et fonctionnalités, qu’ils soient installés ou non afin de permettre une installation sans avoir besoin des sources (comme C:\Windows\i386 à l’époque). Si vous n’avez donc jamais besoin de ces sources (ou si vous voulez dimensionner au mieux vos OS), vous pouvez maintenant les supprimer et gagner quelques GB (via PowerShell ou dism.exe):

Get-WindowsFeature | ?{$_.Installed -eq 0 -and $_.InstallState -eq 'Available'} | Uninstall-WindowsFeature -Remove
dism /online /disable-feature /featurename:TFTP /remove

Il y a aussi une 2ème commande disponible permettant de purger tout composant obsolète (superseded):

dism /online /cleanup-image /StartComponentCleanup

Depuis Windows 8.1 et Server 2012 R2 une dernière commande est disponible permettant d’améliorer la purge:

dism /online /cleanup-image /StartComponentCleanup /ResetBase

Toutes ces commandes peuvent prendre un peu de temps mais au final, cela permet de réduire au maximum la taille du dossier WinSxS (qui veut des templates tout propres ?).

Une autre possiblité en GUI est aussi de passer par l’outil de nettoyage du disque depuis la version SP1 de Windows 2008 R2 comme indiqué sur le billet suivant en installant la KB2852386, mais c’est moins classe :p

3 comments

  1. Merci pour cet article

    (Ca ne serait pas un complot organisé en coalition avec les vendeurs de baies de grosses disquettes (non-dédupé !) ?)

  2. Sous Windows 2008 R2 on peut en copiant le cleanmgr.exe + les MUI dans le system32 , lancer la commande sans avoir à installer la feature desktop ( moche ;o).

Laisser un commentaire

Required fields are marked *.