The Desktop FilesWindows 이미징 형식 내부

Wes Miller

이 칼럼은 Windows 배포 도구의 시험판 버전을 기준으로 작성되었습니다. 이 문서에 수록된 모든 정보는 변경될 수 있습니다.

Windows Vista가 출시되면 Windows의 설치 및 배포 방법이 크게 변경될 것입니다. Windows Vista 및 차세대 Windows Server 버전(코드명 "Longhorn")의 설치 엔진과 전체 배포 도구 집합이 새로 작성되었습니다. 저는 최근 TechNet Magazine 기사에서

Windows® 배포 팀이 이러한 변경을 위해 수행한 작업을 설명한 적이 있습니다. 그러나 이 주제에 관하여 설명할 것들이 많으므로 본 정기 칼럼에서는 Windows PE, Windows 설치와 배포, Windows와 관련된 기타 관리 및 보안 문제를 다룰 것입니다.

첫 번째인 이번 칼럼에서는 새로운 WIM(Windows 이미징 형식)에 대해 살펴보겠습니다. 이미징에 대해 잘 모르는 경우에는 오른쪽 아래에 있는 "일반적인 이미징 프로세스"를 읽고 이미징의 개념을 알아두는 것이 좋습니다. 다음 칼럼에서는 ImageX(WIM 이미지 생성 및 조작에 사용되는 명령줄 도구)가 포함된 새로운 도구 집합인 Windows 자동 설치 키트와 RIS(원격 설치 서비스)를 대체하는 WDS(Windows 배포 서비스)를 통해 OS 배포가 얼마나 간편해지는지를 살펴볼 것입니다.

전환점

수년에 걸쳐 Windows 배포 팀은 OEM 및 기업 고객으로부터 매번 같은 의견을 받았습니다. OEM과 기업 고객은 이미징에 대한 지원이 개선되기를 바랐고 Microsoft가 통합된 이미징 도구를 제공하기를 원했습니다. 이들은 타사 공급업체를 선택하고 해당 공급업체의 제품 기능을 배워야 하는 것이 부담스러웠습니다. 더욱이 Windows를 배포하는 데 사용하는 이미징 도구를 비용을 지불하고 구입해야 하는 것에도 불만이 많았습니다. 고객은 Microsoft가 이러한 도구를 제공해 주기를 희망했습니다.

Windows Vista™ 개발 초기에 Windows 배포 팀은 매우 큰 모험을 감행했습니다. Windows 배포 팀은 전체 설치 엔진을 과감하게 폐기하기로 결정했는데, 이 엔진을 구성하는 대부분의 구성 요소는 거의 10년 동안 사용되던 것들이었습니다. 설치 프로그램은 늘 안정성이 부족했고 단계가 너무 많았습니다. 따라서 설치 프로세스의 속도를 높이고 불필요한 단계는 제거하여 Windows 설치 프로그램의 안정성을 전반적으로 개선하고 싶었습니다. 이를 위해 꽤 오랫동안 사용해 왔던 기존 엔진에서 탈피하여 완전한 이미지 기반 설치 프로세스로 전환하려고 했습니다.

새로운 이미징 형식 설계

설치 프로그램을 다시 설계하는 과정에서 초기에는 사용해야 할 이미지의 종류를 정의하는 일에 착수했습니다. 섹터와 파일 중 어느 것을 기본으로 할지에 대한 논쟁이 벌어졌습니다. 즉, 볼륨 복사본을 섹터 단위 복제본으로 저장하는 이미지 형식과 모든 단일 파일을 개별적으로 저장하는 이미지 형식 중 어떤 것을 사용할지를 결정해야 했습니다. 대부분의 사람들이 예상하는 이점은 섹터 기반 방법을 이용할 경우 얻게 되는 속도와 파일 기반 방법을 이용할 경우 얻게 되는 압축 성능입니다. 결국 두 방법의 이점을 고루 얻을 수 있는 형식을 사용하기로 결정했습니다. 이 형식은 뛰어난 성능과 함께 우수한 압축 기능도 제공합니다.

