web-dev-qa-db-fra.com

Pourquoi le dossier/winsxs s’agrandit-il si grand et peut-il être réduit?

Une machine virtuelle Vista que j'utilise ne dispose que d'un disque dur virtuel de 10 Go - et je crains qu'il ne manque d'espace au fil du temps.

J'ai utilisé TreeSize pour vérifier les coupables ..

enter image description here

Et le principal responsable est le dossier/winsxs ou "Windows Side-By-Side" .

enter image description here

Qu'est-ce que le dossier Windows Side By Side? Eh bien, c'est expliqué assez bien ici .

Tous les composants du système d'exploitation se trouvent dans le dossier WinSxS. En fait, nous appelons cet emplacement magasin de composants. Chaque composant a un nom unique qui inclut la version, le langage et l'architecture de processeur pour lesquels il a été créé. Le dossier WinSxS est le seul emplacement où se trouve le composant sur le système. Toutes les autres occurrences des fichiers que vous voyez sur le système sont «projetées» par une liaison définitive depuis le magasin de composants. Permettez-moi de répéter ce dernier point - il n'y a qu'une seule instance (ou copie de données complète) de chaque version de chaque fichier dans le système d'exploitation, et cette instance est située dans le dossier WinSxS. Vu sous cet angle, le dossier WinSxS représente en réalité l’intégralité du système d’exploitation, qualifié de «plat» dans les systèmes d’exploitation de bas niveau. Cela explique également pourquoi vous ne serez plus invité à fournir un support lors de l'exécution d'opérations telles que le vérificateur de fichiers système (SFC) ou lors de l'installation de fonctionnalités et de rôles supplémentaires.

Cela explique pourquoi le dossier commence gros, mais pas pourquoi il s’agrandit avec le temps - la réponse à cette question est la maintenance. Dans les versions précédentes de Windows, l’unité atomique de maintenance était le fichier, dans Windows Vista, c’était le composant. Lorsque nous mettons à jour un binaire particulier, nous publions une nouvelle version de l'ensemble du composant. Cette nouvelle version est stockée à côté de la version originale dans le magasin de composants. La version la plus récente du composant est projetée sur le système, mais l’ancienne version du magasin n’a pas été touchée. La raison en est la troisième raison pour laquelle le magasin de composants devient si volumineux.

Beaucoup d'autres personnes se plaignent de la taille du dossier/winsxs également :

Un collègue a récemment reçu une actualisation de son ordinateur portable tous les deux ans et était en train de charger son nouvel ordinateur portable avec Vista. Pour une raison quelconque, son disque dur C: a été partitionné à seulement 25 Go et le reste de l’espace réservé à un lecteur beaucoup plus volumineux, D :.

Quoi qu'il en soit, après avoir chargé de nombreuses mises à jour Windows, il ne lui restait pratiquement plus d'espace disque sur C: et, pour une raison quelconque, le répertoire WinSxS avait atteint la barre des 8 Go.

Bien que je sache à quoi servait le répertoire WinSxS (Windows Side-by-Side), je ne savais pas très bien pourquoi ce répertoire allait exploser si rapidement avec des mises à jour normales du système d'exploitation.

Je ne me soucie pas vraiment d’avoir tous ces fichiers en double pour des raisons de sécurité, mais je faisme soucie de la VM exploser en raison d’une erreur d’espace insuffisant. So .. can/Winsxs peut-il être réduit de quelque manière que ce soit? Il ne semble pas que cela puisse être ..

Les administrateurs ne doivent, pour aucune raison, nettoyer le répertoire/winsxs - car cela pourrait empêcher par la suite Windows Update et MSI de fonctionner correctement. Pour empêcher la suppression accidentelle du répertoire, vous devez mettre un descripteur de sécurité fort sur le répertoire qui hérite de ses enfants.

Si ce dossier/winsxs devient plus volumineux, je vais devoir re-imaginer cette machine virtuelle .. ce que je vraimentne veux pas faire!

174
Jeff Atwood

On dirait que il existe enfin un moyen de le faire dans Windows 8.1 service pack 1 et Windows Server 2012 R2 .

Outil d'analyse de magasin de composants:

Dism.exe /Online /Cleanup-image /AnalyzeComponentStore

À la fin de l'analyse, l'utilisateur obtient un rapport des résultats (taille réelle du dossier winsxs) comme suit:

analyzecomponentstore results

Nettoyage du magasin de composants:

Aujourd'hui, le nettoyage du magasin de composants doit être déclenché manuellement par un utilisateur final, soit en exécutant DISM, soit en utilisant l'Assistant Nettoyage de disque. Afin de rendre Component Store Cleanup plus utile pour l'utilisateur final moyen, il sera ajouté à une tâche de maintenance, ce qui permettra de libérer automatiquement de l'espace disque pour les utilisateurs finaux. Pour l'activer, une modification sera apportée pour permettre la désinstallation des pilotes de boîte de réception remplacés sans nécessiter de redémarrage (aujourd'hui, toutes les installations/désinstallation de pilotes effectuées par CBS nécessitent un redémarrage).

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

  2. Outil de nettoyage de disque, bouton Nettoyer les fichiers système.

    disk cleanup tool

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

6
Jeff Atwood

Il existe une commande Nice qui nettoie après une installation de Windows 7 SP1 (elle m’a sauvé environ 3 Go):

DISM /online /cleanup-Image /spsuperseded

Doit être exécuté à partir d'une invite de commande élevée

101
GvS

TL; DR

winsxs contient en fait liens durs . Cela ne prend pas autant de données {supplémentaires} _ que vous le pensez.

Un lien physique est comme un "raccourci" ou un "pointeur" vers un fichier réel situé quelque part sur votre disque. Un lien dur ne prend pas d’espace disque en lui-même: il sert simplement de redirection.

Winsxs étant composé de liens physiques, la suppression de ces liens ne libérera aucun espace. Les fichiers réels continueront de rester à divers emplacements sur votre disque.


winsxs n'est pas un problème

... c'est une solution! (Eh bien, principalement.)

Un résumé, "marqué comme réponse par Ronnie Vernon, MVP, modérateur", dit ici :

Wow, longue discussion sur les liens durs et WinSxs. Quoi qu'il en soit, voici quelques points résumés de ce que j'ai compris de la façon dont tout cela fonctionne.

Pour commencer par répondre à la question du PO avec la réponse parfaite publiée plus haut par Andre.Ziegler, vous ne touchez pas à winsxs. Certains fichiers peuvent être coupés comme les fichiers MP3, AVI, etc., mais le reste des fichiers système doit rester seul . Moi aussi, j'utilise Link Shell Extension comme indiqué ci-dessus par Ronnie Vernon, un moyen facile de voir quels sont les liens durs (flèche rouge) et quels sont les fichiers simples.

Avant d'arriver ici, j'ai vu dans de nombreux endroits des personnes demander l'outil de nettoyage après avoir installé SP1 pour Windows 7, comme vsp1cln. Il n'y a pas d'outil dédié, tout a été intégré au service de nettoyage de disque. Une remarque que je voudrais faire ici est que même si l'option indique qu'elle supprimera quelques centaines de Mo après avoir nettoyé mon disque, le service supprime environ 3 Go de fichiers en excès, de sorte qu'il varie d'un système à l'autre. C'est marrant, j'ai encore plus d'espace qu'avant l'installation de SP1. Bien aimable, MS.

En ce qui concerne les liens durs, je me suis amusé à la confusion créée autour d'eux. Je ne suis pas un geek sous Linux, et je n'utilise généralement que des liens souples ... ils me suffisent, mais les gens ne comprennent pas comment les points durs fonctionnent et comment la taille est comptée.

Un groupe de fichiers sélectionnés, liens ou non, sera toujours compté comme une somme. Cela signifie que si je prends un fichier de 10 Mo et crée 2 liens physiques, la sélection de ces trois aura 30 Mo. La taille est correcte, car contrairement aux liens symboliques liés à l'entrée du fichier principal du fichier d'origine et ont 0 octets, les liens physiques sont liés aux données mêmes , ont leur propre entrée dans MFT mais pointent vers la même adresse de données, ayant évidemment pour taille la taille des données réelles, les mêmes temps, attributs, etc. sur. Pourquoi, ci-dessous.

