Hyper-V vs Hypervisor Platform vs Virtualbox

발단

현재 사용하는 데스크탑은 Ryzen CPU를 사용하고 있습니다. 인텔 CPU의 보안 이슈도 있었고 2등도 도와주자 라는 생각도 있고 무엇보다 착한 가격 때문에 AMD를 선택했습니다.
안드로이드 개발을 위해 안드로이드 스튜디오를 설치하고 에뮬레이터를 실행했습니다. ..에러가 납니다. 겁나 검색해보니 전에는 Genymotion 등 다른 안드로이드 에뮬레이터를 사용해야 했었고, 안드로이드 스튜디오의 2018년 여름 업데이트 이후 라이젠도 에뮬레이터를 사용할 수 있게 되었습니다.

안내된 방법대로 Hypervisor Platform을 사용하도록 설정 하니 잘 됩니다. 그런데…이번에는 VirtualBox가 안됩니다. 또 찾아보니 VirtualBox 는 Hypervisor Platform 을 꺼야 된다고 합니다. OS에 영향을 미치는 변경이라 재부팅을 해야 하는데…..슬슬 빡치기 시작합니다.

VirtualBox fails

윈도의 가상화 지원

윈도 운영체제에서 사용할 수 있는 가상화 솔루션들은 여러가지가 있습니다.

  • Hyper-V : MS가 제공하는 Baremetal 가상화 입니다. 가상머신을 만들고 사용할 수 있게 해줍니다.
    Hyper-V Manager
  • Hypervisor Platform : MS에서 제공하는 가상화 지원 API이 것 같습니다. 이건 사용자가 직접 사용하기 보다는 가상화 관련된 라이브러리 성격인 것 같습니다.
  • VirtualBox : 많이 사용되는 SW 가상화 솔루션 입니다. 윈도/맥/리눅스 등에서 사용할 수 있고 게스트 OS도 상당히 많습니다.

세 가지 솔루션은 서로 충돌하는 관계가 있습니다. 이걸 정리하면.

활성화 H-V 매니저 안드이드 에뮬레이터 버추얼박스
Hyper-V O X X
Hypervisor Platform X O X
Off X X O
Windows Virtualization Options

이런 옵션들은 Windows 기능 에서 제어하거나 PowerShell에서 명령어로 끄고 켤 수 있습니다.

결론은

  • 안드로이드 개발을 하려면 Hyper-V를 끄고 Hypervisor Platform 은 켠다. 그리고 재부팅.
  • 버추얼 박스를 쓰려면 Hyper-V와 Hypervisor Platform을 끈다. 그리고 재부팅.
  • Hyper-V를 쓰려면 Hyper-V는 켜고 Hypervisor Platform은 끈다. 인텔 CPU에서는 둘다 켤수 있다고 한다.

개인적으로 VirtualBox를 오랫동안 사용해왔고 익숙한 편입니다. Hyper-V로 갈아타자니 지원하는 가상 머신도 적은 것 같고 좀 그렇네요. 이런 가상화는 Docker 컨테이너와도 관련이 있어서 VirtualBox를 이용하는 Docker Toolbox와 Hyper-V를 이용하는 보다 최신의 Docker Desktop이 있습니다.

이 문제가 해결 가능한 것인지 모르겠습니다. 찾아보니 VirtualBox와 Hyper-V는 공생 불가인 것 같습니다. 인텔 CPU를 사용하면 좀 덜 불편해질 것 같기는 합니다. 윈도에서 안드로이드 개발과 가상화가 모두 필요하신 분들은 인텔 CPU를 선택하시는게 나을 것 같습니다.

내용 추가(2019-03-14) Hyper-V 와 VirtualBox 설정을 편리하게 전환

리부팅이 필요하긴 하지만 설정을 저장해서 좀 더 편하게 두 가지 환경을 전환할 수 있습니다.

C:\Windows\system32>bcdedit /set {current} description “Windows 10 VirtualBox”
작업을 완료했습니다.

C:\Windows\system32>bcdedit /copy {current} /d “Windows 10 Hyper-V”
항목을 {9a73dfd8-10ac-11e9-8a53-ecc1872db92a}에 성공적으로 복사했습니다.

C:\Windows\system32>bcdedit /set {9a73dfd8-10ac-11e9-8a53-ecc1872db92a} hypervisorlaunchtype auto
작업을 완료했습니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다