먼저 OEM과 기업 사용자의 요구 사항을 충족하는 이미징 형식을 만들기 위해 달성해야 할 몇 가지 주요 목표를 정의했습니다. 배포 팀이 정의한 목표들을 보면 파일 기반 아키텍처가 상당한 지지를 받고 있었습니다. 배포 팀 모두 이 방법의 장점을 알고 있었고 따라서 먼저 이 방향에서 작업을 시작했습니다. 그리고 얼마 지나지 않아 WIM 파일을 개발했습니다. 궁금해하실 것 같아 말씀드리지만 WIM에서 "M"은 아무 것도 의미하지 않습니다. 릴리스 기준 시점이 다가오면 늘 열리는 Windows 팀 회의에서 취합된 의견에 따라 WIM이라고 명명했습니다. *.WI라고만 하기에는 약간 이상해 보였기 때문이었습니다. 이제 새로운 이미지 형식을 만들기 위해 Windows 배포 팀이 설정한 목표를 살펴보도록 하겠습니다.

Windows 파일 시스템 형식에 중립적 Windows에서 지원하는 두 파일 시스템 아키텍처 모두에서 이미지 형식이 작동해야 합니다. 실행되는 대부분의 시스템에서 NTFS를 사용하기는 하지만 많은 OEM과 기업에서는 MS-DOS®를 이용한 Windows 배포가 가능하도록 FAT 파일 시스템을 임시 방법으로 사용하고 NTFS로의 변환은 나중에 수행합니다. 따라서 Windows Vista에서도 FAT 파일 시스템을 계속해서 지원해야 했습니다.

볼륨 구조에 중립적 대용량 볼륨을 캡처하여 보다 작은 볼륨에 적용해야 하는 기존의 문제를 극복해야 했습니다. 이미징 도구를 사용할 경우 파티션 조작과 같은 방법으로 이 문제를 극복할 수는 있지만 안정적이지 않았습니다. In a file-based architecture, the image only takes up as much space as the files that comprise it. 파일 시스템은 독립적으로 복원되므로 볼륨 크기에 의존할 필요가 없습니다.

일반적인 이미징 프로세스

OEM이 다수의 시스템을 복제하거나 대규모 조직에서 수많은 컴퓨터에 Windows를 배포해야 할 때 주로 이미징 기술을 이용합니다. 단, 이미징 기술을 이용하려면 호스트 시스템을 설정하고 원하는 대로 정확하게 구축한 다음 대상 시스템에 복제해야 합니다. 이미징 프로세스에 익숙하지 않은 경우 아래의 간단한 개요를 살펴보십시오.

  1. 관리자가 시스템에 Windows를 설치한 다음 원하는 대로 구성합니다. 이때 구성 요소를 추가하거나 제거하고 일반적으로 사용되는 응용 프로그램을 설치하고 UI와 기타 설정을 수정하는 작업이 수반됩니다. 이 시스템을 호스트 시스템이라고 합니다.
  2. 그런 다음 관리자가 Microsoft가 Windows 배포 도구로 제공하는 Sysprep을 실행합니다. Sysprep은 컴퓨터 이름, Windows SID(보안 식별자) 및 기타 시스템 전반에 걸친 고유 ID와 같이 Windows 설치를 고유하게 만드는 특성을 정리하는 복잡한 작업을 수행합니다. 이러한 특성은 Sysprep이 실행되는 후반에 다시 설정됩니다.
  3. 관리자가 컴퓨터를 종료하고 이미징 응용 프로그램을 실행할 수 있는 Windows PE, MS-DOS 또는 다른 OS로 다시 부팅합니다.
  4. 이제 관리자가 이미징 도구를 실행하여 참조 시스템의 이미지를 만듭니다. 이 이미지는 참조 디스크 또는 파티션의 정확한 복제본이 들어 있는 파일 또는 파일 모음입니다.
  5. 시스템이 종료되고 관리자가 이미지를 보관합니다. 필요한 경우 응용 프로그램, 핫픽스 및 서비스 팩을 추가하여 이미지를 업데이트할 수 있습니다.
  6. 하나 이상의 컴퓨터로 이미지가 복제되고 Sysprep은 간략화된 설치 프로그램(Sysprep을 실행하는 Windows 버전 및 Sysprep의 구성 방식에 따라 최소 설치 또는 Windows 시작이라고 함)을 실행하여 작업을 완료합니다. 이 단계는 setupcl.exe라는 작은 기본 모드 실행 파일을 통해 수행됩니다.

