운영 체제를 파일 하나로 휴대… Windows 7


Windows7_h_rgb


운영 체제를 파일 하나로 휴대할 수 있다면 어떨까요? 해당 파일을 하드 디스크에 복사해놓고, 이를 부트 로더가 읽어서, 부팅을 시켜준다면?


운영 체제의 휴대성(Mobility)를 부여하는 것은 매우 큰 의미를 가집니다. 지금까지 하드 디스크내 설치된 운영 체제의 파일들을 분리해서 사용한다는 것은 생각하기 어려운 일이었습니다. 하드 디스크를 실제로 옮겨서, 부팅시키지 않는한 말이죠 🙂


Windows 7에서는 VHD(Virtual Hard Disk) 포맷을 기본적으로 지원합니다. 뜬금없이 왠 VHD냐? 라는 말씀을 하실 수 있을건데요. VHD 파일에 대해 잘 모르시는 분들을 위해 간단하게 설명을 하겠습니다.


VHD(Virtual Hard Disk)


원래에는 Virtual PC, Virtual Server 2005, Windows Server 2008 Hyper-V, Microsoft Hyper-V Server, XEN 기반 가상화등에서 널리사용되고 있는 가상 머신용 하드 디스크입니다. VHD 파일 하나가 실제 하드 디스크의 형태로, 시스템에서 보이게 되며, 이를 이용하여 가상 머신이 동작하고, 데이터를 저장하게 됩니다.


image


 


꼬알라가 데모를 위해서 사용하는 VHD 파일들입니다. 개별 파일 하나하나가 실제 가상 머신의 하드 디스크로 동작하고 있다고 생각하시면 쉬워집니다. VHD는 오픈 스펙으로 Microsoft에서 스펙을 공개하고 있으며, 이를 XEN에서 받아들여, XEN 기반 가상화에서도 가상 머신에 대한 하드 디스크로 사용중이죠. 이에 고객은 손쉽게 가상 머신 하드 디스크, 즉 VHD 파일을 다른 물리적인 머신으로 복사하여, 동일한 형태의 가상 머신을 구성할 수 있습니다. 이런 의미에서 가상화는 가상 머신에 대한 휴대성 및 빠른 재난 복구라는 비즈니스 가치도 부여하고 있었습니다.


그렇다면 VHD 파일의 내부는 어떨까요? 그냥 하드 디스크와 동일한 계층 구조로 저장되어져 있습니다. 그렇다면.. ISO 파일을 데몬과 같은 프로그램으로 마운트해서 사용하듯이 VHD 파일도 마운트해서 쓸 수 있다는 생각이 드시죠? 지금까진 가상화 솔루션내 VHDMount.exe를 사용했었습니다.


이야기가 길어졌습니다.


언급한바와 같이 VHD 파일을 Windows 7에서는 실제 파일을 저장하기 위한 캐비넷 형태로 사용할 수 있고, 해당 VHD 파일을 딴 곳으로 복사해서, 다시 연결하시면, 되겠죠? 자 그럼 어떻게 만드는지 볼까요?


디스크 관리자를 엽니다.


image


VHD 만들기는 하나의 VHD 파일을 생성한다는 의미이며, 생성 후, 해당 파일을 마운트하여, 별도의 하드 드라이브로 연결합니다. VHD 연결의 의미는 기존에 사용중이던 VHD 파일을 마운트한다는 의미죠.


image 


Dynamic Expanding(동적 확장) 유형은 최초에 작은 크기로 VHD를 만들고, 사용자가 지정한 크기까지 파일이 점점 커지는 구조입니다. 하드 디스크 사이즈 관리에는 용이하지만, 성능 & 디스크 조각에는 영향을 줄 수 있습니다. Fixed Sized는 처음부터 해당 크기를 가진 VHD 파일을 만드는 것입니다. 디스크 사이즈엔 영향을 주지만, 성능 & 디스크 조각화 방지에는 좋습니다. 원하는 형태로 VHD 파일을 만들고, 연결하면…


image


디스크 처럼 잡혔죠?


image


파일 형태로 저장되어져 있고요~


이렇게 데이터 형태로 VHD를 사용할 수 있다는 의미입니다. 여기에서 끝이 아닙니다. VHD를 이용해서 부팅도 가능합니다. Windows 7의 부트 로더는 VHD 파일을 파싱할 수 있고, 해당 VHD 파일안의 데이터를 이용하여 부팅을 하게 됩니다.


