2009년에 재당 정사님이 이 글의 내용과 비슷한 구성을 하려고 댓글로 질문을 하셨고, 당시에 제가 답변을 드렸는데, 오늘 회사에서 심심해서(?) 한번 만들어 봤습니다. 글을 시작하기 전에 미리 말씀드립니다만, 이 글에서 다루는 내용을 실제로 활용하실 분들은 거의 없으리라 생각합니다. 그럼에도 불구하고 이런거 재미있어 하는 분들은 나름대로 응용해서 활용하시리라 생각하기 때문에 간단히 컨셉만 소개해드립니다.

일단 오늘 제가 회사에서 이 작업을 했던 이유는

1. 동일한 스펙의 1U짜리 서버 8대에 윈도우 서버 2008 R2를 설치해야 한다.
2. 그런데 설치할 디스크를 선택하고, 파티션을 나누는 일이 너무 귀찮다.
3. 물론 설치 초반에 Next 버튼을 몇번 누르는 일 조차도 귀찮다.
4. 게다가 무인설치 응답파일을 만드는 일은 더더욱 귀찮다.

그래서 제가 구상한 방식은 다음과 같습니다.

1. boot.wim 파일에 들어있는 setup.exe 파일을 가짜 파일로 교체한다.
  a. 이 가짜 setup.exe 파일은 단순히 sources 폴더에 들어있는 start.cmd 파일만 호출한다.
  b. 이 가짜 setup.exe 파일은 Quick Batch File Compiler로 만들 수 있다.
2. sources 폴더에 넣어줄 start.cmd 파일은 아래와 같은 역할을 한다.
  a. diskpart로 0번 디스크 초기화 및 파티셔닝, 활성화 등
  b. imagex로 install.wim 파일 하드에 풀어주기
  c. bcdboot으로 부팅파일 생성해주기

물론 가짜 setup.exe 파일이 바로 start.cmd 파일의 역할을 수행하도록 만들어도 되지만, 그렇게 하면 유지보수가 매우 불편합니다. 매번 소스를 수정하고 싶을 때 마다 setup.exe 파일을 새로 컴파일하고 boot.wim 파일 안에 넣어줘야 하기 때문입니다. 따라서 이렇게 setup.exe 파일은 start.cmd 파일을 호출만 하도록 만드는게 좋은 방법이라 생각합니다. start.cmd 파일을 수정하는 일은 매우 쉬우니까요.

어차피 이 작업은 초보 분들이 하기에 적합하지 않다고 생각하기 때문에, 그림 없이 텍스트로만 설명드리겠습니다.

1. 가짜 setup.exe 파일 만들기

먼저 가짜 setup.exe 파일을 만들어봅시다. 위에서 말씀드렸듯이 이놈의 역할은 단순히 sources 폴더에 들어있는 start.cmd 파일을 실행만 시키는 역할을 합니다. 따라서 저는 아래와 같이 짜겠습니다.

예제) setup.cmd
@echo off
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
	if exist %%a:\sources\start.cmd %%a:\sources\start.cmd
)

그리고 이놈을 Quick Batch File Compiler를 사용해 exe로 컴파일 하겠습니다.

Quick Batch File Compiler 홈페이지
http://www.abyssmedia.com/quickbfc/

사용법은 따로 설명드리지 않겠습니다. 그냥 트라이얼 버전으로 바로 컴파일 하셔도 됩니다. 귀찮으실 분들을 위해 제가 위 예제를 트라이얼 버전으로 컴파일한 파일 올려드립니다. 바이러스로 오진할 수도 있는데, QBFC로 컴파일하면 원래 오진을 많이 합니다. 저를 못 믿으시는 분들은 직접 컴파일해서 사용하시기 바랍니다.


2. boot.wim 파일 편집

이제 boot.wim 파일을 마운트해서 가짜 setup.exe 파일을 넣어줄 차례입니다. 여기서 사용하실 boot.wim 파일은 반드시 32비트 버전이어야 합니다. 왜냐하면 QBFC로 컴파일한 exe 파일이 32비트 버전이기 때문입니다. 저는 윈도우 7 SP1 32비트 원본에서 boot.wim 파일을 가져와 D 드라이브 루트에 복사해놓고 작업을 진행하겠습니다.

파일 편집 자체는 dism 명령어를 사용해도 되고, ImageX나 GImageX를 사용해도 됩니다만, 저는 어차피 나중에 ImageX를 ISO 파일 안에 넣을 생각이기 때문에, 여기서도 ImageX로 진행하겠습니다.


