Por que a pasta / winsxs cresce tão grande e pode ser menor?

174

Uma máquina virtual Vista que uso apenas possui um disco rígido virtual de 10 GB - e estou preocupado com a falta de espaço ao longo do tempo.

Eu usei o TreeSize para verificar os culpados.

insira a descrição da imagem aqui

E o principal culpado é a /winsxspasta "Windows Side-By-Side" .

insira a descrição da imagem aqui

O que é a pasta Windows Side By Side? Bem, isso é explicado muito bem aqui .

Todos os componentes do sistema operacional são encontrados na pasta WinSxS - na verdade, chamamos esse local de armazenamento de componentes. Cada componente possui um nome exclusivo que inclui a versão, idioma e arquitetura do processador para o qual foi construído. A pasta WinSxS é o único local em que o componente é encontrado no sistema, todas as outras instâncias dos arquivos que você vê no sistema são "projetadas" por meio de links físicos no armazenamento de componentes. Deixe-me repetir esse último ponto - há apenas uma instância (ou cópia de dados completa) de cada versão de cada arquivo no sistema operacional, e essa instância está localizada na pasta WinSxS. Então, sob essa perspectiva, a pasta WinSxS é realmente a totalidade de todo o sistema operacional, conhecido como "simples" em sistemas operacionais de nível inferior.

Isso explica por que a pasta começa grande, mas não por que aumenta com o tempo - a resposta para essa pergunta é a manutenção. Nas versões anteriores do Windows, a unidade atômica de serviço era o arquivo, no Windows Vista é o componente. Quando atualizamos um binário específico, lançamos uma nova versão de todo o componente, e essa nova versão é armazenada ao lado da original no repositório de componentes. A versão superior do componente é projetada no sistema, mas a versão mais antiga da loja não é tocada. O motivo disso é a terceira parte do motivo pelo qual o armazenamento de componentes fica tão grande.

Muitas outras pessoas reclamando do tamanho da pasta / winsxs também :

Um colega de trabalho recebeu recentemente sua atualização de laptop a cada dois anos e estava no meio do carregamento de seu novo laptop com o Vista. Por alguma razão, seu disco rígido C: foi particionado em apenas 25 GB e o restante do espaço reservado para uma unidade D :. muito maior.

De qualquer forma, depois de carregar muitas atualizações do Windows, ele ficou com praticamente nenhum espaço disponível em C: e, por algum motivo, o diretório WinSxS aumentou para mais de 8 GB.

Embora eu soubesse para que serve o diretório WinSxS (Windows Side-by-Side), não sabia ao certo por que esse diretório explodiria em tamanho tão rapidamente com as atualizações normais do sistema operacional.

Eu realmente não me importo em ter todos esses arquivos duplicados para a segurança, mas eu faço cuidado sobre o VM explodindo devido a um erro de falta de espaço em disco. Então .. / winsxs pode ser reduzido com segurança de alguma forma? Parece que não pode ser ..

Os administradores não devem, por qualquer motivo, se encarregar de limpar o diretório / winsxs - isso pode impedir que o Windows Update e o MSI funcionem corretamente posteriormente. Impedir a exclusão acidental do diretório é realizado colocando um forte descritor de segurança no diretório que herda seus filhos.

Se essa pasta / winsxs ficar maior, terei que recriar novamente esta máquina virtual ... o que realmente não quero!

Jeff Atwood
fonte
24
TreeSize Livre ... Eu uso windirstat.info para este fim ;-)
Steve Schnepp
6
Você não pode aumentar a VM e estender a partição principal?
Sam Saffron
1
Você pode utilizar isto: windowsfixup.com/2009/05/... pessoalmente eu iria ficar longe dele, a menos que eu poderia encontrar o código-fonte
Sam Saffron
11
Existem muitos links físicos no winsxs; portanto, o tamanho também é frequentemente relatado em excesso.
317 Greg Greg D
4
Primeira pergunta sobre SuperUser
puretppc

Respostas:

101

Há um bom comando que limpa após uma instalação do Windows 7 SP1 (ele me salvou em torno de 3 GB):

DISM /online /cleanup-Image /spsuperseded

Deve ser executado em um prompt de comando elevado

