Windows 2008: niekontrolowany wzrost katalogu WinSXS, blokowanie serwera

62

Dla klienta uruchamiam (hostowany zdalnie) serwer wirtualny z systemem Windows 2008 Server. Początkowo miał 10 GB miejsca. W ciągu kilku tygodni - podczas których nic nie zostało zrobione na maszynie oprócz normalnej pracy przy użyciu internetowego systemu icket - system Windows zaczął zapełniać swój niesławny katalog „winsxs” tak bardzo, że ostatecznie dysk twardy był pełny i musieliśmy zamówić kolejne 5 GB. Teraz, trzy tygodnie później, te 5 GB zostały również zużyte przez winsxs i znowu nie mogę pracować na komputerze. Winsxs ma teraz 8 GB, reszta katalogu Windows 5 GB.

Znalazłem w Internecie różne źródła opisujące ten sam problem. Najwyraźniej system Windows 2008 przechowuje wszystkie wersje językowe wszystkich pobranych bibliotek DLL podczas normalnego procesu aktualizacji. Samo usuwanie rzeczy jest opisywane jako śmiertelnie niebezpieczne, ponieważ zawiera istotne składniki. Nie znalazłem żadnego narzędzia ani instrukcji do identyfikowania i usuwania tych plików, które nie są już potrzebne.

Co mogę zrobić? Czy to normalne zachowanie, a jeśli tak, to w jaki sposób zarządzają inne serwery o równie ograniczonej przestrzeni? Czy jest coś, co mogę wyłączyć lub włączyć?

Ze wstępnie zdefiniowanych ról serwera aktywowane są tylko „Usługi plików” (lub jakkolwiek to się nazywa po angielsku, jest to serwer szwajcarski). Ponadto zainstalowałem Apache, mySQL i Subversion. Automatyczne aktualizacje są aktywowane.

Edycja: problem występuje nadal.

Uwaga: Zdaję sobie sprawę, że katalog WinSXS składa się głównie z dowiązań symbolicznych i że użytkownicy często wpadają w panikę patrząc na jego rozmiar. Jednak z 15 GB miejsca mam 1,5 MB używanych przez programy i dane i nic nie zostało. Cieszę się, że mogę nawet uzyskać dostęp do tej cholernej maszyny. * Uwolniłem już 1 GB danych, które zostały wypełnione przez system Windows w ciągu 24 godzin. To jest jak w horrorze. Co próbowałem:

  • Instalowanie dodatku SP2 (dostarczanego z plikiem compcln.exe) nie jest opcją, ponieważ miejsce na dysku nie wystarcza nawet na to.
  • Na komputerze nie ma pliku vsp1clean.exe, prawdopodobnie dlatego, że dodatek SP1 został już scalony z systemem. W rzeczywistości nigdzie nie ma pliku o nazwie * cln.exe.
  • Nie ma kopii w tle. Kopie w tle nie są aktywne.
  • O ile mi wiadomo, nie ma aktywnych punktów przywracania systemu.
  • Jedyną aktywowaną rolą serwera jest „serwer plików”.
  • Standardowa funkcja „czyszczenia” (prawy przycisk myszy na dysku C:) oferuje zaskakująco 2 MB zawartości śmieci i tymczasowych plików internetowych.
  • Używanie jednego ze skryptów „cleanup winsxs” nie jest dla mnie opcją, wszystkie wyglądają na zbyt podejrzane. Nie mogę znaleźć niczego bezpośrednio od firmy Microsoft rozwiązującego ten problem.
Pekka 웃
źródło
Czy ostatecznie to rozwiązałeś?
UpTheCreek,
@UpTheCreek, niestety, nie! Dostawca przyznał nam 5 GB dodatkowej przestrzeni na VPS, której Windows szczęście nie zapełnił. Ale katalog Windows nadal zajmuje 20 GB. Umowa wkrótce wygaśnie, a my przestawimy firmy hostingowe.
Pekka 웃

Odpowiedzi:

24

Katalog WinSxS nie zajmuje prawie miejsca zgłaszanego przez Eksploratora, ponieważ wykorzystuje twarde łącza do plików fizycznych, a nie rzeczywistych plików. Explorer ma problemy z raportowaniem wielkości twardych linków.

