The Desktop Files고급 사용자를 위한 WIM 및 ImageX 가이드

Wes Miller

이 칼럼은 WAIK(Windows Automated Installation Kit) 및 Windows Server 2008의 시험판 버전을 기준으로 작성되었습니다. 이 문서에 수록된 모든 정보는 변경될 수 있습니다.

필자는 몇 편의 이전 칼럼에서 ImageX 및 WIM(Windows Imaging) 형식에 대해 다루었습니다. 그런데 몇 개월 전 Tech•Ed에서 WDS(Windows Deployment Services), ImageX 및 WAIK(Windows Automated Installation Kit)를 사용하기 시작한 IT 전문가들로부터 몇 가지 의견과 질문을 들으면서

더 많은 사용자 가이드가 필요함을 깨달았습니다. 따라서 이번 달 칼럼에서는 ImageX와 WIM 형식을 집중적으로 설명하고 이를 최대한 활용하는 방법을 소개하려고 합니다. ImageX와 WIM을 사용하면 Windows Vista®와 Windows Server® 2008 뿐만 아니라 Windows® XP, Windows Server 2003, Windows 2000도 쉽게 배포할 수 있습니다.

WAIK의 변경 내용

곧 출시될 Windows Server 2008이 WAIK와 관련하여 어떤 의미를 갖는지 궁금할 것입니다. Microsoft에서는 Windows Server 2008이 출시될 때쯤 업데이트된 버전의 WAIK를 발표할 계획입니다. WIM 형식에는 큰 변화가 없으며(ImageX 도구와 형식도 변경되지 않음) Windows Server 2003의 WDS도 변경되지 않습니다. 소문과 달리 멀티캐스트는 Windows Server 2003 WDS에서 사용할 수 없습니다. Windows Server 2008을 실행하는 WDS 서버에만 WDS에 대한 새로운 멀티캐스트 배포 기능이 포함됩니다.

Windows PE 2.0 및 Windows 설치 프로그램은 다음을 지원하도록 수정됩니다.

  • Windows Server 2008 및 Windows Vista의 배포
  • Windows Server 2008 WDS 서버에서 WDS를 통한 멀티캐스트 배포
  • x86 Windows PE에서 Windows Vista 및 Windows Server 2008의 x64 버전과 x86 버전의 배포

우선 이런 변화는 Windows PE 2.0에서 Windows Server 2008을 Windows Vista에서처럼 배포할 수 있으며 동일한 도구와 프로세스를 두 운영 체제 간에 바꾸어 사용하더라도 같은 방식으로 작동함을 의미합니다. 두 번째로 Windows Server 2008에서 WDS 서버를 실행하고 있다면 WDS를 통해 멀티캐스트 배포를 이용할 수 있습니다. 그리고 마지막으로 x86 Windows PE 2.0 디스크에서 Windows의 x86 또는 x64 이미지를 배포할 수 있음을 의미합니다.

이에 대해서는 Tech•Ed의 x64 Windows 관련 세션에서 언급한 적이 있습니다. 하지만 블로그와 Windows 기술 커뮤니티에서 이에 대한 몇 가지 혼동이 있는데, Microsoft가 모든 Windows Vista 또는 Windows Server 2008 DVD에 x64 Windows 및 x86 Windows를 배포할 것임을 의미하지는 않습니다. 또한 가능하긴 하지만 Windows x64 및 Windows x86 이미지를 하나의 WIM 파일로 결합해야 한다는 것을 의미하지도 않습니다. 이렇게 하면 WIM를 하나의 파일로 제공할 수 있지만 단일 인스턴스 저장소로 저장되지는 않습니다.

몇 년 동안 x86 기반 배포 프로세스(그리고 사용자 지정 스크립트와 도구)를 개발해온 엔터프라이즈 고객과 OEM이 이제 32비트 설치를 사용하여 WIM 내에서 x86 또는 x64 Windows를 배포할 수 있게 되었음을 의미합니다. 이는 2005년 x64 Windows가 처음 선보인 이후 많은 엔터프라이즈 고객이 요구했던 기능입니다.

ImageX 사용

