시간이 갈수록 WinSxS 폴더의 크기가 커지는 이유와 그 해결 방법에 관한 내용이다.
Servicing이란?
Windows Vista 이전에는 보안 업데이트나 BugFix를 위해 시스템을 업데이트를 하면, exe나 dll 같은 시스템 파일이나 레지스트리 값들을 각 파일 단위로 업데이트 하였다. 그러나 Vista부터는 Servicing이라는 새로운 Component 관리 메커니즘을 통해 파일, 레지스트리 값, 서비스, Generic Command, Dependencies, Category를 묶어 하나의 Component 단위로 관리한다. 그리고 이런 여러 Component들을 하나로 묶은 것을 Deployment라고 하며, 또 이 여러 Deployment들을 하나로 묶은 것을 Package라고 한다. 윈도우 업데이트가 이뤄질 때 각각의 Component 단위로 이뤄지는 것이 아니라 Package 단위로 이뤄진다. 그리고 WinSxS 폴더는 이 Component를 모아 저장해둔 공간이므로 Component Store라고 부른다.
Servicing이 적용된 Vista 이후부터는 Windows가 처음 설치 될 때 윈도우 설치 미디어에 들어 있는 모든 시스템 파일들을 Component Store(WinSxS 폴더)에 넣고 설치 작업을 진행한다. 그래서 새로운 기능을 설치 하거나 SFC(System File Checker)를 실행 할 때, 이전 버전 같이 윈도우 설치 CD를 넣으라는 메시지 박스가 나타나지 않는다. 처음 Windows를 설치 할 때나 혹은 시스템 업데이트를 할 때, WinSxS 폴더에서 필요한 Component를 Windows 시스템 폴더(예. C:\Windows)에 연결되도록 하드링크를 만들어, 시스템이나 사용자가 액세스 가능한 상태를 Projection이라고 하며, 반대로 파일이 WinSxS 폴더에 저장되어 있지만 사용하지 않는(하드링크가 되어 있지 않는) 상태를 Stage라고 한다.
Windows Update 통해서나 MSU와 같은 업데이트 파일을 이용해 시스템을 업데이트 할 때, CBS(Component Based Servicing)는 우선 해당 Package가 현재 Windows에 설치되어야 할 Package인 지를 판단한다. 만약 CBS가 설치되어야 할 Package라고 판단하면 아래 CSI(Component Servicing Infrastructure)에게 넘겨 CSI에 의해 Package가 설치된다.
*윈도우 서비스 관리자에서 보이는 Windows Module Installer 혹은 작업 관리자에서 볼 수 있는trustedinstaller.exe 프로세스가 CBS의 역할을 한다.
왜 WinSxS 폴더의 크기는 끊임 없이 커져만 가는 걸까?
WinSxS 폴더에 있는 파일에 Windows 폴더에서 액세스 가능한 하드링크가 생성된 것이며 WinSxS 폴더에 있는 파일이 Windows 폴더에 있는 파일들과 중복되는 것이 아니며 WinSxS폴더에 있는 하나의 파일이 Windows 폴더의 파일로 1:1로 매치 된다는 의미 인데, 아래 그림을 보면 Win32k.sys의 경우 여러 버전 별로 각각 존재하는 것을 볼 수 있다.
Servicing은 새로운 Update가 있으면 새로운 업데이트를 다운로드 한 뒤 이전 버전의 Component는 그대로 Component Store(WinSxS 폴더)에 남겨둔 채 다운로드 받은 새로운 Component를 사용(Projection)한다. 아래 그림에서 보는 것처럼 만약 동일한 Component로 새로운 Update가 나오면 새 Update가 나올 때 마다 WinSxS에 Component들이 쌓이게 된다.
게다가 배포되는 Package안에는 각 서비스팩 버전 별로 각기 다른 버전의 Component가 들어 있어 그 크기는 더욱 커져 간다. 예를 들어 A라는 업데이트가 하나 있다면, Package 안에는 Windows Vista RTM 버전, SP1 버전, SP2 버전에 맞는 업데이트 세가지를 모두 담고 있다. 즉 업데이트 A를 설치 하면 WinSxS에 RTM, SP1, SP2버전의 파일들을 모두 WinSxS 폴더에 저장해 두고 현재 윈도우 서비스팩 버전에 맞는 Component를 Projection 시키고 나머지 파일들은 Stage한다. 그래서 새로운 업데이트가 나올수록 WinSxS 폴더의 크기는 커져가는 것이다.
그럼 왜 이런 구조가 필요한가?
Servicing이 지난 버전 혹은 상위 서비스팩 버전의 Component 들까지 저장하고 있는 구조는 언뜻 보면 불합리해 보일 수도 있지만 이러한 메커니즘은 가능한 최신의 Component를 유지하게 한다. Servicing 구조는 지금까지 모든 Component에 대한 업데이트를 각 버전 별로 모두 가지고 있으므로 현재 상태에서 Stage되어 있는 최신의 Component만 Projection 시키면 된다. 또한 Windows Vista SP1인 상태에서 만약 SP1을 제거한다면, RTM 상태에서 또다시 Windows Update를 통해 최신의 버전으로 무수히 많은 업데이트를 해야 했겠지만, Servicing에서는 Component Store(WinSxS폴더)에 저장된 RTM Component중에 가장 최신의 Component로 Projection하게 된다.
시간이 갈수록 커질 수 밖에 없는 WinSxS 폴더의 공간을 줄일 수 있는 방법은?
웹을 검색해보면 WinSxS를 통째로 삭제하는 방법들을 볼 수 있다. 물론 삭제 한다고 지금 당장은 시스템에 문제가 생기지 않겠지만 Windows의 신뢰성에 문제를 일으킬 수 있는 문제이므로 WinSxS를 직접 삭제하지 않는 것이 바람직하다.
WinSxS 폴더의 크기를 줄이는 안전한 방법은 VSP1CLN.exe혹은 COMPCLN.exe를 실행 하는 것이다. 이 2가지 명령은 현재 컴퓨터에 설치된 서비스팩 이전의 Component들을 WinSxS 폴더에서 안정적으로 삭제한다. 즉 현재 컴퓨터에 설치된 서비스팩 이전 버전의 Stage된 파일들을 제거해 디스크 공간 확보할 수 있는 방법이다. 단 이 명령을 실행하면 서비스 팩을 제거 할 수 있는 옵션도 사라지고 해당 서비스팩 이전 상태로는 돌아 갈 수 없다.
- Windows Vista Service Pack 1이 설치된 컴퓨터에서는 VSP1CLN.exe를 실행한다.
- Windows Vista Service Pack 2가 설치된 컴퓨터에서는 COMPCLN.exe를 실행 한다.
[출처: Sankim's Blog ]