시스템 아키텍처에 중립적 Windows가 지원하는 모든 아키텍처에서 이미지 아키텍처가 작동해야 했습니다. 그 당시 이것은 매우 다른 성격을 띤 x86 및 IA64(Intel Itanium) 아키텍처를 지원하는 것을 의미했습니다. 현재는 지원해야 할 아키텍처에 x64(AMD64 및 EM64T) 아키텍처도 포함됩니다.

고속 이미지 캡처 및 적용 압축을 한다고 가정했을 때 이미지 캡처 속도가 빨라야 했습니다. 하지만 보다 중요한 것은 이미지를 적용할 때 그 속도가 매우 빨라야 한다는 것입니다.

기존 데이터를 보존하는 이미지 적용 지원 사용자 데이터나 응용 프로그램에 아무런 영향을 주지 않고 Windows를 대체하는 업그레이드 옵션과 시스템 복구에 사용할 수 있는 도구를 새로 모색하고 있었으므로 볼륨에 이미 존재하는 데이터는 손상시키지 않고 시스템에 대한 이미지를 만들려고 했습니다. 일반적으로 복원을 수행할 때는 볼륨 전체를 복원하거나 복원을 아예 수행하지 않으므로 섹터 기반 형식의 경우 상당량의 작업이 수반되지 않고서는 사용자가 이 작업을 수행할 수 없습니다.

향상된 압축 지원 Windows Vista 개발 작업을 처음 시작할 때만 해도 Windows를 CD로 제공하는 것에 중점을 두고 있었습니다. Windows XP 이미지의 크기가 1GB에 이른다는 점을 고려했을 때 이미지를 가능한 한 고밀도로 압축하는 것이 중요하다고 생각했습니다. 섹터 기반 이미지의 경우 몇 가지 방법을 통해 이러한 압축이 가능할 수도 있지만 이 경우 이동되는 부분이 염려스러웠습니다. 대부분의 섹터 기반 형식은 디스크의 공백을 생략하여 공간을 절약합니다. 0이 항상 0이라면 이미지에 0을 기록해야 할 필요가 없으니까요. 하지만 배포 팀에서는 파일 기반 방법을 통해 공백을 선택하지 않음으로써 이 문제를 처리했습니다.

파일의 단일 인스턴싱 지원 이 문제는 앞의 문제와 동일합니다. Windows에서는 동일한 파일의 여러 복사본을 몇몇 다른 위치에 저장합니다. 파일 기반 방법을 이용한다면 각 파일의 인스턴스를 하나만 저장하고 필요에 따라 파일을 사용하는 것이 쉽습니다.

미디어(디스크) 확장 지원 WIM의 초기 단계에 한 장의 CD에 맞게 이미지를 만들 수 있었을 때조차도 여러 개의 미디어를 지원해야 한다는 사실을 잘 알고 있었습니다. Windows를 CD 한 개로 제공하더라도 사용자가 응용 프로그램과 서비스 팩 등을 추가하면 CD나 DVD 한 개에 담기에는 이미지 크기가 점점 커질 것입니다. 따라서 Windows 설치와 복구를 위해 여러 개의 미디어에 이미지를 확장할 수 있도록 지원해야 했습니다.

하나의 파일 BLOB에서 여러 개의 볼륨 이미지 지원 하나의 이미지로 모든 것을 해결할 수 있는 경우는 거의 없습니다. "단일 인스턴싱"을 엔지니어링할 때 볼륨을 둘 이상 선택할 수 있는 기능 및 압축과 단일 인스턴싱이 상호 작용하도록 하는 기능도 포함했습니다. 따라서 Windows XP Professional 이미지를 선택한 다음 Windows XP Tablet PC Edition(Windows XP Professional의 상위 집합)에 대한 새 이미지를 추가하면 두 버전 간에 명시적으로 다른 부분에 해당하는 파일 수만큼만 이미지 크기가 늘어납니다.

