오래전에 해외 포럼에 올라온 내용인데, 저는 MS에서 직접 통합한 원본이 올라오면 포맷하고 새로 설치할 생각이라 그다지 관심을 가지지 않았습니다. 하지만 댓글로 질문 주신 분도 계시고, 이런 내용은 하나쯤 제 블로그에 올려두는게 맞겠다 싶어 올려봅니다.

여기서 소개해드릴 방법은 윈도우 7에 내장된 기능인 DISM을 이용하여 직접 이미지에 서비스팩을 통합하는 것입니다. 원래 비스타부터 서비스팩은 오프라인 통합을 막아두었기 때문에 안 되는게 정상인데, 패키지를 풀어서 일부 파일을 수정해주면 오프라인 통합도 가능합니다. 마치 빌드가 다른데도 언어팩을 통합할 수 있었던 것과 비슷한 원리입니다.



0. 작업 조건

먼저 이 작업은 윈도우 7 (또는 서버 2008 R2) 에서 진행하는 것을 기준으로 설명드립니다. 물론 XP나 비스타 환경에서도 WAIK를 설치하면 DISM 작업이 가능합니다만, 윈도우 7 원본에 서비스팩을 통합하고픈 분들이 XP를 사용하고 있지는 않을 것이라 판단하기 때문에 XP에서의 작업은 설명하지 않겠습니다.

또한 64비트 원본에 서비스팩을 통합하려면 64비트 환경이어야 합니다. 그 이유는 windows6.1-KB976932-X64.exe 파일이 64비트 환경에서만 풀리기 때문입니다.



1. 초보자용 가이드

먼저 초보자를 위해 제가 만든 배치파일을 올려드립니다. 사실 초보자용이라 말은 했지만 초보자가 아니라 하더라도 일일이 작업하는게 귀찮으신 분들에겐 이 배치파일이 유용할 수도 있습니다. CAB 압축을 푸는데는 7z CLI 버전을 이용하였고, Imagex /info와 FOR 구문을 활용하여 에디션 선택을 쉽게 할 수 있도록 만들었습니다. 또한 수정해야할 파일 3개를 미리 수정해서 첨부해두었습니다.


위 파일을 다운받은 다음 적당한 위치에 압축을 풀어줍니다. 그리고 통합할 윈도우 7 원본에서 install.wim 파일을 복사해옵니다. 또한 통합할 서비스팩 1 파일도 같이 복사해옵니다.

저는 32비트 얼티밋 원본 ko_windows_7_ultimate_k_x86_dvd_x15-65969.iso 파일에서 install.wim 파일을 복사해왔고, 32비트 서비스팩1 파일인 windows6.1-KB976932-x86.exe를 작업 폴더에 넣어두었습니다.




이제 통합하기.cmd 파일을 실행합니다. (우클릭 해서 관리자 권한으로 실행해주세요.) 그러면 32비트 통합인지 64비트 통합인지 물어보는데 32비트라면 1번을, 64비트라면 2번을 입력하고 엔터키를 누릅니다. 참고로 64비트 작업은 64비트 윈도우 환경에서만 가능합니다. 저는 이 가이드에서 32비트를 통합하기 때문에 1번을 누르겠습니다.




다음은 통합할 에디션을 선택해야 합니다. 윈도우 7 순수 원본에는 아래 그림처럼 다양한 에디션이 들어있습니다. 다만 ei.cfg 파일 때문에 설치시 한 가지 에디션만 보일 뿐입니다. 저는 Ultimate 에디션에 통합할 생각이기 때문에 5번을 누르겠습니다. 64비트의 경우 Starter 에디션이 없기 때문에 번호가 한개씩 당겨집니다. 순수 원본이 아니라 하더라도 제가 올려드린 배치파일은 알아서 DISPLAYNAME을 보여주기 때문에 번호가 헛갈릴 일은 없습니다.




마지막으로 통합하는데 시간이 오래 걸린다는 안내문구가 한번 나옵니다. 아무 키나 눌러주시면 통합이 시작됩니다. 작업을 위한 여유공간은 충분히 있어야 합니다. (넉넉히 20GB 정도) 그리고 64비트 통합의 경우 시간이 엄청 오래 걸립니다. 제 컴퓨터에서도 수십분 걸리더군요. 32비트의 경우도 최소 10분 이상은 소요될 것입니다.




통합이 끝나면 위 창은 자동으로 꺼집니다. 통합이 잘 되었다면 install.wim 파일이 원래 용량보다 커졌을 것입니다. Imagex의 export 기능을 활용하면 용량을 아주 조금 줄일 수 있지만, 초보자용 가이드라서 다루지 않습니다.

이대로 통합한 install.wim 파일을 원래의 원본 iso 파일에 교체해주시면 됩니다. 일반적으로 UltraISO 등록판을 많이 사용하지요. 또는 cdimage.exe나 oscdimg.exe를 사용하여 ISO 패키징 할 수도 있습니다.



2. 중급자용 가이드