/mount, /mountrw 및 /delete 사용

다음은 ImageX에 /mount, /mountrw 및 /delete 스위치를 사용할 때의 몇 가지 중요한 팁입니다.

  • 편집하려는 경우 /mountrw를 사용하여 볼륨을 탑재합니다.
  • WIM은 빈 디렉터리에 탑재해야 합니다. 그래야 저장한 파일로 인한 혼동을 피하고 ImageX에서 불필요한 경고 메시지가 표시되는 것을 방지할 수 있습니다.
  • 변경 내용을 저장하려는 경우 읽기/쓰기 이미지에 /unmount /commit를 적용하는 것을 잊지 마십시오. 변경을 하고 이를 커밋하지 않아서 손실되는 경우를 많이 볼 수 있습니다.
  • /mountrw를 통해 파일을 삭제하고 /delete를 통해 볼륨 이미지를 삭제하더라도 공간이 다시 확보되지 않을 뿐만 아니라 오히려 더 많은 공간이 사용될 수 있습니다. 자세한 내용은 이 칼럼에서 /export에 대한 섹션을 참조하십시오.
  • 읽기/쓰기 액세스에 대해 한 번에 하나의 WIM 파일만 탑재할 수 있습니다. 두 사용자가 동시에 같은 WIM을 편집할 수 없으며 한 번에 두 개의 볼륨 이미지를 편집할 수도 없습니다.
  • 읽기 전용 모드(/mount)에서도 동시에 탑재하는 볼륨 이미지의 수를 제한해야 합니다. 탑재된 각 이미지에 대해 시스템에서 사용 가능한 Windows 비페이징 풀 메모리의 용량에 드라이버가 종속되기 때문입니다. 이로 인해 시스템마다(또는 시스템 아키텍처에 따라) 서로 다르게 이미지 수가 제한됩니다. 따라서 동시에 6개 이상의 이미지는 탑재를 시도하지 않는 것이 좋습니다.
  • 변경할 때 /mountrw를 통해 많은 양을 편집하더라도 거의 시간이 걸리지 않지만 /commit의 경우에는 모든 새 파일 데이터를 비교하고 저장해야 하므로 꽤 많은 시간이 걸립니다.
  • /delete 및 /mountrw는 주의하여 사용하십시오. 변경이 커밋되면 되돌릴 수 없습니다.
  • WIM 파일에 하나의 볼륨 이미지만 있는 경우에는 /delete를 실행할 수 없습니다. 전체 WIM 파일을 삭제하거나 다른 볼륨 이미지를 추가해야 합니다.
  • 볼륨 이미지 내용의 디렉터리 트리를 빠르게 가져오려면 /mount 대신 다음 명령을 사용하십시오.
ImageX /dir <path_to_wim_file> <image index>
  • 동시에 두 개의 WIM 파일을 편집하고 있을 때는 /unmount를 동시에 실행하지 않도록 하십시오. 서로 방해되지 않도록 mount/unmount 이벤트를 차례로 실행하십시오.

ImageX는 OEM과 엔터프라이즈 고객이 보내 준 도구 사용 방식에 대한 의견을 바탕으로 설계되었습니다. 그림 1에서는 이 프로세스를 보여 줍니다.

그림 1 ImageX 사용

그림 1** ImageX 사용 **

5단계는 매우 중요합니다. 이미지는 계속 변경되므로 이미지 캡처와 수정은 가능한 빠르고 쉽게 이루어져야 합니다.

이를 위해 이미 생성한 이미지에 /append 스위치를 사용하여 이미지를 추가하는 기능이 제공됩니다. 개발팀은 처음에는 이전 이미지에 SKU(Windows의 버전)를 추가하기를 원할 것으로 생각했지만 Windows Vista 개발 초기 단계에서 엔터프라이즈 고객과 작업을 하면서 X를 배포한 뒤에 2단계의 수정 내용 중 한 가지를 수행한 X1을 다시 캡처하는 것이 더 빠르다는 의견을 들었습니다. 이렇게 하면 일부 파일만 수정했기 때문에 이미지를 빠르게 다시 캡처할 수 있습니다.

