Freigeben über


Windows 표준 이미지, 그리고 가상화 환경내 VHD, VHDX 파일 생성에 대한 생각

2008년부터 시작된 꼬알라의 Hyper-V와의 여행은 벌써 5년째가 접어듭니다. Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, 그리고 그 동반자로 연결되어져 있는 System Center 2012까지 기술에 대한 성숙도는 점점 올라가는 뿌듯한 모습을 보여주고 있습니다.

근래에 IT CAMP나 세미나에서 Hyper-V에 대한 여러 이야기를 나누던 중, 가장 빈번히 여쭤오시는 케이스가 하나 있습니다. 꼬알라의 데모 환경 구성시 사용하는 가상 머신의 하드 디스크 파일, 바로 VHD 또는 VHDX에 대한 관리입니다. 당연히 VHD, VHDX 파일 형태의 이야기는 Windows 운영 체제 구성 후 하드 디스크를 이미지화 시켜 표준 이미지를 사용하는 일반 컴퓨터 환경도 포함되는 이야기입니다.

image

Windows Server 2008 R2까지 제공하던 VHD 형태의 파일은 안정성 및 성능에 대해서는 큰 무리가 없었습니다만, 저장소에 대한 용량 트렌드의 급속한 확장으로 기존 2TB의 용량이 제한으로 다가오는 케이스가 많았습니다. 대표적으로 물리적인 머신을 가상화로 변경하는 P2V의 경우, 특정 드라이브가 2TB가 넘는 경우엔 VHD로 변경할 수가 없는 것이죠. 이에 Windows Server 2012에서 지원하는 VHD의 확장(Extension) 모델인 VHDX의 경우에는 현재 64TB까지의 용량, 그리고 데이터 저장시 파일내 로그에 선 저장후, 실제 데이터로 저장하는 보다 나은 안정성 구조로 변경되었습니다. VHD와 VHDX간의 상호 변환은 Windows Server 2012내 Hyper-V의 가상 하드 디스크 편집 마법사를 통해 가능합니다.

image

현장에서 뵈었던 많은 관리자 분들께서는 가상화 환경에 대한 가상 하드 디스크 파일의 생성을 위해 기초적인 가상 머신을 구성하시고, 이에 대한 VHD 파일을 저장하시거나, VM 자체를 내보내기한 후, 다시 가져오는 형태로 가상 머신에 대한 복제를 진행하고 있는 경우가 많았습니다. 이렇게 만들어진 VHD 파일을 복사하여, 개별적으로 가상 머신을 생성, 혹은 VHD 파일에 대한 차이점(Differencing) 가상 하드 디스크를 생성하여, 변경분만 저장하는 형태로 구성을 하시는 경우도 있었죠. 또한 VDI 환경을 구성하실 때, 마스터 데스크톱 이미지에 대해서도 구성이 필요한 경우가 많았습니다.

image

이 경우, 한가지 고려해야 할 사항이 있습니다. 바로 Windows 운영 체제의 보안 ID(SID, Security ID)입니다. 외부적으로 노출되지 않은 고유한 번호이지만, AD 환경내에서 ADSIEDIT.MSC을 통해 컴퓨터 개체 속성을 확인해보면, 보실 수 있는 값인데요. 바로 VHD 복사시 이 SID가 동일한 형태도 Windows 가상 머신이 만들어진다는 것입니다. 중복된 SID에 대해서는 경우에 따라서, 눈에 보이는 큰 이슈, 어떤 경우에는 눈에 보이지 않는 작은 이슈, 혹은 문제가 없는 경우로 이어집니다. (이에 대한 자세한 포스팅은 Microsoft에서 Technical Fellow로 있는 마크 루시노비치의 The Machine SID Duplication Myth (and Why Sysprep Matters)를 읽어보시면 좋습니다.) 컴퓨터 계정에 대한 인증시, 그리고 도메인 컨트롤러에 대한 구성시가 이슈가 되고, 이러한 SID 충돌의 이슈는 또다른 곳에서 발생할 수 있는 폭탄처럼 남아있게 됩니다.(P2V시에도 문제가 난다는 KB도 있고..)

그렇다면, 이 SID에 대한 재설정(Reset)이 필요하다는 것인데요. 이 경우에 사용되었던 도구가 일전의 Sysinternal의 NewSID(지금은 제공되지 않고, 그리고 공식적인 기술 지원도 불가), 그리고 공식적인 도구인 Windows내 포함된 Sysprep입니다.

image

해당 Sysprep을 실행하면, 체크 박스로 있는 일반화(Generalize)가 중요합니다. 이렇게 일반화된 이미지의 경우, 최초 부팅시, SID에 대한 리셋, 그리고 하드웨어에 대한 검색, 컴퓨터에 대한 구성등을 재구성해줌으로, 유니크한 형태로 구성을 해주게 됩니다. 이에 Windows 이미지를 생성 후, Sysprep을 통해, 반드시 해당 이미지를 초기화시키는 작업이 필요합니다. (보통 컴퓨터를 구매하셨을 때, 최초에 Windows가 부팅되고, 제품 키나 컴퓨터 이름등을 묻는 단계가 바로 Sysprep된 이미지를 켰을 때의 형태입니다.) 여기서 중요한 사항이 한가지 더 있습니다. Windows 운영 체제 이외 설치된 프로그램이 Sysprep을 지원하는지에 대한 부분입니다.