권한이 상승된 명령어 프롬프트를 엽니다. BCDEDIT.EXE를 사용할 것입니다.



  1. BCDEDIT /COPY {CURRENT} /D “부트 로더에 표시될 이름” ? 부트 로더내 현재 엔트리를 한개 복사하여, /D에서 입력한 이름의 형태로 표시시킵니다. 여기서 GUID가 리턴됩니다.

  2. BCDEDIT /SET {GUID} DEVICE VHD=[드라이브명:]\폴더\파일명

  3. BCDEDIT /SET {GUID} OSDEVICE VHD=[드라이브명:]\폴더\파일명

  4. BCDEDIT /SET {GUID} DETECTHAL ON - HAL을 업데이트하여, 변경된 형태의 하드웨어를 인식시킵니다.

image


이런 후 다시 시작을 시키면..


image


감이 오시나요? 주의하실 사항은 VHD 파일내 지원 가능한 운영 체제는 Windows 7이어야 합니다. 하위 운영 체제는 지원하지 않습니다. 그리고 Windows 7과 동일한 부트 로더를 사용하는 Windows Vista의 경우에는, Windows 7의 부트 로더 파일만 복사하여, Windows 7의 VHD 이미지를 부팅에서 사용할 수 있습니다.


VHD 파일을 어떻게 만들 수 있을까요? 현재 방법은 Windows 7을 Hyper-V나 Virtual PC, Virtual Server 2005 환경에서 만들어야 합니다. 운영 체제를 가상화 환경내 설치하고, Sysprep을 이용하여, 해당 VHD내 운영 체제를 초기화해야 합니다.


어떠세요? 이제 다른 곳에서 동일한 환경을 써야한다면.. VHD 파일 형태로 만들어서, 이를 휴대해서 사용하실 수 있겠죠? 시간이 될때, Windows Vista 환경에서 이를 사용하는 방법, 그리고 새로운 빈 하드 디스크(운영 체제가 없는)에서 VHD만을 이용해서 시스템을 구성하는 이야기를 포스팅하겠습니다.

