Folder WinSxS – dlaczego jest taki wielki?


Temat przypomniał mi się po pewnej konferencji, kiedy podczas którejś z sesji padło z sali pytanie (chyba trochę retoryczne) o folder WinSxS (zarówno w Windows Vista jak i Windows 7).

Wtedy nie ja prowadziłem sesję i nie bardzo był też czas, żeby odpowiedzieć na to pytanie ot tak z sali.

Ale problem zapisałem jako “do opisania na blogu” i postanowiłem dziś parę słów na ten temat napisać.

Co to jest folder WinSXS?

Ciekaw jestem ile osób podniesie teraz rękę na pytanie “Kto wie co to jest folder WinSXS, gdzie się znajduje i dlaczego jest o niego tyle krzyku?

Otóż folder WinSXS znajduje się na dysku twardym komputera z zainstalowaną Windows Vista i Windows 7 w lokalizacji domyślnej: C:\Windows\WinSXS\ (lub poprawniej %systemroot%\WinSxS\).

W folderze tym przechowywane są m.in. kopie wszystkich zainstalowanych poprawek, ale również a może przede wszystkim wiele elementów / komponentów systemu operacyjnego.

Dlaczego jest taki “duży”?

Jeśli nie słyszeliście o tym katalogu to proponuję zajrzeć teraz tam i sprawdzić jaką ma wielkość. Pewnie się zdziwicie, że jest on naprawdę duży! Ale dlaczego?

Tu wyjaśnienia wymagają dwa elementy, których słowa kluczowe to: komponentyzacja i hardlinki.

Od Windows Vista i Windows Server 2008 zmienił się sposób sposób przechowywania informacji o elementach systemu.

Komponenty – a cóż to jest?

Teraz wszystko z czego się składa system operacyjny zapakowano do komponentów. W nich zawarte są binaria, pliki dodatkowe, informacje o instalacji, powiązane klucze rejestru oraz informacje o określonych uprawnieniach jakie komponenty powinny mieć.

Komponenty takie są wrzucane do folderu właśnie WinSxS już w trakcie instalacji systemu. Dlatego nawet po świeżej instalacji folder ten jest duży (u mnie ma teraz 6 GB).

Komponenty są później wykorzystywane w wielu miejscach systemu.

Na przykład przy doinstalowaniu jakiegoś elementu systemu (którego nie było zainstalowanego jeszcze) pliki są wyciągane właśnie z tego katalogu – dlatego też już nie zobaczycie okienek proszących Was o włożenie płyty instalacyjnej Windows 7 w celu dogrania brakujących elementów.

Ale nawet już po zainstalowaniu może się zdarzyć, że teoretycznie dany komponent potrzebny jest w 3 miejscach na dysku (z różnych powodów).

Żeby nie kopiować plików 3x stworzony został (wreszcie, bo niektóre systemy już to miały) system hardlinków.

Czym jest hardlink?

Hardlink to wskaźnik w systemie, który wskazuje nam pewien określony, istniejący już w systemie plik.

Jeśli taki hardlink stworzymy - to system będzie myślał, że mamy w tym konkretnym miejscu plik.

Kliknięcie prawym przyciskiem pokaże nam jego właściwości (m.in. rozmiar) dokładnie tak jakby to był plik fizyczny. I to mimo tego, że on istnieje w zupełnie innym miejscu (np. w katalogu WinSxS).

Dla systemu nie będzie różnicy czy to jest fizyczny plik czy tylko wskaźnik do niego.

Stąd bierze się problem liczenia objętości plików w katalogu gdzie są hardlinki. Bo system widzi je jako prawdziwe pliki, więc sumuje ich objętość i pokazuje nam wartość większą niż jest w rzeczywistości.

Przykład

Najlepiej będzie jak pokaże Wam ideę hardlinków oraz sposobu liczenia zajętości miejsca na przykładzie.

Zaczynamy od pustego folderu:

image 

Teraz na potrzeby przykładu potrzebujemy dużego pliku. Mamy do tego bardzo przyjemną opcję w fsutil.

W moim wypadku: fsutil file createnew plik.dat 100000000

image

Wystarczy jedno polecenie i mamy gotowy plik plik.dat o określonej wielkości (tu miało być ok. 100 MB):

image