GvS
fonte
2
excelente, eu só estava pensando em limpeza de Windows 7 SP1
Jeff Atwood
6
existem outros comandos para o Windows 7 que também podem remover backups de atualização que não são do SP?
galacticninja
8
Como alternativa, você pode usar a opção "Arquivos do sistema de limpeza" na ferramenta Limpeza de disco e excluir os arquivos de backup do Service Pack.
Michał T
5
@ Tortas, executei a Limpeza de disco primeiro e o DSIM ainda se livrou de uns 3 GB extras (medindo% de espaço livre em disco, não o tamanho da pasta). Então vale a pena fazer as duas coisas.
Matt Wilkie
3
@UpTheCreek, você tem certeza? Depois de fazer a limpeza de disco, Limpar arquivos do sistema, eu receboC:\Windows\system32>DISM /online /cleanup-Image /spsuperseded Deployment Image Servicing and Management tool Version: 6.1.7600.16385 Image Version: 6.1.7600.16385 Service Pack Cleanup can't proceed: No service pack backup files were found. The operation completed successfully.
Cees Timmerman
44

TL; DR

O winsxs na verdade contém links físicos . Ele não usa tantos dados adicionais quanto você pensa.

Um link físico é como um 'atalho' ou 'ponteiro' para um arquivo real localizado em algum lugar do seu disco. Um link rígido não ocupa nenhum espaço no disco rígido: serve apenas como redirecionamento.

Como o winsxs consiste em links físicos, a exclusão desses links não liberará espaço. Os arquivos reais continuarão em vários locais do seu disco.


winsxs não é um problema

... é uma solução! (Bem, principalmente .)

Um resumo, "Marcado como resposta por Ronnie Vernon, MVP, Moderador", diz aqui :

Uau, longa discussão sobre hardlinks e winsxs. De qualquer forma, aqui estão alguns pontos resumidos do que eu entendi sobre como tudo isso funciona.

Para começar respondendo à pergunta do OP com a resposta perfeita postada acima por Andre.Ziegler, você não toca no winsxs. Talvez alguns dos arquivos possam ser cortados como mp3, avi, etc., mas o restante dos arquivos do sistema deve ser deixado em paz . Eu também estou usando o Link Shell Extension, como postado acima por Ronnie Vernon, uma maneira fácil de ver quais são os hard links (seta vermelha) e quais são arquivos simples.

Antes de chegar aqui, vi em muitos lugares pessoas pedindo a ferramenta de limpeza depois de instalar o SP1 para Windows 7 como o vsp1cln. Não há ferramenta dedicada, tudo foi integrado ao serviço de Limpeza de disco. Uma observação que eu gostaria de fazer aqui é que, mesmo que a opção indique que ele removerá algumas centenas de MB depois que limpei minha unidade, o serviço removeu cerca de 3 GB de arquivos em excesso, variando de sistema para sistema. Engraçado, agora tenho mais espaço do que antes da instalação do SP1. Bom, MS.

Em relação aos links físicos, fiquei divertido com a confusão criada em torno deles. Eu não sou um nerd do linux, e geralmente uso apenas links flexíveis ... eles são suficientes para mim, mas as pessoas não entendem como os difíceis funcionam e como o tamanho é contado.

Um grupo de arquivos selecionados, links ou não, sempre será contado como uma soma. Isso significa que, se eu pegar um arquivo de 10 MB e criar 2 links físicos, a seleção dos três terá 30 MB e esse é o tamanho correto, porque, diferentemente dos links virtuais relacionados à entrada e tabela originais do arquivo mestre do arquivo, tem 0 bytes, os links físicos estão relacionados aos próprios dados , têm sua própria entrada no MFT, mas apontam para o mesmo endereço de dados, obviamente tendo como tamanho o tamanho dos dados reais, os mesmos horários, atributos e assim por diante. Por que abaixo.

Quanto resta na unidade? Simples: exatamente o mesmo que os relatórios de propriedades da unidade . Não selecione todos os arquivos, ocultos e não ocultos em C, faça comparações ou use ferramentas que o façam automaticamente, pois não mostrarão o uso real do disco rígido. Por quê? Porque:

  1. essa operação faz uma lista de todos os arquivos selecionados, incluindo links físicos como arquivos separados, pega cada um deles e aumenta os tamanhos, as propriedades da unidade contam os dados armazenados reais
  2. nem todos os arquivos serão contados, as pastas protegidas de passagem e os arquivos de leitura não serão contados e as informações de volume do sistema geralmente têm arquivos muito grandes protegidos dessa maneira
  3. esse número é útil apenas em casos de transferência de arquivos, se os arquivos, links etc. precisarem ser copiados para DVD ou NAS, é o quanto eles ocupariam e os links não serão preservados, pois são recursos específicos do NTFS, não disponíveis ou disponível em diferentes formas sob ISO, UDF, NFS e outros sistemas de arquivos, mas eles serão clonados.

