Servicing Stack (1) 부제: WinSxS 폴더를 이해하다


인터넷을 떠돌다가 우연히 Windows Vista와 7의 WinSxS(C:\Windows\WinSxS) 폴더에 대한 글들을 보았습니다, 대부분의 질문이 “하드 디스크가 부족해서 확인해 보니까 WinSxS 폴더가 엄청 디스크를 차지 하더라고요, 이걸 어떻게 지우죠?” 라는 질문으로 시작해서 답변으로는 WinSxS 폴더의 삭제 방법을 알려주는 글들이 많았습니다.

디스크 용량에 상당히 민감할 수 밖에 없는 일반 데스크톱 사용자 윈도우 탐색기를 통해 보이는 WinSxS 폴더의 GB급의 크기는 큰 부담일 것 입니다만 뭔지도 모르고 무턱대고 삭제하는건 상당히 위험하겠죠? 그래서 이번 포스팅에서는 WinSxS 폴더의 정체를 밝히고 실질적으로 WinSxS를 관리하는 ‘Servicing Stack’이라는 개념을 알아보고 WinSxS의 사이즈를 안정적으로 줄 일 수 있는 방법도 소개 하도록 하겠습니다.

오늘은 첫 번째 시간으로 WinSxS를 이해하기 위한 핵심인 하드 링크(Hard link)에 대해서 설명 드리겠습니다. 우선은 WinSxS는 머리에서 잠시 내려 놓으시고 먼저 하드 링크를 이해하는데 힘써주십시오. (그리 어렵지 않습니다..)

하드링크(Hard Link)란?

정의: 파일의 디렉토리 엔트리(Directory entry)를 칭하며 모든 파일은 하나 이상의 하드링크를 가진다.

흠.. 좀 이해하기 어렵죠? 조금 풀어서 설명 드리면 디스크 상의 파일 모든 파일은 사용자 혹은 시스템이 액세스 하기 위한 경로(폴더와 파일명) 정보인 디렉토리 엔트리(Directory entire)를 가지는데 이를 하드링크라고 부릅니다. 예를 들어 디스크 위에 A라는 파일이 있는데 이것에 접근 하려면 C:\temp\01.txt라는 경로가 필요한데 이 경로정보를 하드링크라고 부릅니다. 하나의 파일은 한 개 이상의 하드링크를 가지며 A 라는 파일이 있을 때 C:\temp\01.txt와 C:\sankim\02.txt라는 하드링크 두개를 가질 수 있습니다. 이 두 개는 경로나 파일 이름은 다르지만 결국은 하나의 같은 파일 A가 되는 것입니다.

그래도 아직 설명이 드라이(Dry)한 게 가슴에 와 닿지 않죠? 아래 예제와 함께 하드링크를 설명 드리겠습니다.

디스크 상에 A라는 파일이 있고 경로는 C:\temp\01.txt 입니다, 즉 사용자(혹은 시스템이나 응용프로그램)는 C:\temp\01.txt라는 경로(Path)를 통해서 파일 A에 액세스 할 수 있습니다. C:\temp\01.txt라는 디렉토리 엔트리는 파일 A에 액세스 하기 위한 일종의 링크로 생각 할 수 있고 그래서 하드링크라고 부릅니다. *보통 우리가 파일을 휴지통에서 삭제(Delete)하는 것은 이 하드링크를 제거하는 것입니다.

clip_image002

*중요: 위 갈색 네모에 있는 C:\temp\01.txt는 파일이 아닙니다, 실제 파일은 ‘파일 A’이고 갈색 네모 박스는 사용자나 시스템이 ‘파일 A’에 액세스 할 수 있도록 해주는 경로 정보입니다*