Teraz ważna rzecz – zwróćcie uwagę na liczby na powyższym obrazku. Jeden plik w katalogu zajmuje teraz 100 000 000 bajtów. A na dysku pozostało nam 4 618 256 384 bajtów wolnego miejsca.

Tworzymy teraz hardlinki – czyli robimy 5 plików, które dowiązujemy do pliku źródłowego:

image

Teraz zobaczcie jak to wygląda na obrazku poniżej:

image

Mamy 6 plików i każdy teoretycznie ma ok. 100 MB. System raportuje nam, że mamy w tym katalogu 6 plików o łącznej objętości ok. 600 MB.

Ale co ciekawe parametr “bytes free” praktycznie nam się nie zmienił. I nie jest to błąd!

Do czego więc są te hardlinki?

Pewnie to jest pierwsze pytanie jakie przychodzi Wam do głowy. A odpowiedź jest prosta choć może być paradoskalna. Otóż chodzi o zaoszczędzenie miejsca.

Jeśli mamy jakieś pliki, które potrzebujemy użyć w różnych miejscach dysku/systemu to hardlinki są tu idealne.

I tak dla przykładu – w zasadzie większość elementów w katalogu C:\Windows\System32 (czy generalnie %systemroot%\System32) to tak naprawdę hardlinki do plików, które znajdują się w… folderze WinSxS!

Co za tym idzie jak badacie wielkość katalogu %systemroot% to właściwie powinniście spokojnie odjąć sobie cała wielkość katalogu System32, który jest w dużej mierze hardlinkowany do WinSxS.

Informacyjnie jeszcze Wam powiem, że istnieje oczywiście coś takiego jak pliki .lnk (pliki skrótów / shortcuts) czy linki symboliczne. Ale aby z nich można było korzystać to aplikacje muszą być tego świadome, a nie zawsze są. W wypadku hardlinków one nawet nie wiedzą że korzystają ze skrótu, bo nawet system nie jest tego do końca świadomy.

No to tyle z serii - pytań jakie czasami dostaję przy różnych okazjach.

Po więcej szczegółów na temat folderu WinSxS odsyłam do dosyć starego (ale aktualnego) wpisu na blogu Ask the Core Team.