그 결과 OEM이나 기업 사용자는 이미지 크기가 빠른 속도로 늘어나는 것을 염려하지 않고 각 버전에 많은 파생 이미지를 추가할 수 있습니다. 섹터 기반 형식에서는 이를 실현하기가 쉽지 않았을 것입니다.

WIM의 작동 방식

WIM 형식은 배포 팀이 설정한 주요 원칙을 충족하는 동시에 가능한 한 단순한 형태가 되도록 설계되었습니다. 파일 기반 방법을 이용했기 때문에 이와 같은 일이 가능했습니다. 이제 WIM이 정확하게 어떻게 작동하는지 살펴보겠습니다.

간단히 말해 WIM 파일은 CAB 파일이라고 생각할 수 있습니다. CAB 형식은 ZIP 형식과 비슷하지만 Microsoft에서 설계했고 Microsoft가 소유한 형식입니다. 실제로 WIM이 "CAB의 후예"로 불리는 것을 들은 적이 있습니다. WIM 파일과 CAB 파일의 가장 큰 차이점은 WIM 이미지의 경우 파일 자체를 캡처하고 압축할 뿐만 아니라 지정된 볼륨 이미지에 캡처된 볼륨을 구성하는 파일과 디렉터리에 적용되는 메타데이터 또한 저장한다는 것입니다. 따라서 WIM 파일은 이미지가 만들어진 시점의 볼륨 상태로 볼륨을 복원하는 데 필요한 ACL(액세스 제어 목록), 짧은 파일 이름/긴 파일 이름, 특성 등의 모든 메타 정보가 포함된 일종의 보관 파일이라고 할 수 있습니다.

하지만 캡처하는 동안에는 크기나 형식과 같은 파티션 정보가 수집되지 않으며 이미지를 적용하는 동안에는 시스템이 분할되지 않습니다. 대부분의 이미징 도구와는 달리 ImageX는 파티션에 중립적이므로 이미지를 적용하기 전에 파티션을 만들고 포맷해야 합니다. 이미지를 적용하기 전에 이 프로세스를 자동화하려면 diskpart 및 format 명령줄 도구를 사용해야 합니다.

볼륨 이미지에 저장할 수 있는 것에는 제한이 없습니다. 두 개의 볼륨, 화요일과 목요일에 캡처된 동일한 볼륨, 서비스 팩이 포함된 이미지와 포함되지 않은 이미지 등 필요한 모든 것을 이미지에 저장할 수 있습니다. 중요한 것은 동일한 파일은 한 번만 캡처된다는 점입니다. 즉, 두 볼륨 이미지의 공통점이 적을수록 더 많은 공간이 사용됩니다.

또한 WIM 형식에는 이 형식을 이전 버전의 Windows에 사용할 수 없도록 하는 어떠한 요소도 설계되지 않았다는 점을 강조하고 싶습니다. 즉, WIM 형식은 Windows Vista에서와 마찬가지로 Windows 2000에서도 잘 작동합니다. 이제 이미지가 캡처되고 적용될 때 어떠한 일이 일어나는지를 좀 더 자세히 살펴보겠습니다.

이미지 캡처

볼륨 이미지가 캡처될 때 수행되는 작업은 다음과 같습니다.

볼륨 메타데이터 캡처 ImageX가 볼륨 전체에 걸쳐 파일 이름, NTFS ACL 및 기타 파일 시스템 특성에 관한 데이터를 수집합니다. 스크립트 파일을 사용하여 특정 파일은 제외할 수도 있습니다.

파일 데이터 캡처 ImageX가 파일을 로드합니다. 각 파일이 볼륨에 로드되고 파일에 관한 특정 데이터를 수집할 준비가 됩니다.

파일 해시 생성 파일 자체를 기준으로 파일 암호화 해시가 생성됩니다. 이 해시는 이미지에서 파일의 고유 식별자가 됩니다.