여기서 만약 사용자 혹은 시스템이 파일 A에 접근하기 위한 경로를 C:\temp\01.txt 뿐만 아니라 다른 이름으로도 액세스해야 할 필요가 있다면 또 다른 하드링크를 생성해 하나의 파일에 두 개 이상의 경로를 만들 수 있습니다. 파일 A에 하드 링크로 또 다른 경로 C:\sankim\02.txt를 추가 한다면 아래와 같은 구조를 가지게 됩니다.

clip_image004

이러면 사용자(시스템 혹은 응용프로그램 포함)는 C:\temp\01.txt이건 C:\sankim\02.txt이건 동일하게 파일 A에 액세스 할 수 있습니다. 다시 한번 강조하지만 여기서 중요한 건 두 개의 파일이 생성되는 것이 아니라 디스크 위에 파일은 그대로고 그 파일에 액세스 할 수 있는 경로 정보인 디렉토리 엔트리가 하나 더 추가 되었다는 것입니다.

만약 여기서 C:\temp\01.txt를 삭제하면 어떻게 될까요? 그래도 사용자는 아래 그림과 같이 C:\sankim\02.txt를 통해 파일 A에 액세스 할 수 있습니다. 왜냐 하면 파일 A에 액세스 할 수 있는 C:\temp\01.txt라는 경로 없어진 것뿐이고 다른 경로는 남아 있기 때문입니다.

clip_image006

사용자가 하드링크를 만들려면 Mklink.exe라는 도구를 할 수 있는데요, 그럼 다중 하드링크를 제 Windows 7 컴퓨터에서 만들어 보도록 하겠습니다. 하드링크 생성을 위해 아래와 같이 “mklink.exe /H”를 이용해 C:\sankim이라는 폴더에 02.txt라는 Hard link를 만듭니다. *여기서 /H 옵션을 빼면 심볼릭 링크 (Symbolic link)가 만들어 집니다, 심볼릭 링크는 나중에 설명 드리겠습니다.

clip_image008

위와 같이 하드링크를 만든 뒤 01.txt에서 아무 텍스트를 넣고 02.txt를 열어 보면 01.txt와 동일한 내용임을 확인 할 수 있습니다, 또 반대로 02.txt에서 텍스트를 변경해도 01.txt에서도 동일하게 텍스트가 변경된 것을 확인 할 수 있습니다. 이것은 두 경로가 경로 정보만 다를 뿐 동일한 파일이라는 증거가 됩니다.

그럼 01.txt를 삭제했을 때 어떤 현상이 나타나는지 확인해 보도록 하겠습니다.

clip_image010

C:\temp\01.txt를 삭제 했지만 여전히 C:\sankim\02.txt를 통해서 파일에 액세스가 가능함을 확인 할 수 있습니다. 이제 하드링크가 이해가 되시죠?

지금까지 열심히 하드링크를 설명 드렸는데 하드링크하고 WinSxS가 무슨 관계냐고요? WinSxS 폴더를 열어서 확인해 보면 안에 있는 파일들이 모두 Windows(일반적으로 C:\windows)폴더에 있는 파일과 동일한 파일인 것을 확인 할 수 있습니다. 이것은 최초 시스템 파일들(Windows 폴더에 있는 파일들)은 원래는 WinSxS에 기본 경로가 있었고 윈도우가 설치 되면서 Windows 폴더에 하드링크를 생성한 것 입니다. 그래서 시스템이나 사용자는 Windows\system32에 연결된 하드링크 된 파일을 이용하는 것입니다. 아래 그림에서처럼 같이 “fsutil hardlink list”로 확인하면 세가지 파일 모두 Windows/system32와 WinSxs에 하드링크 되어 있는 것을 확인 할 수 있습니다.

clip_image012

아래 ‘WinSxS 하드링크 예’그림에서와 같이 Windows 폴더가 원본 파일인 것 같지만 사실은 원래Windows\WinSxS에 처음 하드링크된 파일들이고 Windows에 있는 파일들은 WinSxS에 있는 파일들을 하드링크를 생성해 사용하는 것입니다.

clip_image014