Ten artykuł na temat miejsca na dysku (wymieniony tutaj http://aspoc.net/archives/2008/11/20/winsxs-disk-space-and-windows-7/ ) zawiera doskonałe wyjaśnienie katalogu WinSxS.

Jeśli chodzi o problem z faktycznym użyciem dysku - możesz spróbować uruchomić COMPCLN.EXE, aby sprawdzić, czy możesz usunąć stary pakiet serwisowy i pliki poprawki, co powinno trochę pomóc. Spojrzałbym również na wszystkie katalogi logowania, aby sprawdzić, czy dzieje się coś innego.

Christopher_G_Lewis
źródło
Brzmi nieźle, jednak katalog Windows wydaje się w rzeczywistości zajmować> 12 GB (jest to 15 GB miejsca, programy i dane robocze zajmują 2,5 GB i nie ma już wolnego miejsca). Compcln.exe nie istnieje w 2008 roku, czy ktoś zna tam podobne polecenie?
Pekka 웃
Prawdopodobnie tylko W2K8
Christopher_G_Lewis
SP2 brzmi interesująco, ale serwer jest tak pełny, że nie mogę go nawet zainstalować. Poprosiłem dostawcę o dodatkowe miejsce na kilka dni, ale w przeszłości nie okazały się one zbyt pomocne. To jest naprawdę niepokojące i powoduje poważne problemy. Otwieram nagrodę i dodaję zrzuty ekranu.
Pekka 웃
Zgaduję, że ponowne utworzenie obrazu komputera i uruchomienie aktualizacji nie jest dla ciebie opcją?
blueberryfields,
Tylko w ostateczności, ponieważ zainwestowałem dużo pracy, aby wszystko skonfigurować ... To prawdopodobnie by to rozwiązało, ale byłbym bardzo szczęśliwy, mogąc to obejść.
Pekka 웃
18

Byłem na tej samej łodzi co ty. Miałem 5 zupełnie nowych maszyn wirtualnych z 2008 roku i obserwowałem, jak stale wymagają coraz więcej miejsca na dysku w ciągu ostatniego roku. Pozwól mi zilustrować za pomocą windrstat.

Oto zrzut ekranu nowego serwera z 2008 roku :

alternatywny tekst 3,8 GB katalogu winsxs

Oto zrzut ekranu z produkcyjnego serwera 2008 :

alternatywny tekst 5,4 GB katalogu winsxs

Wreszcie zrzut ekranu nowego serwera 2008R2 : alternatywny tekst 5,4 GB katalogu winsxs

Z tego, co mogę powiedzieć, nie ma możliwości obcięcia katalogu winsxs. WinSxS oznacza Windows Side-by-Side. Próbując ograniczyć efekty piekła DLL (tj. Zależności) Microsoft postanowił przechowywać każdą wersję każdej biblioteki DLL kiedykolwiek zainstalowanej w systemie w katalogu winsxs.

To oznacza dwie rzeczy (tak myślę):

  1. Chociaż w winsxs są pewne twarde linki, to jedynymi twardymi linkami powinny być bieżące biblioteki DLL. Innymi słowy, bieżące biblioteki DLL, które są aktywne w systemie, są linkowane z powrotem do tego folderu winsxs.

  2. Wszystkie poprzednie wersje bibliotek DLL są nadal dostępne i których kopia zapasowa znajduje się w katalogu winsxs. Jak widać we wszystkich przykładach, jeśli katalog winsxs naprawdę byłby „głównie twardymi linkami”, nie byłoby mowy, aby zajął ponad 50% twojego bieżącego użycia dysku. Teraz, nawet jeśli prawdą jest, że katalog winsxs to „głównie hardlinks”, 50% użycia oznaczałoby, że cały dysk C: został ponownie podłączony do katalogu winsxs.

Próbowałem wszystkiego Usuwanie starych plików, odinstalowywanie poprawek, usuwanie katalogów poprawek „$”. Wszystko.

W końcu powiększyłem wszystkie partycje C: na wszystkich moich serwerach do 30 GB każdy. Będzie to tylko tymczasowa poprawka, ponieważ katalog winsxs będzie się nadal powiększał. Dobra wiadomość, ponieważ najnowsza wersja NTFS pozwala na powiększanie partycji bez ponownego uruchamiania. Jak wygodnie.

WinSxS to nie tylko irytujący katalog, to nowa metodologia dla wszystkich programistów Windows. WinSxS nie zniknie w najbliższym czasie. Deweloperzy używają WinSxS i zależnie od tego, czy będą tam, aż do udostępnienia nowej metodologii archiwizacji DLL lub rozwiązywania zależności.

W każdym nowym pudełku Windows 2008/7 / Vista czuję, że 30 GB C: jest prawie w porządku. Wystarczająco dużo miejsca (na razie) na łatki, dzienniki i kilka aplikacji.

Nie mogę się doczekać, aż ktoś to wszystko rozwiąże i zacznie ponownie aktywować biblioteki DLL przed łatkami z fałszywymi manifestami , które stają się wektorami ataku / wykorzystania.

Joseph Kern
źródło
1
Dzięki, jeśli nie pojawi się żaden cudowny sposób na odchudzanie WinSXS, zaakceptuję tę odpowiedź za poinformowanie mnie, że nie jestem jedynym, z którym to się dzieje. Szkoda, że ​​nie ma rozwiązania. Uaktualnienie do 30 GB będzie trudne do uzasadnienia, ponieważ jest to zewnętrzny płatny hosting. Może
obniżę
1
Tak, nie jestem zbyt podekscytowany. Wygląda na to, że winsxs nie jest zbiorem twardych linków. Raczej wyświetla twarde linki do reszty systemu, ale wydaje się, że istnieje również różnica zdań w tym zakresie. winvistaclub.com/f16.html ...
Joseph Kern
Chciałem również wspomnieć, że nie mam włączonych ról serwera na żadnym z serwerów, których użyłem na przykład. Serwer produkcyjny to serwer Apache Tomcat. A program, którego użyłem do znalezienia miejsca na dysku, to windirstat.info
Joseph Kern
5
MS określa 32 GB jako minimalne zapotrzebowanie na dysk: microsoft.com/windowsserver2008/en/us/system-requirements.aspx
Christopher_G_Lewis
5

15 GB nie zmniejszy tego z mojego doświadczenia, szczególnie jeśli jest to 64-bitowa maszyna z pewną aktywnością ...

Rozszerzenie dysku VPS, a następnie partycji systemowej powinno być łatwe bez konieczności ponownej instalacji czegokolwiek, jakkolwiek jest to drogie. Oferowanie mniej niż 60 GB dysku systemowego dla nowoczesnego systemu Windows Server VPS nie wydaje się przemyślane, nawet jeśli ~ 30 GB może go przeciąć na chwilę: 7

Przejście na instalację 32-bitową usunie trochę narzutu, a przejście na Server Core usunie wiele. Mój 32-bitowy serwer plików Server 2008 Core, który obsługuje svnserve, dfs, print print itd. I jest regularnie aktualizowany, ma około 5 GB ... podczas gdy mój 64-bitowy Server 2008 Standard obsługuje aplikacje sieciowe (asp.net i php przy użyciu IIS) zajmuje teraz 30 GB. Oba te wskaźniki oczywiście wykluczają magazyny danych / partycje, tylko system Windows i oba są tylko przykładami Mam 64-bitowe dyski systemowe Server 2008, które obecnie zajmują od 10 do 35 GB.

Każde zainstalowane narzędzie, aktualizacja lub aplikacja powiększy katalog winsxs, a odinstalowanie rzeczy nie zawsze będzie miało wpływ na winsxs, ponieważ system może myśleć, że te zależności są używane przez inne narzędzia.

Oskar Duveborn
źródło
5

Jest to prawdopodobnie dla ciebie za późno i opiera się tylko na doświadczeniu Vista, ale:

  1. Nie wierz tym, którzy mówią „to głównie twarde linki, więc folder nie jest tak duży, jak się wydaje” - to prawda, ale jeśli zabrakło miejsca na dysku, było ono zbyt duże.
  2. Jedynym „lekarstwem”, jakie kiedykolwiek sugerowano, jest usunięcie aplikacji, które dodały wzdęcia do folderu - ale nie ma udokumentowanego sposobu na znalezienie winowajców.
  3. Moim „lekarstwem” po nie znalezieniu satysfakcjonujących odpowiedzi było brutalne usunięcie największych (i niechcianych) folderów, np .:

    • 6 wersji „wyszukiwania w języku naturalnym Microsoft”, każdy o wielkości ~ 300kB
    • Wiele orientalnych czcionek, których nigdy nie użyję (czasami 6 vns, w większości identycznych)
    • itd itd.

Zakładając, że zaczynasz od dobrej kopii zapasowej (obrazu), spróbuj i przekonaj się!

Martin Gerhold
źródło
4

Jeśli to możliwe, możesz spróbować przenieść WinSXS na inną partycję jako obejście. Według mojej wiedzy nie ma sposobu na pozbycie się zawartości WinSXS. Ta urocza rzecz jest w samym sercu systemu Vista / Win2008, więc ... Nie słyszałem nic lepszego niż przeniesienie jej na inną partycję.

Oto link do bloga opisujący, jak to zrobić: Kliknij

Sugeruję wykonanie pełnej kopii zapasowej (jeszcze lepiej: obrazu) całej partycji C: przed wykonaniem procedury. Pamiętaj, że próbowałem tego tylko na Vista, a nie na Win2008 Server.

imagodei
źródło
Dobry pomysł, ale w moim przypadku (jest to VPS bez alternatywnej pamięci) niestety nie jest to możliwe.
Pekka 웃
--- i zrobienie obrazu nie jest takie proste z tego samego powodu - w przeciwnym razie zrobiłbym go i spróbowałbym uruchomić na własnej maszynie w celu dalszego zbadania.
Pekka 웃
3

Jeśli głównym winowajcą jest WindowsUpdate, powiedziałbym, że jedyną alternatywą dla kupowania większej ilości miejsca lub przeprowadzania operacji na plikach systemowych jest ograniczenie wzrostu spowodowanego przez aktualizacje firmy Microsoft, które powodują problemy.

Ponieważ korzystasz głównie z platformy aplikacji innej niż Microsoft, prawdopodobnie nie będziesz w stanie zepchnąć 90–95% aktualizacji „ważnych”.

Dlatego możesz wyłączyć automatyczne aktualizacje, a następnie BARDZO wybiórczo wybierać, które „ważne” aktualizacje zastosować. Stosuj tylko te, które usuwają luki, które BEZPOŚREDNIO naruszają Twój plan bezpieczeństwa. Większość „ważnych” aktualizacji prawdopodobnie nie dotyczy twojego scenariusza bezpieczeństwa, a jeśli tak, prawdopodobnie możesz zmodyfikować swój plan bezpieczeństwa, aby się bez nich obejść (np. Nie używaj IE na serwerze, używaj alternatywnych usług plików, zwiększaj bezpieczeństwo sieci) .

Matias Nino
źródło
3

Jeśli WinDirStat i sam system operacyjny (po prostu zajrzał do Mojego komputera) zgłaszają taką samą ilość wykorzystanego miejsca, to nie ma znaczenia, jeśli błędnie zlicza rozmiary jako twarde łącza. Jeśli system operacyjny myśli, że brakuje Ci miejsca - BRAK MIEJSCA.

Mam ten problem na Storage Server 2008 i DC (Server 2008). Na DC nie zainstalowano żadnych innych programów, ale aktualizacje systemu Windows, oba serwery zajmują 15 GB miejsca w WinSXS. Serwer pamięci został wstępnie zainstalowany przez HP z 40 GB na C :, więc też mam ten problem. Do 5 GB wolnego miejsca.

Zostało to naprawione w systemie Windows 8 / Server 2013 za pomocą DISM do czyszczenia zastąpionych aktualizacji (DISD.exe / online / cleanup-image / startcomponentcleanup), więc najwyraźniej jest to problem, który zauważono, niestety bez żadnej innej naprawy niż aktualizacja dla tych, którzy utknęli z 2008.

NickIzk99
źródło
3

W Windows Server 2008 R2 możesz użyć DISM do wyczyszczenia WinSxS, oczywiście po tym nie będziesz w stanie przywrócić aktualizacji. Oto wyjaśnienie: http://www.sqlskills.com/blogs/glenn/how-to-reclaim-disk-space-in-your-windowswinsxs-directory-on-windows-server-2008-r2-sp1/

Podsumowując, musisz uruchomić następujące polecenie jako administrator:

DISM.exe /online /Cleanup-Image /spsuperseded

Wiem, że to może nie być odpowiednie rozwiązanie, ponieważ masz system Windows Server 2008 (najwyraźniej nie R2), ale znalazłem to pytanie, szukając rozwiązania dla R2, więc może być przydatne dla niektórych osób.

Ynhockey
źródło
powoduje to usunięcie tylko plików wcześniejszych niż SP1, a nie plików z poprawek, które pojawiły się później.
Hubert Kario
1

Kilka sugestii:

  • Gdzie jest twój plik wymiany?

  • Skonfiguruj maszynę testową z tym samym oprogramowaniem, aby sprawdzić, czy możesz odtworzyć problem. To zdecydowanie nie jest normalne, a jedyne, co mogę wymyślić, to to, że coś w tym pudełku stale modyfikuje bibliotekę DLL (lub coś w tym rodzaju), a więc system Windows stale tworzy jej kopie zapasowe.

15 GB jest bardzo mało w przypadku instalacji systemu Windows 2008 - mój standardowy dysk C: dla wersji Windows 2008 to 60 GB.

John Röthlisberger
źródło
15 GB to rozmiar pakietu wirtualnego dostawcy hostingu, a każde rozszerzenie (zaczynamy od 10 GB) jest bardzo drogie. Dlatego też nie mogę przenieść pliku wymiany nigdzie indziej.
Pekka 웃
Och, zapomniałem: Z tego samego powodu powielanie maszyny nie jest takie łatwe. Będzie to ostateczność, chyba że cokolwiek innego zadziała.
Pekka 웃
Więc zmień dostawcę.
TomTom
1

http://tech.xlab.si/2009/07/move-winsxs-folder/

Znaleziono ten artykuł, ale nigdy go nie wypróbowałem. Wygląda na to, że istnieje sposób na przejście do folderu winsxs. jeśli ktokolwiek może tego spróbować, proszę udać się i dać mi znać

techsmarty
źródło
To jest link z odpowiedzi imagodei.
Cees Timmerman
1

Microsoft podał Wymagania systemowe dla Server 2008: „Miejsce na dysku: minimum 32 Gb lub więcej”.

http://www.microsoft.com/windowsserver2008/en/us/system-requirements.aspx

Jak myślisz, dlaczego może swobodnie pracować w połowie tej przestrzeni?

TessellatingHeckler
źródło
Wypożyczam rozwiązanie VPS od dużego dostawcy hostingu, który pierwotnie był pakietem 10 GB z preinstalowanym serwerem 2008. Zakładam, że musieli jakoś to przewidzieć. Duzi dostawcy mają pakiety Windows 10 GB lub 20 GB: Patrz np . Bit.ly/h0AZsP . Dostawca powiedział mi, że mój to dziwaczny przypadek
Pekka 웃
Mój błąd, podłączyłem się do wymagań Server 2008 R2 SP1. Serwer 2008 wymaga co najmniej 8 GB - microsoft.com/latam/windowsserver2008/sysreqs.mspx - ale nadal zaleca 40 GB.
TessellatingHeckler
dzięki za link. Jednak to mogłoby być to, że system operacyjny został uaktualniony w między - będę badać
Pekka 웃
0

Jedną z opcji - jeśli to tylko tani stary VPS, którego używasz do prostych rzeczy, warto włączyć kompresję NTFS na dysku lub określonych folderach:

Może to wycisnąć trochę miejsca z napędu. Artykuły mówią, że dotyczy XP, ale w Win7 / 2008 to te same kroki:

  • Aby skompresować plik lub folder na dysku NTFS
  • Jak korzystać z kompresji plików

    1. Kliknij prawym przyciskiem myszy wolumin, który chcesz skompresować, a następnie kliknij polecenie Właściwości .
    2. Na karcie Ogólne kliknij, aby zaznaczyć pole wyboru Kompresuj wolumin, aby zaoszczędzić miejsce na dysku , a następnie kliknij przycisk OK.
    3. W Potwierdź zmiany atrybutów kliknij odpowiednią opcję.
David d C e Freitas
źródło
0

Natrafiłem na ten sam problem. Na pewno WinSxs jest częściowo winny ... Ale myślę, że problem częściowo wynika z narzędzi takich jak WinDirStat, które w ten sam sposób liczą rozmiary plików i połączenia z plikami. Łączenie jest tylko wskaźnikiem do pliku, a nie duplikatem wszystkich bloków tworzących plik.

Odkryłem, że VSS jest większym winowajcą tego problemu. Użyj następujących poleceń, aby sprawdzić, czy VSS zużywa zbyt dużo miejsca na dysku, odzyskaj to miejsce lub ustaw mniejszy limit:

vssadmin lista shadowstorage

vssadmin Usuń ShadowStorage / For = C: / On = C:

vssadmin Resize ShadowStorage / For = C: / On = C: / MaxSize = 20%

Clayton
źródło