Faça um teste ... copie um arquivo de 10 MB, a.exe, de uma unidade diferente e observe como o espaço livre cai nos 10 MB. Crie um link físico (mklink / H b.exe a.exe). Agora, esses dois arquivos selecionados "usarão" 20 MB nas propriedades de seleção , mas, na verdade, apenas 10 MB serão verificados nas propriedades da unidade , que terão o mesmo espaço livre utilizado / após a cópia do arquivo. Exclua um deles, o espaço livre permanecerá o mesmo. Agora exclua o último e o espaço aumentará em 10 MB. Houve algum dano? NÃO.

O que é winsxs? Um dllcache muito melhor. Onde, com o dllcache no XP, tivemos cópias de arquivos que realmente foram adicionados ao tamanho do uso desde que foram clonados, isso na verdade melhora o uso, mas não a proteção total (contra vírus). Se um desinstalador desonesto achar que precisa remover algumas bibliotecas de tempo de execução do System32, ele excluirá apenas os links, mas não os dados, e os links serão recriados, mantendo o uso do espaço de dados o mais baixo possível, melhor do que arquivar winsxs em cabs e ter os táxis ao lado dos arquivos originais. O winsxs também traz serialização, compartimentando arquivos com o mesmo nome, mas com versões diferentes, pelo bem dos desenvolvedores, o que é uma coisa boa / ruim, os torna preguiçosos em codificar corretamente, mas ajuda quando eles não querem mais codificar.

Fiz isso para ajudar alguém que chega aqui pelas mesmas razões que fiz ... uso excessivo de espaço pelo winsxs após o SP1. E espero que tenha sido útil.

Mateen Ulhaq
fonte
Essa resposta não é um aspecto extremamente importante que está completamente ausente na resposta aceita?
mafu 13/08/2015
33

Essas duplicatas e backups são extremamente irritantes quando o espaço em disco é limitado.

Por estar naquele local, a única maneira que descobri que não comprometeria a estabilidade do sistema operacional era usar generosamente a configuração "Compactar conteúdo para economizar espaço em disco" .

Ao compactar todos os diretórios de backup no diretório do Windows, pude reduzir o tamanho do diretório de 6,5 GB para 5 GB, sem efeitos colaterais reconhecíveis. Usá-lo em algumas das suas coisas fora do diretório Window aumentaria ainda mais seus 10 GB.

Eran
fonte
2
Eu tentei compactá-lo e eu digo "Acesso negado" para a pasta e, em seguida, poqexec.log. Supondo que fosse um bloqueio de leitura. Alguma coisa para contornar isso?
Quintin Par
1
Na verdade, você ainda está comprometendo a estabilidade do seu sistema operacional. A pasta WinSxS NÃO deve ser compactada. De fato, é uma péssima idéia. Basta pesquisar no Google 'comprimir winsxs' e você descobrirá.
Hello71
6
Não tenho certeza de que essa técnica seja uma boa idéia - muitos arquivos na árvore winsxs são links físicos. A ativação da compactação nesses arquivos compactará todas as instâncias do arquivo? Pode haver algumas conseqüências não intencionais no desempenho.
precisa saber é o seguinte
3
@FiascoLabs, você percebeu que essa é uma pergunta de quatro anos, que se refere especificamente a uma unidade de 10 GB? Você também poderia afirmar que "ninguém usa o Vista". Pode ser verdade agora, mas não era assim no momento em que a pergunta foi feita.
eran
1
@eran No entanto, todas as perguntas Win7 sobre winsxs ficar fechado como duplicado desta questão
Tobias KIENZLER
27