Comments (14)

  1. @acid: No może faktycznie określenie "prawdziwy plik" nie jest najszczęśliwsze, ale nie przychodzi mi do głowy nic lepszego 🙂

    Co do bloga – jak najbardziej zapraszam. Mam nadzieję, że ciągle będzie ciekawie 🙂

  2. @Amandi: To ja jeszcze dodam, że z hardlinkami jest tak, że jak skasujecie plik właściwy to dopóki będzie istniał choć jeden hardlink – to plik również nadal będzie istniał.

    Nie wiem dokładnie jak to się dzieje, ale tak jest. W powyższym przykładzie jakby skasować plik plik.dat oraz kopia1.dat, kopia2.dat, kopia3.dat i kopia4.dat – to plik nadal by istniał bo zostałby hardlink kopia5.dat.

    Ale to co pisałeś – z kasowaniem WinSxS to jak najbardziej prawda. Tego katalogu lepiej nie ruszać samemu. Do SP1 do Visty był chyba mały tool, który portafił robić pewne porządki z tym katalogiem, ale to pewnie też na osobny wpis się nadaje.

  3. @acid: Chyba nie do końca rozumiem 🙂

    System generalnie nie widzi różnicy między hardlinkiem a plikiem. Dlatego z jednej strony liczby hardlinki x3 (sumując ich wielkość). Z drugiej strony aplikacje z hardlinkami nie mają problemów, bo widzą to jako zwykłe pliki.

  4. @Jakub: No i to co mówisz, jest dodatkowym wyjaśnieniem tego co ja napisałem, a czego nie byłem pewien (mechanizmu działania) 🙂

  5. @Jakub: Ale “pan Ewangelista” to ja 🙂 Tylko tu “ukrywający” się jako “masakra”. Ale to naprawdę ja (co zresztą widać po kolorze obramówki mojego komentarza).

    Ale tu się nie zgodzę z Tobą “po co rozróżniać”. Bo jeśli miałbyś 3 identyczne prawdziwe pliki, każdy np. po 100MB – to zajmują one fizycznie 300 MB na Twoim dysku. Jak robisz prawdziwy plik i 2 hardlinki – to de facto fizycznie zajętego miejsca masz 100 MB (odchodząc teraz trochę od tego jak to system pokazuje – co wyjasniałem dlaczego tak się dzieje).

    Więc jednak różnica między hardlinkiem a plikiem jednak jest.

  6. Amadeusz says:

    I tak jeszcze w ramach uwag ostrzegawczych, należałoby dodać, iż próba usunięcia tego folderu (w Sieci setki porad tego typu), może skończyć się nieszczęściem nie tylko dla systemu, ale i dla użytkownika. 😀 To tak gwoli przestrogi.

  7. Jakub Anderwald says:

    A czym według ciebie różnią się hardlinki od "prawdziwych plików"? Bo z tego co wiem, plik to dane na dysku i hardlink do nich, robiąc ręcznie hardlinka, robisz po prostu drugiego hardlinka.

    I dopóki jest choć jeden hardlink do danych na dysku, dane te nie zostaną usunięte przy kasowaniu pliku

  8. Jakub Anderwald says:

    No tak, tylko po co rozróżniać "prawdziwe pliki" od hardlinków, jeśli to jedno i to samo? Zamiast dawać proste rozwiązanie, to tylko zamiesza ludziom w głowach i będą tworzyć własne teorie "jak to działa".

    A nie odpisywałem Tobie, tylko panu Ewangeliście 😉

  9. acid says:

    @masakra: Nie do końca się zgodzę. Z tego co pisał Jakub, wystarczy powiedzieć że wgrywasz dane i tworzysz na dysku do nich hardlinka w odpowiednim miejscu 🙂 Całość więc wystarczy posegregować na a) Dane b) hardlinki do nich 🙂

    W twoim przykładzie więc – 3x wrzucasz dane na dysk kazdy z jednym linkiem.

    Tak btw. nie ma mklink pod XP? 😉

    Pozdrawiam,

  10. acid says:

    @masakra: Kurcze, jak to pisałem to wydawało mi się strasznie przejrzyste, teraz faktycznie można powiedzieć że zakręciłem 😉

    Jak najbardziej się zgadzam z tym co piszesz, tylko samo określenie "prawdziwy plik" do mnie nie przemawia, bo tak de facto są to dane na dysku z hardlinkiem, prawda? 😉

    Tak przy okazji – całkiem sympatyczny blog, chyba będę tu regularnie zaglądać 🙂

    Pozdrawiam,

    A_

  11. wkurzony użytkownik Visty says:

    Tylko taka mała uwaga. Po roku ozywania Visty, tylko i wyłącznie do pracy,  czyli nic nowego nie było instalowane przez rok (z wyjątkiem aktualizacji) katalog ten powiększył się do drobnych 40GB. Chyba zaczynam rozumieć dlaczego tak wszyscy narzekają na Vistę (żałuje, ze kupiłem ten szajs)

  12. Neptunek says:

    Nie wiem oco chodzi – i oco te narzekania na VISTę – używam jej na laptopie firmowym, reinstalacje różnego softu dość często się odbywają, mało tego używam go do grania w różne gry ;), wszystkie aktualizacje także – teraz mija 1 rok i 10 miesięcy od instalacji tej kopii Visty – ten katalog ma niecałe 9GB – nie widzę żadnych problemów z tym systemem 🙂

  13. Slawek says:

    1. Niestety w tym katalogu lądują praktycznie wszystkie pliki jakie się pojawiają w używanych programach a nie będące (dla systemu) danymi. Vistowate mają pomysł zachowania pliku bo może się kiedyś przydać.

    2. Autor w ogóle nie rozumie co to jest plik i jak wygląda odwołanie do niego. Zanim się zacznie tworzyć takie opisy warto się najpierw odrobinę dokształcić. Jakub w skrócie to opisał, ale autor i tak wie lepiej. No cóż…

  14. Slawek says:

    Zapomniałem dopisać, że katalog ten można bezpiecznie usunąć, w zasadzie przywracając działanie takie jak w XP (deinstalowanie programów nie powoduje zachowania pliku na przyszłość). Tylko, że:

    – Nie będzie działać Windows Update

    – Trzeba to zrobić na etapie instalacji, po już jest za późno

Skip to main content