팀에서는 이 의견을 듣고 원본 이미지를 보존하는 것이 모든 상황에 적합한 방식은 아님을 깨달았습니다. 이 칼럼의 뒷부분에서 이 시나리오와 다음에 나오는 시나리오로 인해 추가된 /export 스위치에 대해 소개합니다.

지속적인 변경

개발팀에서는 초기 단계부터 WIM 파일을 편집할 수 있어야 한다고 결정했습니다. 섹터 기반 이미징 형식이 적절하지 않다고 이미 결정했기 때문에(이에 대한 설명은 technetmagazine.com/issues/2006/12/DesktopFiles의 2006년 12월 칼럼 참조) 기본적으로 파일을 Windows 파일 시스템의 일부로 손쉽게 탑재하고 WIM 파일의 탑재된 볼륨 이미지를 변경할 수 있는 솔루션을 제공해야 했습니다. 말하자면 "이동하는 부분"이 몇 가지 더 필요하다는 것입니다. 섹터 기반 이미지를 탑재하는 것은 비교적 쉽지만 WIM과 같은 자체 보관 형식을 탑재하려면 전용 도구를 사용해야 합니다.

이 형식은 명령 프롬프트에 액세스할 수 있어야 하므로 ZIP과 CAB 파일을 처리하는 데 기본적으로 많이 사용되는 Windows 셸 확장은 사용할 수 없습니다. 불행히도 이러한 처리기는 개체에 대한 Windows 탐색기 추상 액세스만 허용합니다.

따라서 WIM 솔루션에는 드라이버를 실제로 로드하기 위한 방편 역할을 하고 WIM 탑재를 위한 인터페이스를 처리하는 ImageX와 드라이버(wimfltr.sys)가 사용됩니다. 드라이버는 그림 2에서처럼 Windows 파일 시스템에 추상화를 추가하는 역할을 합니다. 이와 같은 명령 중 하나를 실행하면 ImageX는 wimfltr.sys 드라이버를 로드하고 빈 디렉터리 탑재에서 첫 번째 볼륨 이미지(여기서 사용한 명령에서 1)를 오버레이합니다.

그림 2 WIM 볼륨 이미지 탑재

그림 2** WIM 볼륨 이미지 탑재 **(더 크게 보려면 이미지를 클릭하십시오.)

ImageX /mount iso\sources\boot.wim 1 mount 
ImageX /mountrw iso\sources\boot.wim 1 mount 

이는 WAIK의 기본 동작입니다. 따라서 탑재 디렉터리에서 디렉터리 목록을 탐색하거나 생성하는 경우에는 boot.wim에서 볼륨 이미지 1의 루트를 볼 수 있습니다. 물론 /mountrw 또는 /mount 중 무엇을 사용할지는 이 디렉터리가 읽기 전용인지 읽기/쓰기가 가능한 디렉터리인지에 따라 달라집니다. 자세한 내용은 추가 기사 "/mount, /mountrw 및 /delete 사용"을 참조하십시오.

/mountrw 기능은 원래 손쉽게 드라이버 또는 xcopy 가능 파일이나 콘텐츠 파일을 추가하거나, 응답 파일을 설정하거나, 탑재된 WIM 파일의 오프라인 레지스트리를 수정하여 필요에 따라 변경하기 위해 설계되었습니다(그림 3 참조). 이 기능은 전체 응용 프로그램을 추가하거나 제거하기 위해 설계된 것이 아닙니다(MSI 설치 응용 프로그램은 오프라인으로 설치할 수 없으므로).

그림 3 탑재된 WIM 파일 수정

그림 3** 탑재된 WIM 파일 수정 **(더 크게 보려면 이미지를 클릭하십시오.)

탑재된 WIM 파일을 변경할 때는 실제 WIM 파일을 직접 변경하는 것이 아니라(최소한 즉시 변경하지는 않음) 실제로 오버레이와 변경 내용이 병합되는 WIM 파일의 캐시를 변경하는 것입니다. 추가 기사에서 언급하듯이 필자는 이로 인해 문제를 겪은 적이 있습니다. 끝난 뒤 /unmount 및 /commit 스위치를 사용해야 하며 이렇게 해야 변경 내용이 WIM 파일로 커밋됩니다. 그렇지 않으면 변경 내용이 완전히 손실됩니다.