Combien reste-t-il sur le lecteur? Simple: exactement autant que les propriétés du lecteur indiquent . N'allez pas sélectionner tous les fichiers, cachés ou non cachés sur C et faire des comparaisons, ou using tools qui le font automatiquement car il ne montrera pas l'utilisation réelle du disque dur. Pourquoi? Parce que:

  1. cette opération crée une liste de tous les fichiers sélectionnés, y compris les liens physiques, sous forme de fichiers séparés, prend chacun d'eux et ajoute les tailles, les propriétés des lecteurs comptent les données stockées réelles
  2. tous les fichiers ne seront pas comptés, les dossiers protégés de toute traversée et les fichiers de lecture ne seront pas comptés et les informations de volume système contiennent généralement de très gros fichiers protégés de cette manière.
  3. ce numéro est utile uniquement en cas de transfert de fichier, si les fichiers, liens, etc. doivent être copiés sur DVD ou NAS, c'est combien ils occuperaient, et les liens ne seront pas conservés car il s'agit de fonctionnalités spécifiques à NTFS, non disponibles. ou disponible sous différentes formes sous ISO, UDF, NFS et d'autres systèmes de fichiers, mais ils seront clonés.

Faites un test ... copiez un fichier a.exe de 10 Mo à partir d'un autre lecteur et notez que l'espace libre est réduit de 10 Mo. Établissez un lien solide (mklink/H b.exe a.exe). Maintenant, ces deux fichiers sélectionnés "utiliseront" 20 Mo dans les propriétés de sélection , mais en réalité seulement 10 Mo vérifiés dans les propriétés du lecteur , ce qui donnera le même espace libre qu'auparavant. la copie du fichier. Supprimez un, l'un ou l'autre, l'espace libre restera le même. Supprimez maintenant le dernier et l'espace augmentera de 10 Mo. Y at-il du mal à faire? NON.

Qu'est-ce que Winsxs? Un bien meilleur dllcache. Où avec le dllcache dans XP, nous avions des copies de fichiers qui ajoutaient réellement à la taille d'utilisation depuis leur clonage, ce qui améliore réellement l'utilisation mais pas la protection totale (contre les virus). Si un programme de désinstallation malhonnête pense qu'il doit supprimer certaines bibliothèques d'exécution de System32, il ne supprimera que les liens, mais pas les données. Les liens seront alors recréés tout en maintenant l'utilisation de l'espace de données au plus bas possible, mieux que l'archivage de winsxs dans les cabs. les taxis à côté des dossiers originaux. Winsxs apporte également la sérialisation, compartimentant les fichiers avec le même nom mais une version différente, pour le dev, ce qui est une bonne/mauvaise chose, cela les rend paresseux pour coder correctement, mais cela aide quand ils ne veulent plus coder.

Je l'ai fait pour aider quiconque atterrit ici pour les mêmes raisons que moi ... un "usage excessif de l'espace" par winsxs après le SP1. Et j'espère que c'était utile.

44
Mateen Ulhaq

Ces duplications et sauvegardes sont extrêmement gênantes lorsque l’espace disque est limité.

Étant à cet endroit, la seule façon pour moi de ne pas compromettre la stabilité du système d'exploitation consistait à utiliser généreusement le paramètre "Compresser le contenu pour économiser de l'espace disque" .

En comprimant tous ces répertoires de sauvegarde sous le répertoire Windows, j'ai pu réduire la taille du répertoire de 6,5 Go à 5 Go, sans effets secondaires reconnaissables. L’utiliser sur certains de vos fichiers en dehors du répertoire Window allongerait encore vos 10 Go.

33
eran

Si vous avez Vista et que vous avez installé le SP2, vous pouvez nettoyer les anciens fichiers système avec le nouveau Service Pack Clean-up Tool .

  1. Cliquez sur Démarrer> Tous les programmes> Accessoires> Invite de commandes ou cliquez sur Démarrer> Exécuter et tapez cmd pour ouvrir l'invite de commandes Windows.
  2. Exécutez la commande "Compcln.exe". Le chemin est "c:\Windows\System32\compcln.exe".
  3. Les utilisateurs se verront demander si Vista SP2 doit rester en permanence dans le système.
  4. Tapez «Y» et appuyez sur Entrée, le système commencera à effectuer le nettoyage des composants Windows.
27
Tomas Andrle

Dans Windows 8 vous pouvez réduire la taille du dossier WinSxS en supprimant les fonctionnalités Windows :

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

L'important est le paramètre/Remove qui est nouveau pour Windows 8 .

Le plus d'espace dans WinSxS est utilisé par WindowsUpdates que vous installez au fil du temps. Dans Windows 8/Windows 10 vous pouvez détecter et supprimer les mises à jour remplacées par de nouvelles mises à jour (comme les nouvelles mises à jour cumulées IE) exécutées par cette commande:

dism.exe /online /cleanup-image /startcomponentcleanup

ou en exécutant l’assistant de nettoyage de disque et sélectionnez "Windows Update Cleanup"

enter image description here

enter image description here

enter image description here

Vérifiez également que vous avez installé la mise à jour de la pile de maintenance http://support.Microsoft.com/kb/2821895 .

Cette mise à jour exécute un nettoyage en profondeur de WinSxS et compresse tous les fichiers DLL/Exe de WinSxS qui ne sont pas utilisés actuellement dans un fichier delta plus petit:

enter image description here

Regardez les différentes tailles de fichiers.

Windows 8.1 ajoute de nouvelles commandes DISM . Le /startcomponentcleanup obtient un nouveau paramètre /ResetBase qui rend votre dernière mise à jour permanente et supprime tous les fichiers plus anciens pour économiser plus d'espace.

Vous pouvez également exécuter une nouvelle commande dism /online /cleanup-image /analyzecomponentstore pour analyser le dossier WinSxS:

enter image description here

Il vous indique maintenant quand vous devez exécuter le nettoyage pour économiser de l'espace.

21
magicandre1981

Vous pouvez utiliser VSP1CLN.EXE pour rendre SP1 permanent, ce qui, selon cette page libérera des composants remplacés par SP1.

20
Ben Lings

Bonnes nouvelles! Il existe maintenant une méthode officiellement approuvée , de Microsoft, pour Windows 7 SP1, pour nettoyer votre dossier WinSXS .

  1. Installez HotFix 2852386 - vous pouvez le télécharger manuellement ou attendre qu'il soit transmis via Windows Update.
  2. Cela ajoute une nouvelle option au nettoyage de disque Wizard (sous Nettoyer les fichiers système) que vous pouvez activer pour "Nettoyage de la mise à jour Windows". Cochez cette option.
  3. Cliquez sur OK

Mise en garde: Il se peut que vous ne puissiez pas désinstaller certaines mises à jour Windows après le nettoyage de votre dossier WinSxS.

9
Mark Henderson

Dism ++ est ce que vous recherchez ( https://www.chuyu.me/fr/index.html ).

Vous économiserez des gigaoctets d'espace ...

Vous devez sélectionner "Assemblages WinSxS remplacés". Si vous le faites, cela vous avertira que ces mises à jour installées ne peuvent pas être désinstallées. Cliquez sur OK, puis scannez

 enter image description here

Cela vous donnera une idée de l'espace que vous allez économiser. Hit nettoyage, et il devrait effacer cet espace.

2
user425154

J'espère qu'il sera utile d'avoir un simple oneliner, sinon la bonne réponse de Jeff Atwood manque le code /ResetBase.

Attention : Ce commutateur permet de réduire considérablement la taille du dossier WinSxS. mais supprime complètement les versions précédentes des composants. Vous ne pourrez donc pas annuler les mises à jour installées auparavant. Mais si votre système se comporte bien, vous devriez être en sécurité (surtout si vous n'êtes pas dans l'environnement de production)

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

Cela fonctionne dans Windows 8.1 et versions ultérieures

1
maoizm

Outre les solutions susmentionnées, un moyen de gagner beaucoup d’espace consiste à compresser l’ensemble du contenu du dossier. Toutefois, cela ne peut pas être fait avec Explorer (des droits appropriés sont nécessaires), du moins à partir de Windows 7.

Ces instructions montrent comment y parvenir:

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

Notes/conseils:

  1. Le regroupement marque le moyen recommandé d'exécuter ces commandes, si cela est fait manuellement. Normalement, il ne devrait y avoir aucun problème (sauf pour certains fichiers ignorés, car ils sont utilisés), mais le résultat de chaque groupe doit être vérifié.

  2. J'ai effectué ces étapes sur l'installation de divers systèmes d'exploitation à la maison et au travail: Win7x64, Win10x64, Windows Server 2008R2 et Windows Server 2012 et je n'ai vu aucun problème jusqu'à présent.

  3. Certaines étapes prennent un certain temps, notamment le temps de compression. La plupart des étapes itéreront et montreront les fichiers traités. Réduire la fenêtre d’invite de la commande peut s’accélérer.

0
Alexei