지금부터 하는 모든 커맨드 작업은 관리자 권한으로 명령 프롬프트를 띄워서 실행해주세요.

a. boot.wim 파일을 마운트할 폴더를 먼저 생성해둡니다.
예제) md d:\mount

b. ImageX로 boot.wim 파일의 2번 이미지를 마운트합니다. 
예제) imagex /mountrw d:\boot.wim 2 d:\mount

c. 마운트된 폴더에서 setup.exe 파일을 삭제합니다.

d. 가짜 setup.exe 파일을 마운트된 폴더에 복사합니다.

e. ImageX로 boot.wim 파일을 언마운트/커밋 합니다. 이때 마운트된 폴더가 탐색기에 열려 있으면 안 됩니다.
예제) imagex /unmount d:\mount /commit

f. 깔끔하게 export 한번 해주겠습니다.
예제) imagex /export d:\boot.wim * d:\new.wim

g. boot.wim 파일은 삭제하고 new.wim 파일의 이름을 boot.wim 으로 변경합니다.


3. start.cmd 파일 만들기

여기서부터는 여러분의 영역입니다. 자유롭게 자신이 원하는 방식으로 배치파일을 작성하시면 되겠습니다. 저는 서두에 말씀드린 작업을 예제로 보여드리겠습니다.

예제) start.cmd
@echo off
cd /d %~dp0
diskpart /s diskpart.txt
imagex /apply install.wim 3 c:
bcdboot c:\windows /s c: /l ko-kr

예제) diskpart.txt
select disk 0
clean
create partition primary size=102400
format quick
active
assign letter=c
create partition primary
format quick
assign
exit

위 2개의 파일이 어떤 역할을 하는지 대충 눈에 보이시나요?

디스크 0번을 선택해서 초기화 시킨 다음
첫번째 파티션을 100GB로 만들고
포맷을 한 다음
활성화 속성을 걸어주고
드라이브 문자를 C로 할당합니다.

두번째 파티션을 나머지 공간 전체에 할당하고
포맷을 한 다음
드라이브 문자를 할당합니다.

ImageX로 Install.wim 파일의 3번 이미지를 C 드라이브에 풀어줍니다.

bcdboot으로 C 드라이브에 부팅파일을 생성해줍니다.

위 예제는 어디까지나 제가 1U짜리 서버 8대에 윈도우 서버 2008 R2 SP1 Enterprise 버전을 동일한 방식으로 설치하기 위해 만들어둔 것 뿐입니다. 여러분은 각자 상황에 맞게 스크립트를 변경하셔야 합니다. 위 스크립트를 그대로 사용하셨다가는 디스크 0번의 파티션들이 완전히 날아가고 새로 생성됩니다. 따라서 신중하게 작업해주기시 바랍니다.


4. 마무리

이제 다 됐습니다. 설치할 윈도우 7이나 2008 R2 원본 이미지의 sources 폴더에 위 파일들을 넣어주시면 됩니다. 그러니까 저같은 경우 파일 4개를 넣으면 되는 상황입니다.

boot.wim
start.cmd
diskpart.txt
imagex.exe

용량을 줄이기 위해 저는 불필요한 파일들을 전부 삭제했습니다.


이걸로 부팅하면 어떻게 되는지 동영상으로 보여드리겠습니다. 키보드를 한번도 입력하지 않아도 윈도우 설치 마지막 화면까지 논스톱으로 진행이 됩니다.



물론 여기서 더 귀차니즘을 느낀다면 Install.wim 파일에 시디키도 미리 입력시켜놓고, 무인설치 응답파일로 마지막 OOBE 단계까지 자동화 시켜버릴 수도 있습니다. 또한 순정 Install.wim 파일을 사용하지 않고 만능 고스트처럼 여러가지 프로그램을 셋팅해둔 상태로 Sysprep 일반화 봉인된 Install.wim 파일을 활용할 수도 있겠죠.

오랜만에 geek 스러운 글을 올린 것 같은데, 다시 말씀드리지만 저는 동일한 스펙의 여러대의 서버에 설치 작업을 반복해야 하기 때문에 귀찮아서 이렇게 만든 것입니다. 위 예제를 그대로 사용하시면 첫번째 디스크의 파티션이 전부 날아가고 재구성되니 절대로 그대로 따라하지는 마시고, 각자 환경에 맞게 스크립트를 잘 짜서 사용하시기 바랍니다. 이상입니다.