변경 내용을 커밋하여 저장하는 것은 드라이버에 WIM 파일 자체를 변경하도록 지시하는 것과 같습니다. 그러면 드라이버가 추가 파일 데이터를 추가합니다. 따라서 많은 내용을 변경한 경우에는 WIM에 파일 데이터를 추가하기 때문에 /commit을 실행하는 데 시간이 많이 걸릴 수 있습니다.

또한 섹터 기반 이미징 형식과는 달리 볼륨 이미지에서 하나 이상의 파일을 변경했을 수 있습니다. 따라서 같은 파일이 이미 한 번 저장된 경우 이외에는 더 이상 단일 인스턴스가 아닐 뿐만 아니라 원본 파일 데이터가 손실됩니다. WIM은 NTFS 또는 FAT 볼륨과는 달리 파일에 삭제 표시를 하지 않습니다. 즉, 더 이상 참조하지는 않지만 지우지도 않습니다. 따라서 /mountrw를 통해 자주 편집을 하거나, /append를 사용하여 많은 이미지를 추가하거나, /delete를 사용하여 볼륨 이미지를 삭제하는 경우에는 WIM 파일에서 파일 데이터에 대한 참조만 제거되고 관련 파일 데이터가 함께 삭제되지 않습니다.

따라서 개발팀에서는 "WIM 조각 모음"라고도 하는 /export 스위치를 만들었습니다.

내보내기

/export에 대한 중요한 참고 사항

/export를 사용하여 새 WIM 파일을 만들 때는 현재 사용되는 기본 압축 유형을 그대로 사용하지 않고 사용할 압축 형식을 직접 지정할 수 있습니다. 현재 압축 유형을 변경할 때는 내보내기에 꽤 많은 시간이 걸릴 수 있습니다.

사실상 /append처럼 사용되는 경우(볼륨 이미지를 기존 WIM 파일에 추가)에는 /export로 WIM 파일의 /compression 속성을 수정할 수 없습니다.

완전히 새로운 Windows PE 2.0 볼륨 이미지를 내보내는 경우에는 /boot 스위치를 지정할 수 있습니다.

/export 스위치는 앞서 설명한 시나리오와 팀에서 발견한 다른 몇 가지 시나리오를 해결하기 위해 만들어졌습니다. 간단히 말하면 /export를 통해 기존 볼륨 이미지(두 개 또는 세 개)를 가져와서 내보낼 수 있습니다. 이는 위의 X 및 X1 WIM 파일을 가져와 X, X1로 각각 새 WTM 파일을 만들거나, 또 다른 WIM 파일을 내보내 X1과 Y1로 새 WIM 파일을 신속히 만들 수 있음을 의미합니다.

X를 수정하고 변경 내용을 X1로 추가(/append)하는 시나리오를 예로 들어보겠습니다. X를 이번 분기용 새 이미지로 바꿨기 때문에 X를 삭제하기로 했습니다. 이 경우 /delete 스위치를 사용할 수 있으며 그러면 ImageX는 X 이미지를 더 이상 인식하지 않습니다. 하지만 X에 관련된 모든 정보를 제거하여 공간을 절약하려면 다음 명령을 실행해야 합니다.

ImageX /export source.wim 2 destination.wim "New image for Q4CY07"

이렇게 하면 두 번째 볼륨 이미지가 새 WIM 파일에 새 이름으로 내보내져서 볼륨 이미지 1에서 이전 정보가 완전히 제거됩니다. 또한 분산된 WIM 이미지에서 내보내 하나의 WIM 파일로 재조합할 수도 있습니다(이 칼럼 뒷부분에서 설명). 분산된 이미지는 /mountrw를 사용하여 편집할 수 없습니다. ImageX에 /import 명령이 없는 것은 /export로 새 WIM 파일을 만들고 기존 파일에 추가하는 작업을 모두 할 수 있기 때문입니다. 이 주제에 대한 자세한 내용은 추가 기사 "/export에 대한 중요한 참고 사항"을 참조하십시오.