제가 생각하는 중급자란 CLI에 익숙하고 WIM 파일을 DISM, Imagex, GImagex 등으로 마운트해서 수정하는 작업에 익숙하신 분들을 지칭합니다. 또한 저는 말로만 설명드리겠습니다. 말로만 설명드려도 이해가 가능한 수준의 분들을 중급자라 지칭했습니다. 또한 아래 설명은 32비트 x86 기준입니다. 64비트의 경우 파일 이름에서 x86 대신에 x64를 찾아보시면 되겠지요.


1. 윈도우 7 서비스팩 1 파일을 일단 풀어줍니다. 64비트 파일은 64비트 환경에서만 풀 수 있습니다. 푸는 방법은 뒤에 /x:경로 붙여주시면 됩니다.

예제) windows6.1-KB976932-x86.exe /x:temp


2. 위 예제처럼 하면 temp 폴더가 생성되면서 파일이 풀리는데 다른 파일은 다 필요없고 windows6.1-KB976932-X86.cab 파일만 있으면 됩니다. 이 파일만 꺼내주시고 temp 폴더는 삭제하셔도 됩니다.


3. 이 windows6.1-KB976932-X86.cab 파일을 적당한 위치에 압축 풀어줍니다. 저는 폴더에 압축을 푼 다음 폴더 이름을 SP1으로 변경했습니다. WinRAR이나 7zip 등을 사용하신다면 CAB 파일을 바로 풀 수 있습니다. 물론 내장 명령어 Expand를 사용해도 되는데 시간이 오래 걸려서 저는 WinRAR로 바로 풀어버렸습니다.


4. 압축을 풀고 SP1 폴더 안에 보면 CAB 파일이 8개 들어있습니다. KB976933-LangsCab0 부터 6까지 파일과 NestedMPPContent.cab 파일인데 이 8개의 파일들을 현재 폴더 SP1에 그대로 압축 풀어줍니다. 압축을 풀다가 나타나는 중복 파일은 그냥 덮어씌워도 무방합니다. 8개의 파일을 모두 압축 풀었다면 SP1 폴더에서 8개의 CAB 파일들을 삭제합니다.


5. cabinet.cablist.ini 파일을 삭제합니다.


6. update.mum 파일을 메모장으로 편집합니다. 하단에 나오는 allowedOffline="false" 값을 true로 변경합니다.


7. update.ses 파일을 메모장으로 편집합니다. <Tasks operationMode="OfflineInstall"> 항목에서 하위 항목을 보면 <package id="Windows7SP1-KB976933~31bf3856ad364e35~x86~~6.1.1.17514" targetState="Absent"/> 라고 되어 있는데 Absent를 Installed로 변경해줍니다.


8. Windows7SP1-KB976933~31bf3856ad364e35~x86~~6.1.1.17514.mum 파일을 메모장으로 편집합니다. 우선 제일 하단에 나오는 allowedOffline="false" 값을 true로 변경합니다. 이것만 해줘도 되기는 한데, 한글판 통합에는 다른 언어들이 불필요하므로 이 파일을 약간 정리해주는게 좋습니다. 그러니까 예를 들어 아래와 같은 항목들이 30개 이상 있는데

<update name="Windows7SP1-ja-jp">
   <package integrate="hidden">
    <assemblyIdentity name="Package_for_KB976933" version="6.1.7601.17514" language="ja-jp" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
   </package>
  </update>

한국어와 영어만 제외하고는 위 형식의 항목들을 다 삭제해주세요.


9. 이제 통합을 위한 SP1 준비는 완료되었습니다. DISM 또는 Imagex, GInageX 등을 이용하여 install.wim 파일을 마운트합니다. 여기서는 DISM을 이용한 예제만 보여드리겠습니다. 그런데 마운트 작업을 하기 전에 반드시 마운트할 빈 폴더를 먼저 생성해두어야 합니다. 저는 mount 라는 폴더를 미리 생성해두었습니다. 인덱스 번호는 32비트에서 얼티밋을 마운트할 생각이라 5번으로 지정했습니다. 

예제) dism /mount-wim /wimfile:install.wim /index:5 /mountdir:mount


10. 서비스팩을 통합합니다. SP1 폴더에 필요한 파일이 전부 풀어져 있고, mount 폴더에 원본이 마운트 되어 있다고 가정하면

예제) dism /image:mount /add-package /packagepath:sp1


11. 통합이 완료되었다면 이제 마운트를 풀어줍니다. 변경사항을 저장해줘야겠죠.

예제) dism /unmount-wim /mountdir:mount /commit


이게 끝입니다. 원본에서 install.wim 파일을 교체해주시면 됩니다. 설명이 어렵죠? 그렇게 느껴지신다면 초보자용 가이드를 이용하세요. 위 작업들을 자동으로 한방에 다 처리해줍니다.



※ 근황
1. 평일에는 블로그 할 시간이 없습니다. 밤 늦게 집에 들어오고 아침 일찍 출근합니다.
2. 지금까지는 편하게 교육을 받았는데, 다음주부터는 자바 교육이 시작되어 고생이 많을 듯 합니다.
3. 다음주 중으로는 샌디브릿지 2500k 물량이 풀리겠죠? 216달러이므로 26만원 이상이면 구매를 보류할 생각입니다.



※ 왕대인님처럼 한꺼번에 여러개의 이미지에 통합하려는 경우