클라이언트 기술의 경우엔 상당수가 Windows 표준 이미지 구성을 지원하므로, 추가적인 응용 프로그램들을 설치 후, Sysprep을 하고, 다시 이를 이용해서, Windows를 꾸미더라도, 큰 이슈가 발생하지 않습니다만, 서버 기술의 경우엔 문제가 발생할 수 있습니다.(대표적으로 Exchange Server등이 떠오르네요..) 설치시 시스템의 SID를 활용하는 응용 프로그램이나 서버 프로그램의 경우, 이를 리셋했을 경우, 이전 값이 남아있기에, 정상 동작하지 않게 됩니다. 이는 Sysprep으로 구성하기 전, Microsoft 사이트나 검색 엔진을 통해 살펴보는 것이 좋습니다. SQL Server의 경우 2008 R2 부터, Sysprep형 설치에 대해서 지원하고 있습니다.

image

이야기가 길어졌습니다. 그렇다면 Sysprep을 하는 것이 더 낫다는 결론이 나옵니다. 그럼 Sysprep된 Windows 이미지를 가장 쉽게 구성할 수 있는 방법은 무엇일까요?

바로 Windows 설치 미디어에 들어있는 Install.WIM을 활용하는 것입니다. 미디어내 Sources 폴더에 위치한 Install.WIM은 Windows 이미징 파일로서, 쉽게는 특정 컴퓨터에 설치된 Windows를 Sysprep 상태를 만든 후, 하나의 파일로 만들어 놓은 것입니다. 이를 VHD나 VHDX로 쉽게 변경할 수 있는 스크립트가 제공되고 있습니다.

image

Windows 8/Windows Server 2012에서는 Convert-WindowsImage라는 Windows PowerShell 스크립트를 사용할 수 있습니다. https://gallery.technet.microsoft.com/scriptcenter/Convert-WindowsImageps1-0fe23a8f 에서 다운로드가 가능하며, 아래의 사용 예제를 살펴보시면 손쉽게 WIM을 VHD나 VHDX로 만들 수 있습니다.

image

Windows 7/Windows Server 2008 R2의 경우엔 WIM2VHD를 활용할 수 있습니다. Convert-WindowsImage 스크립트와는 달리 WIM2VHD는 Windows 7/Windows Server 2008 R2용 AIK의 설치가 사전 요구됩니다.

WIM 파일의 경우엔 AIK나 DISM.EXE를 통해 보안 업데이트 추가, 드라이버 추가등이 가능하기에, 표준 이미지를 만들고, Windows 배포 서비스(WDS)를 통해 배포도 가능합니다.

image

오늘 소개드렸던 스크립트를 이용해서 가상 하드 디스크도 생성할 수 있습니다. 기본적인 Windows 설치 미디어내 들어있는 Install.WIM은 앞서 언급드린 Sysprep이 완료된 상태이므로, 해당 WIM을 VHD나 VHDX로 바꾼 후, VM 생성시 활용하면 좋습니다. 꼬알라 역시, 그런 형태로 운영 체제별 이미지를 생성해 놓았습니다.

마지막으로 가상 머신을 Sysprep한 후, VHD만 저장한 것이 아니라, VM 내보내기(Export)를 활용하는 경우에는 가져오기(Import)시 VM의 ID를 다시 생성하는 형태로 가져와야 합니다. 동일한 ID로 가져올 경우, 가상 머신의 ID 값이 동일하게 처리되기에, Hyper-V에서 중복 머신으로 인식될 수 있습니다.

오랜만의 내용 포스팅인데, 길어졌네요~ 그래도 시간을 내셔서, 살펴보시면 Windows 표준 이미지, 혹은 VHD/VHDX를 생성하는 가장 표준적인 방법을 아실 수 있을거라 생각합니다. 미소

Comments

  • Anonymous
    January 17, 2013
    Sysprep 작업을 할때 시스템에 Sysprep를 시도하는 동안 오류가 발생했습니다. 라고 뜨며 안되는데 그리고 재부팅했는데 아예 부팅이 안되네요.. 이거 왜이렇는지 알고싶습니다.

  • Anonymous
    January 17, 2013
    박병진님 // 안녕하세요~ 해당 Sysprep이 오류를 발생시켰을 땐 관련 로그가 WindowsSystem32SysprepPanther에 Setuperr.log 파일로 남게 됩니다. 더불어 이벤트 로그에도 어떠한 형태로 에러가 발생했는지를 확인해야 정확한 원인을 알 수 있습니다~

  • Anonymous
    January 21, 2013
    유용한 정보 감사합니다!

  • Anonymous
    January 23, 2013
    감사합니다. 덕분에 가상이미지 한방에 해결되었네요. ^^

  • Anonymous
    March 11, 2016
    관리자 권한으로 powershell 에 들어가서 .\Convert-WindowsImage.ps1 -ShowUI 엔터를 쳤는데 아무런 반응이 없습니다. 아무리 찾아봐도 알수가 없습니다. 권한설정해줫구요 파일속성 차단해제 해줫구요 근데 아무런반응이 나타나질않아요 오류조차 뜨지않습니다. 도와주세요

    • Anonymous
      March 11, 2016
      os는 windows server 2012r2 입니다.
      • Anonymous
        March 11, 2016
        sysrep과 연관이있나요?
    • Anonymous
      March 30, 2016
      Convert-WindowsImage 스크립트가 업데이트된 후, Function 형태로 처리되고 있습니다. PS1을 실행하신 후, PowerShell Cmdlet형태로 실행하셔야 합니다.