Comments (21)

  1. archmond says:

    VHD 파일을 기본적으로 운영체제에서 지원한다는 사실이 놀랍습니다. 가상 머신을 동작시키는 것 뿐 아니라, 운영체제 자체에서 사용 가능하다는 것이 참 좋은 것 같습니다. 말씀하신 대로 ‘성능 & 디스크 조각화 방지’에 매우 좋을 것 같네요.

    잘 보고 갑니다.

  2. Seung Joo Baek says:

    🙂 아크몬드님.. 자주 방문해주셔서 감사합니다.

  3. 기성 says:

    Vista 이후 wim 과 vhd 파일이 항상 혼동되곤 합니다.

    각각의 파일 포맷의 특징, 장/단점에 대해서 한번 정리해 주는 포스팅을 해주시는 것은 어떨까요? ^^

  4. says:

    하나의 운영체제를 여러 컴퓨터에서 작동시킬 수 있다는 것이 독특한 것 같습니다. 헌데, 컴퓨터가 달라진다는 것은 하드웨어가 바뀐다는 것인데요. 장치 인식의 한계는 있다고 보여지는데 어떠한가요? 아니면 Virtual Server처럼 가상 드라이버로 작동하는 것인가요?

    항상 좋은 글들 감사하게 보고갑니다.

  5. Seung Joo Baek says:

    기성님 // 시간이 되면 한번 찾아서 포스팅하겠습니다.

    혁 // 물리적인 하드 디스크 안에 저장된 VHD 파일을 실제 물리적인 머신이 하드 디스크를 읽고 쓰듯이 한다는 의미입니다. Windows 7 VHD 파일을 5개를 만들어놓고.. 이를 개별적(멀티부팅개념으로)으로 실제 머신에서 부팅할 수 있다는 의미죠..

    결국 VHD 파일내 운영 체제는 실제 물리적인 머신에 대한 하드웨어 드라이버를 다 설치해줘야 합니다. 제대로 다 쓰시려면.. 포맷을 VHD형식으로 쓰지, 실제 가상화와는 전혀 다른 동작 방식입니다.

  6. zento says:

    Windows7의 부트로더는 VHD외에

    ISO 화일도 부팅이 가능한지요?

  7. Seung Joo Baek says:

    Zento님..

    ISO로는 부팅이 되지 않습니다.

    방문해주셔서 감사합니다. 🙂

  8. 미친감자 says:

    오~~죽이는 기능이군요..지금 저도 windows 7 beta Build No.7000 번 설치하고 있습니다.

  9. Seung Joo Baek says:

    미친감자님 🙂

    나름 흥미로운 기술이라 생각해요 저도.. 감사합니다.

  10. 김동현 says:

    공부하는 공학도로서는 VHD기반 부팅환경은 흥미롭네요^^!

    "논리파티션위에 바이너리디스크(?)"

    윈도우에서 설치되는 우분투도 이같은 환경인 듯 한데,,

    앞으로는 이것이 대세군요,,,,,,ㅋ;

  11. 복돌이 says:

    권한이 상승된 명령어 프롬프트를 엽니다. BCDEDIT.EXE를 사용할 것입니다.

    BCDEDIT /SET {CURRENT} ~~~ 가 아니라

    BCDEDIT /copy {CURRENT}~~~~

  12. Anonymous says:

    일전에.. 운영 체제를 파일 하나로 휴대… Windows 7 라는 포스팅을 한적이 있습니다. Windows 7은 Virtualized Aware OS로서, 물리적 환경 또는 가상화

  13. ㅋㅋ says:

    마소가 리눅스를 따라하다니…

    이미 리눅스에서 xen 이용해서 지원하던 기수인데;;;

  14. snoopy says:

    꼬알라님~~ 위에 복돌이님이 댓글 다셨듯이 중간에 오타가 하나 있네요~~

    BCDEDIT /SET {CURRENT} /D “부트 로더에 표시될 이름”

    스샷에는 COPY로 제대로 나와있는데 설명은 SET 으로 하셨어요~~

  15. Seung Joo Baek says:

    Snoopy님, 복돌이님 // 늦었지만, 오타는 수정해놓았습니다. 🙂 감사합니다

  16. Anonymous says:

    운영 체제를 파일 하나로 휴대… Windows 7 실제 컴퓨터? 가상 컴퓨터.. 이제는 그 구분없이.. Windows 7, 그리고 WIM2VHD VHD에 대한 이야기는 이미 2개의

  17. 리피 says:

    그럼, 저 기술을 이용하여 XP와 윈7 을 듀얼부팅할순 없는건가요?

    저는 XP도 같이 쓸수 있을줄 알고 기대했는데..

    아직 안해봤지만 마지막 부분에 윈7이상만 지원한다고 적혀있네요.

    아쉽네;;

  18. Seung Joo Baek says:

    리피님 // 안녕하세요.. 기본적으로 VHD를 활용하여 XP와는 듀얼부팅을 할 수 없습니다.

  19. 백수청년 says:

    windows7을 사용하면서 꼬알라님 블로그 내용이 많은 도움이 되고 있습니다. 좋은 내용 감사합니다.

    virtualPC를 이용해서 만들어진 VHD 이미지는 계속 에러가 나는군요. imageX를 이용해서 VHD를 만드니 부팅이 잘 됩니다.

    그런데, 업데이트 설치한 이후에 sysprep를 이용하여 공장초기화를 시키고 부팅하니 기존에 설치된 사용자는 그대로 남아 있네요. 또한 사용자가 설치한 프로그램(폰트등)도 새로운 사용자에게는 적용이 안되어 있습니다. 아직 따라하기식이라서 감이 잘 오지 않는데 제가 겪고 있는 현상이 맞는 것인지 궁금합니다.

  20. Seung Joo Baek says:

    백수청년님 // 안녕하세요. 부팅을 위한 VHD는 Sysprep이 완료된 이미지여야 합니다. Sysprep은 모든 Windows 설정을 리셋하는 것이 아니라, 현재 상태를 그대로 내버려두고, 시스템(사용자가 아닌)의 고유 정보를 리셋하는 작업입니다.

    이에 기존 폴더나 사용자는 그대로 남아 있습니다. 또한 새롭게 생성하시는 사용자는 당연히 설정을 다시해줘야 합니다. 방문해주셔서 감사합니다.

  21. win7 버전이 엔트프라이즈 이상이라야 하나요 says:

    blog.naver.com/…/110087724783

    위 블러그에서 보면 엔트프라이즈 얼티밋 버전에서 vhd를 사용할 수 있다고 하는데 여기서는 그런 설명이 없어서요

Skip to main content