이는 peimg /prep를 실행할 때도 중요합니다. 이 명령은 사용될 Windows PE 이미지를 준비하지만 WIM에서 어떤 내용도 지우지 않습니다. 이상적으로는 Windows PE 릴리스 프로세스의 일부로 이미지를 준비한 다음 새 boot.wim 파일로 내보내야 합니다. 부트 프로세스는 \sources\boot.wim에서만 WIM 파일을 찾으므로 이름이 올바르며 부트 볼륨 이미지 표시되었는지 확인해야 합니다.

이전 볼륨 이미지를 문서화하거나 여러 개를 조합할 때는 /export를 실행하여 이미지를 최적화할 수 있습니다. 또는 /mountrw 또는 /delete를 통해 많은 편집을 수행한 경우에도 이런 작업이 필요할 수 있습니다. 그렇지 않은 경우에는 WIM 파일이 시간이 경과함에 따라 진단할 수 없는 방식으로 계속 증가합니다. /mountrw 또는 /delete를 정기적으로 사용하는 경우에는 완전히 최적화되었는지 확인하기 위해 워크플로에 /export를 추가하는 것을 고려하십시오.

확장

처음 노출된 다른 문제는 WIM 파일을 다양한 미디어에 맞도록 해야 한다는 점이었습니다. 우리는 Windows가 두 장 이상의 CD로(그리고 잠재적으로 DVD로 - 현재 방식) 제공될 것으로 예상했기 때문에 WIM과 ImageX에 분산 지원을 적용했습니다.

앞서 말했듯이 /split로 작성된 분산 이미지는 기본적으로 읽기 전용입니다. 따라서 새로 분산된 이미지에 직접 /capture를 실행할 수 없고, ImageX를 통해 탑재할 수 없으며, /append를 통해 추가할 수 없습니다. 결과적으로 표준 워크플로를 완료하고 릴리스할 준비가 되었을 때만 WIM 파일을 분할하는 것이 좋습니다. 즉, 모든 변경 작업은 일반 WIM 파일에 대해 수행하고 배포 시나리오를 위한 릴리스 프로세스의 일부로 분할을 하는 것을 고려하십시오.

이미지를 적용할 때는 분산된 이미지가 문제가 될 수 있습니다. 분산 이미지를 사용할 때는 설치 프로그램보다는 ImageX를 사용할 것을 권장합니다. 또한 이미지를 네트워크를 통해 적용하거나(적용하는 디스크를 이미지로 만들지 않고 성능을 최적화하기 위해) 드라이브로 직접 복사한 다음 적용하는 것이(적용할 때 디스크에서 디스크 자체를 읽고 쓰므로 디스크에 바인딩된다는 점을 유의) 좋습니다.

유효성 확인

ImageX를 사용할 때는 많은 데이터를 이동하며 대부분은 매우 중요한 데이터입니다. 올해 Tech•Ed에서 자주 접한 질문은 "이미지 유효성을 확인하는 방법"에 대한 것이었습니다. 유효성 확인이 매우 쉬운 것은 아니지만 그렇게 어렵지도 않습니다.

WIM에 대해 이해해야 할 중요한 사항은 대부분의 보관 형식과 마찬가지로 손상될 수 있다는 점입니다. 대개의 경우 WIM 파일이 네트워크를 통해 전송될 때 이런 손상이 발생합니다. Windows Vista 초기에는 특정 네트워크 카드에 특정한 문제가 있었습니다. 패키지를 폐기할 때 WIM 파일이 손상되었으며 이를 진단하기가 쉽지 않았습니다. 이런 상황은 몇 년 전 driver.cab 파일의 크기가 커질 때 무작위로 손상이 발생하는 문제와 비슷합니다. 일반적으로 잘못된 이미지나 설치 실패에 대한 보고를 받은 경우에는 보고서를 생성하는 시스템에 사용되는 NIC의 유형을 확인해볼 수 있습니다. ImageX 자체를 사용하거나 WDS를 실행하는 모든 경우에 적용됩니다.