중복 파일 확인 및 제거 해시가 동일한 다른 파일이 이미지에 이미 있으면 동일한 파일로 간주되고 새 파일은 이미 있는 파일을 가리켜 참조됩니다.

고유 파일 데이터 압축 CAB나 다른 여러 보관 형식과는 달리 WIM 파일의 각 파일은 파일 모음이 하나의 데이터 스트림으로 그룹화되어 압축되는 것이 아니라 개별적으로 압축됩니다. 압축을 하지 않도록 선택할 수도 있으며, 이 경우 이 단계를 건너뜁니다.

볼륨 메타데이터 압축 및 저장 모든 파일이 보관되면 볼륨에 대한 메타데이터 항목이 만들어집니다. 이 항목에는 볼륨 이미지에 추가된 각 파일이 나열됩니다.

이미지 XML 데이터 생성 및 저장 캡처된 각 볼륨 이미지에 대한 참조입니다. 예를 들어 ImageX /info를 실행하면 이 XML 데이터가 표시됩니다.

캐시된 WIM 데이터 인덱스 작성 마지막으로 캐시된 데이터와 함께 마스터 데이터 인덱스가 작성됩니다. 이 인덱스는 전체 WIM에 대한 마스터 파일 테이블이며 해시당 한 개의 항목을 포함합니다.

WIM은 파일 단위로 만들어집니다. 또한 WIM 파일은 이미지에 추가하는 볼륨의 개수에 관계없이 하나만 사용됩니다.

이미지 오버로드

WIM 작업에 착수했을 때 이와 비슷한 솔루션을 개발하고 있던 팀이 많았습니다. 자동 배포 서비스 팀은 다른 고객 부문을 대상으로 한 이미징 솔루션을 개발하고 있었습니다. 이 팀이 취한 방법에는 매우 흥미로운 몇 가지 하위 수준의 구현 내용이 있었지만 이미징 엔진은 당시의 다른 엔진과 마찬가지로 섹터에 기반을 두고 있었습니다. Windows XP Embedded 팀 또한 IHV(독립 하드웨어 공급업체)가 시스템을 제조할 때 이미지를 배포할 수 있도록 섹터 기반 이미징 엔진을 만들었습니다. 그리고 2003년에 Microsoft가 Virtual PC 팀을 인수할 당시 이 팀은 VHD(가상 하드 디스크) 파일에 사용할 또 다른 파일 형식을 보유한 상태였습니다.

이러한 모든 형식은 근본적으로 섹터를 기반으로 합니다. 이러한 솔루션은 각각 해당 고객 부문의 요구 사항은 충족하지만 WIM에 대해 세웠던 우리의 기준을 충족하지는 못했습니다. 따라서 새로운 WIM 형식 개발과 이미지를 캡처하기 위한 ImageX 명령줄 도구를 만드는 작업을 계속하게 되었습니다. 결국에는 Windows Vista 베타 버전의 일부로 WIM이 공식적으로 발표되기 훨씬 전부터 다른 많은 다른 팀에서도 WIM 형식을 채택했습니다. 예를 들어 SMS 팀은 Operating System Deployment Feature Pack을 통해 WIM를 먼저 구현했습니다.

이미지 적용

이제 이미지 캡처와 반대되는 과정인 이미지 적용에 대해서 살펴보겠습니다.

캐시된 WIM 데이터 인덱스 로드 이 단계는 앞의 절차에 나오는 마지막 단계와 관련이 있습니다. 이 인덱스는 마스터 인덱스이므로 적용할 볼륨 이미지를 지정한 후 WIM에서 가장 먼저 로드되는 요소입니다.

이미지 메타데이터 검색 및 로드 ImageX가 각 볼륨 이미지와 관련된 메타데이터를 로드합니다.

디렉터리 구조 생성 모든 파일이 복원 위치를 가질 수 있도록 볼륨에 대한 전체 디렉터리 트리가 만들어집니다.

파일 데이터 추출 보관될 때와 정확하게 동일한 순서로 WIM에서 파일이 추출됩니다.