Se você possui o Vista e o SP2 instalado, pode limpar os arquivos antigos do sistema com a nova ferramenta de limpeza do Service Pack .

  1. Clique em Iniciar> Todos os Programas> Acessórios> Prompt de Comando ou clique em Iniciar> Executar e digite cmd para abrir o Windows do Prompt de Comando
  2. Execute o comando "Compcln.exe". O caminho é "c: \ Windows \ System32 \ compcln.exe".
  3. Os usuários receberão uma pergunta sobre a manutenção permanente do Vista SP2 no sistema.
  4. Digite “Y” e pressione enter, o sistema começará a executar a limpeza dos componentes do Windows.
Tomas Andrle
fonte
Eu não poderia localizar isso no meu Vista SP1
pencilslate
Sim, provavelmente é novo no Vista SP2.
Tomas Andrle
4
Não salvou tanto por mim, mas posso confirmar que existe a ferramenta e isso me salvou um G mais
itj
O Compcln.exe não está no W10.
Laurie Stearn
21

No Windows 8, você pode reduzir o tamanho da pasta WinSxS removendo os Recursos do Windows :

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

O importante é o parâmetro / Remove, que é novo no Windows 8 .

O maior espaço no WinSxS é usado nas atualizações do Windows que você instala ao longo do tempo. No Windows 8 / Windows 10, você pode detectar e remover as atualizações que são substituídas por atualizações mais recentes (como as atualizações cumulativas mais recentes do IE) executando este comando:

dism.exe /online /cleanup-image /startcomponentcleanup

ou executando o assistente de limpeza de disco e selecione "Limpeza do Windows Update"

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Verifique também se você instalou a atualização da pilha de serviços http://support.microsoft.com/kb/2821895 .

Essas atualizações executam uma limpeza profunda do WinSxS e compactam todos os arquivos DLLs / Exe, do WinSxS que não estão em uso no momento, em um arquivo delta menor:

insira a descrição da imagem aqui

Veja os diferentes tamanhos de arquivo.

O Windows 8.1 adiciona novos comandos do DISM . Ele /startcomponentcleanuprecebe um novo parâmetro /ResetBaseque torna sua última atualização permanente e remove todos os arquivos antigos para economizar mais espaço.

Você também pode executar um novo comando dism /online /cleanup-image /analyzecomponentstorepara analisar a pasta WinSxS:

insira a descrição da imagem aqui

Ele informa agora quando você deve executar a limpeza para economizar espaço.

magicandre1981
fonte
2
Isto está agora disponível para Windows 7 SP1, bem como: support.microsoft.com/kb/2852386
Mark Henderson
Aqui havia 12,4 Gb no disco antes StartComponentCleanupem 1809. 6,54 GB no disco depois StartComponentCleanup, uma grande melhoria. 92 exclusões pendentes, sem renomeações pendentes. Dos 76812 arquivos no WinSXS , o 21452 ocupa 2,90 Gb no disco, com datas de setembro a outubro do ano passado, quando o computador foi atualizado para 1803. Isso é típico de uma instalação atual do W10 ou ainda estamos entupidos?
Laurie Stearn
1
@LaurieStearn Não faço ideia. Eu apenas executo o Win10 na VM e crio uma nova VM para cada nova versão do Win10 no sistema host do Windows 8.1.
magicandre1981 6/10
9

Boas notícias! Agora existe um método oficialmente sancionado , da Microsoft, para Windows 7 SP1, para limpar sua pasta WinSXS .

  1. Instale o HotFix 2852386 - você pode fazer o download manualmente ou aguardar o download do Windows Update
  2. Isso adiciona uma nova opção ao Assistente de limpeza de disco (em Limpar arquivos do sistema) que você pode ativar para "Limpeza do Windows Update". Marque esta opção.
  3. Clique OK

Advertência: Talvez você não consiga desinstalar determinadas atualizações do Windows após executar a limpeza da sua pasta WinSxS.

Mark Henderson
fonte
6

Parece que finalmente existe uma maneira de fazer isso no Windows 8.1 service pack 1 e no Windows Server 2012 R2 .

Ferramenta de análise de armazenamento de componentes:

Dism.exe /Online /Cleanup-image /AnalyzeComponentStore

No final da verificação, o usuário obtém um relatório dos resultados (tamanho real da pasta winsxs) assim:

analyzecomponentstore resultados

Limpeza de armazenamento de componentes:

Hoje, a Limpeza do Repositório de Componentes deve ser acionada manualmente por um usuário final, executando o DISM ou usando o Assistente de Limpeza de Disco. Para tornar a Limpeza de Armazenamento de Componentes mais útil para o usuário final médio, ela será adicionada a uma tarefa de manutenção, economizando automaticamente espaço em disco para os usuários finais. Para habilitar isso, uma alteração será feita para permitir a desinstalação dos drivers substituídos da caixa de entrada sem a necessidade de uma reinicialização (hoje, todas as instalações / desinstalações de driver feitas pelo CBS exigem uma reinicialização).

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

  2. Ferramenta de limpeza de disco, botão Limpar arquivos do sistema.

    ferramenta de limpeza de disco

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

Jeff Atwood
fonte
4
já postou maneira atrás: superuser.com/a/594216/174557 Não há necessidade de postar a mesma coisa duas vezes;)
magicandre1981
2

Dism ++ é o que você está procurando ( https://www.chuyu.me/en/index.html ).

Você economizará gigabytes de espaço ...

Você precisará selecionar "Assemblies WinSxS substituídos". Se você fizer isso - ele receberá um aviso de que essas atualizações instaladas não podem ser desinstaladas. Clique em ok e depois digitalize

insira a descrição da imagem aqui

Isso lhe dará uma idéia de quanto espaço você economizará. Bata na limpeza e deve limpar esse espaço.

Journeyman Geek
fonte
1
Instruções específicas sobre como usar este programa devem ser fornecidas. Consigo obter o programa no Github, mas não consigo acessar o link que você forneceu.
Ramhound 27/02
1
Eu tentei isso em uma VM - parece muito rápido e realmente não quebrou nada, tanto quanto eu posso dizer. Eu posso brincar com isso, pois parece ter alguns recursos bacanas de pós-instalação (ooh backups de drivers!). Editei sua resposta com etapas básicas e uma captura de tela. Espero que você esteja vendo a diferença e os votos positivos em breve.
Journeyman Geek
Ferramenta incrível! Ao contrário do WinSXSLite, ele funcionou e liberou quase 8 GB de espaço para mim.
Suncatcher
1

Espero que seja útil ter um oneliner simples, caso contrário, uma ótima resposta de Jeff Atwood perde a /ResetBaseopção.

Cuidado : Essa opção ajuda bastante a reduzir o tamanho da pasta WinSxS, mas exclui completamente as versões anteriores dos componentes, para que você não possa reverter as atualizações instaladas anteriormente. Mas se o seu sistema se comportar bem, você deve estar seguro (especialmente se você não estiver no ambiente de produção)

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

Isso funciona no Windows 8.1 e posterior

maoizm
fonte
0

Além das soluções mencionadas, uma maneira de obter espaço significativo é comprimir todo o conteúdo da pasta. No entanto, isso não pode ser feito usando o Explorer (são necessários direitos adequados), pelo menos a partir do Windows 7.

Estas instruções mostram como conseguir isso:

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

Notas / dicas:

  1. O agrupamento marca a maneira recomendada de executar esses comandos, se feito manualmente. Normalmente, não deve haver problemas (exceto em alguns arquivos ignorados, porque eles estão em uso), mas o resultado de cada grupo deve ser verificado

  2. Eu executei estas etapas na instalação de vários sistemas operacionais em casa e no trabalho: Win7x64, Win10x64, Windows Server 2008R2 e Windows Server 2012 e não encontrei nenhum problema até agora.

  3. Algumas etapas levam algum tempo, especialmente o tempo de compactação. A maioria das etapas itera e mostra os arquivos processados. Minimizar a janela do prompt de comando pode ganhar alguma velocidade.

Alexei
fonte
-4

Você pode remover esses arquivos com segurança. Se você precisar deles novamente, será necessário instalar mais algumas coisas.

Agora vamos à correção!

  • Abra o Windows Explorer e navegue até C: \ Windows \ System32. Procure o arquivo "vsp1cln.exe".
  • Clique com o botão direito nesse arquivo e selecione a opção 'Executar como administrador'.
  • A ferramenta de limpeza do Vista Service Pack 1 removerá todos os arquivos redundantes que foram substituídos.

A quantidade de espaço em disco que você ganha dependerá do sistema, quais programas estão instalados, etc.

Axxmasterr
fonte
16
Você pode remover com segurança os arquivos winsxs? Você tem certeza sobre isso?!
UpTheCreek 21/01