그렇다면 이미지가 정상인지 확인하려면 어떻게 해야 할까요? 우선 /check 스위치를 사용할 수 있습니다. 이렇게 하면 WIM 파일에 추가적인 무결성 검사가 저장되고 적용 전에 WIM의 손상 여부가 검사됩니다. 적용 시에도 /check를 실행하여 이미지 유효성을 확인하십시오(시간이 걸릴 수 있음).

문제가 있거나 신중을 기하기 위해, 적용 후 캡처하기 전에 파일에 대해 해싱 유틸리티를 실행할 수 있습니다. 이미지를 탑재하고 다시 해싱하여 캡처 후에도 확인할 수 있으며 이는 이미지가 올바르게 탑재되었는지 확인하기 위한 한 가지 방법입니다.

이미지가 처음부터 올바르게 캡처되고 있는지 확인해야 할 때도 있습니다. /check 스위치와 형식 자체는 제대로 캡처되지 않은 이미지를 복구하기 위한 복구 도구가 아니라 검사점으로 설계되었습니다.

부팅 및 플래그

앞에서 /boot를 사용하여 Windows PE의 WIM 볼륨 이미지를 캡처하고 이를 부팅할 수 있다고 설명했습니다. 이것은 특정 볼륨 이미지의 부트 섹터처럼 생각해야 합니다. WIM당 하나의 볼륨 이미지에만 존재할 수 있으며 Windows PE 2.0에 대해서만 유효합니다. 즉, WIM로 Windows PE 1.x를 부팅할 수 없습니다.

Windows 볼륨 이미지에서 플래그에 대한 참조를 볼 수 있습니다. 플래그는 Windows 설치 프로그램에서만 사용됩니다. 볼륨 이미지의 플래그가 2이면 볼륨 이미지에 Windows PE와 설치 프로그램이 들어 있음을 의미합니다. 플래그 9는 Windows PE만 들어 있음을 의미합니다. 다른 플래그 또는 플래그가 없는 경우는 설치 프로그램에서 이미지를 사용할 수 없음을 의미합니다. 이미지를 수정하기 위해 ImageX를 사용하여 캡처한 뒤에만 이미지에 플래그를 설정할 수 있습니다. 플래그가 제대로 설정되므로 WAIK(그리고 선택적으로 Business Desktop Deployment Solution Accelerator)를 사용하여 Windows PE WIM 부트 이미지를 작성하는 것이 좋습니다.

HTA 사용자에 대한 참고 사항

최근 필자는 Windows PE 2.0에서 HTA 파일을 실행할 때 발생하는 몇 가지 문제를 보고 받았습니다. 불행히도 다량의 스크립팅이 포함된 HTA 파일에서는 문제가 발생하는 것으로 보입니다. 그림 4에서 필자가 작성한 샘플 파일의 스크린샷을 참조하고, 여기서 반환된 스크립팅 오류(정보가 없는)를 살펴보십시오. 몇몇 고객이 이 문제를 보고했으며 필자도 직접 경험했습니다.

그림 4 HTA 스크립팅 오류

그림 4** HTA 스크립팅 오류 **(더 크게 보려면 이미지를 클릭하십시오.)

하지만 이 문제는 비교적 쉽게 해결할 수 있습니다. 이미지를 준비할 때 HTA 지원과 XML 지원을 추가하십시오. 그러면 HTA 구성 요소의 누락된 종속성이 XML 추가 기능 모듈에 포함된 것처럼 나타나서 이 문제가 해결됩니다.

이 칼럼에 많은 도움을 주신 ImageX 개발자인 Bruce Green, Windows 개발 테스트 팀의 Minxiao Zhou, Raja Ganjikunta에게 감사 드립니다.

Wes Miller는 텍사스 오스틴에 있는 Pluck(www.pluck.com)의 개발 관리자입니다. 이전에는 오스틴에 위치한 Winternals Software에서 근무했으며 Microsoft에서 프로그램 관리자 및 Windows 제품 관리자로 일하기도 했습니다. 문의 사항이 있으면 technet@getwired.com을 통해 연락하십시오.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..