파일 데이터 적용 이 단계에서는 파일이 로드되고 압축이 해제된 다음(WIM에서 볼륨 이미지가 압축된 경우) 각각의 참조되는 위치로 복사됩니다. 마지막으로 각 파일의 메타데이터가 모두 적용됩니다.

모든 디렉터리 메타데이터 적용 디렉터리의 ACL로 인해 이미지가 올바르게 적용되지 않을 가능성이 있으므로 이 단계가 마지막 단계라는 점은 매우 중요합니다.

융통성 있는 압축

WIM 이미징 형식을 통해 제공하려고 한 주요 목표 중 하나는 융통성 있는 압축 옵션을 제공하는 것이었습니다. 따라서 필요한 경우 압축을 하여 볼륨 이미지를 캡처하고 원하지 않으면 압축을 하지 않고 이미지를 캡처할 수도 있게 만들었습니다. 압축을 하지 않는 옵션은 이미지를 굳이 압축할 필요가 없거나 고속 캡처가 중요한 경우에 사용하면 좋습니다.

압축과 관련해서 주의해야 할 몇 가지 사항이 있습니다. 압축은 항상 압축을 해제할 때보다 시간이 오래 걸립니다. 압축 알고리즘이 복잡할수록 주어진 데이터 집합을 압축하는 데 걸리는 시간도 길어집니다. 또한 압축 알고리즘에 제공하는 데이터가 많을수록 압축 성능이 우수해집니다.

WIM 이미지는 XPress 또는 LZX 압축을 통해 압축할 수 있으며 필요에 따라 압축을 하지 않을 수도 있습니다. XPress는 압축이 필요하기는 하지만 캡처 프로세스에 너무 많은 시간을 사용하고 싶지 않을 때 적절한 방법입니다. LZX는 최적의 압축 비율을 제공하지만 시간이 상당히 소요됩니다.

압축을 하지 않을 경우 이미지 캡처 속도는 가장 빠르지만 이미지 크기는 가장 커집니다. 압축 형식은 WIM 단위로 선택할 수 있습니다. 한 볼륨 이미지를 WIM에 캡처한 후에는 향후 모든 볼륨 이미지를 동일한 압축 설정을 사용하여 캡처해야 합니다.

WIM 이미지는 압축을 파일 단위로 수행하므로 압축이 완벽하지 않을 수 있습니다. 이에 대해서는 미리 알고 있었지만 이미지 편집을 보다 쉽게 수행할 수 있도록 내린 결정이었습니다. 캡처가 끝난 후에 이미지를 편집할 수 있는 기능은 매우 중요한 것입니다. 이미지를 캡처한 후 파일을 편집하려면 파일 데이터와 해당 메타데이터를 대체해야 합니다. 전체 WIM을 모두 한 번에 압축했다면 파일 편집을 지원하는 기능을 엔지니어링하기가 너무 복잡했을 것이고 이미지의 파일을 대체하는 데 너무 많은 시간이 소요될 것입니다. Windows 배포 팀에서는 절충된 방법을 마련하여 압축 성능이 우수할 뿐만 아니라 팀에서 만든 도구로 편집도 가능한 형식을 개발할 수 있었습니다.

이 칼럼을 통해 Windows Vista용으로 설계된 이미징 기능이 어떻게 작동하는지 잘 이해하셨으리라고 믿습니다. 다음 칼럼에서는 ImageX와 Windows 배포 서비스에 대해 자세히 살펴보고 WIM 이미지를 관리하고 배포하는 데 사용할 수 있는 몇 가지 도구를 소개하도록 하겠습니다.

Wes Miller는 텍사스 오스틴에 있는 Pluck(www.pluck.com)의 개발 관리자입니다. 이전에는 오스틴에 있는 Winternals Software에서 근무했으며 Microsoft에서 프로그램 관리자 및 Windows 제품 관리자로도 근무한 경력이 있습니다. 문의 사항이 있으신 분은 technet@getwired.com으로 연락하시기 바랍니다. Wes는 이번 칼럼을 작성하는 데 도움을 주었으며 현재 Microsoft의 WIM/ImageX 프로그램 관리자인 John Macintyre에게 감사의 뜻을 전했습니다.

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