La notion de « Fonctionnalités à la demande »
Lorsque l’on installe Windows, que ce soit une édition client ou serveur, il est possible d’ajouter de nouvelles fonctionnalités à son hôte. Vous remarquerez que pendant la phase d’installation d’une nouvelle fonctionnalité, le DVD de Windows n’est pas demandé et il n’y a pas de données téléchargées sur Internet. On en conclut que Windows stocke en local les fichiers d’installation de l’ensemble des fonctionnalités.
C’est tout à fait vrai puisque Windows dispose d’un répertoire de « cache » nommé « WinSxS » (stocké dans C:\Windows) et qui contient de nombreuses données.
On peut légitimement se poser cette question : Quel est l’intérêt de conserver toutes ces données d’installation pour des fonctionnalités que je n’utiliserais jamais ?
Sommaire
I. Supprimer les données d’installation, une bonne idée ?
Il n’y a pas réellement d’intérêt, on peut alors se demander « Est-ce que je peux supprimer ces données d’installation ? ». La réponse est « oui » et il y a deux bonnes raisons de le faire !
Je m’explique :
• Réduire la surface d’attaque
Les données d’installation des fonctionnalités sous Windows sont appelées des « payloads ». Ces payloads dès lors qu’ils sont présents sur votre système peuvent représenter une menace, même si la fonctionnalité est inactive.
Ainsi, en supprimant les données des fonctionnalités non utilisées, la surface d’attaque sera réduite. Il est à noter qu’en aucun cas vous ne devez supprimer les données des fonctionnalités installées.
• Réduire l’espace disque utilisé
En supprimant les données d’installation, vous pourrez gagner environ 1 Go d’espace disque supplémentaire. Certes ce n’est qu’un gigaoctet, mais imaginez qu’il s’agisse d’une machine virtuelle et que cela concerne des centaines de machines virtuelles, l’économie serait nettement plus intéressante.
II. Comment installer une fonctionnalité sans ces données ?
Rappelez-vous le bon vieux temps et les anciennes éditions de Windows, où lorsqu’on souhaitait installer une nouvelle fonctionnalité de Windows il fallait insérer le CD d’installation.
Lorsqu’on supprime les données d’installation du répertoire « WinSxS », il faudra en faire de même et s’appuyer sur le DVD d’installation de l’OS lorsque l’on souhaite installer une fonctionnalité. Mais pas seulement, puisqu’il est tout à fait possible de créer un partage sur un serveur (ou un NAS), qui contiendra l’équivalent du DVD de Windows. Ainsi, pour installer une fonctionnalité il suffira de pointer vers cette source de données externes.
C’est intéressant puisque plutôt d’avoir ces données sur chaque serveur, vous centralisez ces données sur un espace partagé et vous les rendez accessibles depuis les autres serveurs. En général, on n’installe pas des fonctionnalités tous les jours sur son serveur une fois qu’il est passé en production, d’où l’intérêt de faire ce nettoyage et d’externaliser les sources.
Conseil : Réaliser cette opération de nettoyage des sources juste avant la mise en production d’un serveur, lorsque toutes les fonctionnalités sont déjà installées.
Passons maintenant à la pratique, on va faire du nettoyage sur notre serveur CORE01.
III. Supprimer les données d’installation en PowerShell
À titre d’information, avant de supprimer les données, on va regarder l’espace libre actuel sur le volume système. Il n’existe pas de commande PowerShell simple à ce jour pour réaliser cette opération, on va passer par l’utilitaire « DiskPart » qui permet de réaliser ceci rapidement.
Note : DiskPart est un outil très connu et « ancien » qui permet de gérer les disques et leurs volumes (suppression de partition, création de partitions...).
Commencez par démarrer l’utilitaire DiskPart :
PS C:\> diskpart
Microsoft DiskPart version 6.3.9600
Copyright (C) 1999-2013 Microsoft Corporation.
Sur l'ordinateur : CORE01
On va lister les disques, un seul disque doit être retourné normalement (il n’y a qu’un disque sur le serveur).
DISKPART> list disk
N° disque Statut Taille Libre Dyn GPT
--------- ------------- ------- ------- --- ---
Disque 0 En ligne 30 G octets 0 octets
Ce disque a l’identifiant « 0 » (Disque 0), on va donc le sélectionner grâce à ce numéro
DISKPART> select disk 0
Le disque 0 est maintenant le disque sélectionné.
Maintenant que l’on a sélectionné le disque, on va pouvoir regarder les volumes qu’il contient et sélectionner par la suite le volume système.
DISKPART> list volume
N° volume Ltr Nom Fs Type Taille Statut Info
---------- --- ----------- ----- ---------- ------- --------- --------
Volume 0 D VMware Tool CDFS DVD-ROM 81 M Sain
Volume 1 Réservé au NTFS Partition 350 M Sain Système
Volume 2 C NTFS Partition 29 G Sain Démarrage
Le volume système est accompagné de la mention dispose de la lettre « C », c’est-à-dire le « Volume 2 », on va le sélectionner :
DISKPART> select volume 2
Le volume 2 est le volume sélectionné.
Finalement, on affiche les détails du volume pour avoir l’espace libre :
DISKPART> detail volume
À la fin de la sortie de la commande, on remarque qu’il y a 23 Go d’espace libre au sein de ce volume. À la suite de la suppression des données d’installation des fonctionnalités, on devrait atteindre au moins 24 Go d’espace libre.
Quittez DiskPart pour le moment avec la commande « exit ». On recommencera l’opération plus tard pour vérifier s’il y a eu de l’espace disque de libéré.
Pour rappel, pour lister l’ensemble des fonctionnalités disponibles, il faut utiliser la commande :
Get-WindowsFeature
Les fonctionnalités non installées, mais disponibles à l’installation disposent d’un attribut « InstallState » ayant la valeur « Available » (disponible). Pour lister ces fonctionnalités, saisissez la commande suivante :
Get-WindowsFeature | Where{ $_.InstallState -eq "Available"}
Il est important de réaliser ce filtre sur les résultats puisqu’il faut supprimer les données uniquement des fonctionnalités non installées sur notre serveur. La liste sera très certainement longue.
On va maintenant supprimer l’ensemble des données d’installation de ces fonctionnalités. Pour cela, on ajoute un second pipe à la commande précédente, comme ceci :
Get-WindowsFeature | Where{ $_.InstallState -eq "Available"} | Uninstall-WindowsFeature -Remove -Restart
Le commandlet « Uninstall-WindowsFeature » permet de désinstaller une fonctionnalité, alors que l’option « Remove » est indispensable puisqu’elle sert à supprimer les fichiers d’installation de la fonctionnalité, situés dans « C:\Windows\WinSxS ».
Le serveur va redémarrer automatiquement à la fin de l’opération si besoin (option « Restart »). Ensuite, si vous réitérez la commande pour lister les fonctionnalités « Available », aucune fonctionnalité ne doit être retournée, comme ceci :
Enfin, amusez-vous à nouveau avec DiskPart (comme précédemment) pour récupérer l’espace libre disponible. Une belle surprise vous attend, puisque comme prévu, on a récupéré 1 Go d’espace libre :