그러므로 어차피 경로가 다르게 보일 뿐이지 동일한 하나의 파일이므로 WinSxS가 있다고 해서 중복된 파일인해 디스크 공간을 더 차지하는 것은 아닙니다.

자~ 그럼 WinSxS가 있다고 해서 디스크 공간을 소비하는 것은 아니라는 것을 하드링크를 통해 이해하게 되었습니다. 하지만 그와 별개로 시간이 지날수록 WinSxS의 크기는 점점 커져만 가는데요.. 왜 그런 걸까요? 그것은 Windows Vista, Server 2008에서부터 새로 적용된 Servicing 이라는 OS Component를 관리하는 매커니즘 때문입니다. 다음 시간에는 새로운 Servicing에 대해서 말씀드리도록 하도록 하겠습니다.

Comments (10)

  1. Anonymous says:

    ㄴ 퍼주셔서 감사합니다 🙂

  2. Anonymous says:

    ㅎㅎㅎ 감사합니다 🙂

  3. Anonymous says:

    지금 보니 위에 쓴 글이 오해의 소지가 있을 수 있어 다시 답변을 답니다. 2탄을 잃어 보시면 이해하시겠지만 함 maystyle님과 같이 삭제 하시면 문제의 가능성이 있습니다. 하드디스크 용량 때문에 고민이시라면 꼭 제가 언급한 vsp1cln.exe나 compcln.exe를 이용해 하시기 바랍니다.

  4. Anonymous says:

    말씀하신 내용이 담긴 Servicing Stack 구조 2탄이 금주중으로 나올 예정입니다.

    디스크 사이즈를 위해 WinSxS 폴더 내용을 삭제 하실 생각이시라면 Windows Vista Service Pack 1이 설치된 컴퓨터에서는 VSP1CLN.exe를 실행, Windows Vista Service Pack 2, Windows Server 2008이 설치된 컴퓨터에서는 COMPCLN.exe를 실행 하시기를 권장합니다. 전부는 아니지만 상당한 사이즈 절감 효과가 있습니다.

    *Windows Server 2008의 경우는 기본적으로 SP1을 포함하므로 VSP1CLN.exe는 사용하지 않습니다.

  5. 위시 says:

    역시 !! 오늘도 좋은글 잘 보고 갑니다!!

    신종플로가 유행인데 건강도 조심하시구요~!

  6. Maystyle says:

    오랫만에 놀려옵니다.

    저두 위의 주제를 다룬적이 있었는데…

    WinSxS는 동일한 컴포넌트라도 버전이 다르면 모두 저장해 놓게 됩니다.

    즉 동일한 DLL 이라도 버전에 따라 안정성을 위해 이전 버전까지 모두 들구 있죠…

    예로 들 수 있는게 바로 Vista SP1 업데이트 입니다.

    해당 업데이트 후 WinSxS도 커지게 됩니다.

    안정성을 위하여 지우는건 피해야 하지만 제 경우 그냥 소유권 가져와서 지워 버렸습니다.

  7. hongyang says:

    감사히 펍니다.

  8. 지나가는이 says:

    오해의 소지가 있어 적습니다

    하드 링크를 사용하면 물리적 디스크 사용 공간은 그대로이나

    운영체제가 인식하는 디스크 사용량은 2배로 증가합니다

  9. 세월인증 says:

    좋은글 이제서야 보았습니다.블로그에 링크 걸어둘게요~ 1 , 2 두 포스트 함께 ㅎ

  10. 나그네 says:

    컴퓨터를 쓰기 시작한지 거의 대부분의 시간은 윈도우를 사용했지만 정말 운영체제를 사용자가 알아야 하는 부분이 너무 많네요. 맥을 쓴지 얼마 안됐지만 운영체제에 대해서 전혀 몰라도 생상성만 집중해서 좋네요.
    정말 MS 는 망해야 정신차릴듯…..

Skip to main content