4 min read

Hyper-V와 VBox

개발을 하다 보면 가상 머신을 써야 할 때가 자주 생긴다. 이럴 때 Type-2 하이퍼바이저(가상화 소프트웨어)를 자주 사용한다. VirtualBox나 VMware가 대표적이고, 이런 툴에서 개발 환경을 관리할 수 있도록 Vagrant 도 자주 사용한다.

몇 달간 잘 쓰던 VirtualBox가 갑자기 작동을 안 한다. 우분투 ISO를 넣고 전원을 켜면 파일 검사를 완료한 뒤 얼어버린다. 뭐가 문제냐 하고 Safe mode로 부팅해 보니 커널 패닉이 뜬다. 알아볼 수 있는 메시지는 딱 한 줄 뿐...

kernel panic not syncing fatal exception

이래저래 검색해 본 결과, VirtualBox NEM (Native Execution Manager)을 사용하면 문제가 생긴댄다. 이걸 구분하는 방법은 가상 머신 창 아래쪽을 보면 된다. 아래 그림처럼 V자 모양을 등에 단 거북이 모양이 보인다면 NEM을 사용하는 상태이다.

VM running on NEM

Native Execution 이라고 되어 있지만 사실 NEM은 VBox에서 제공하는 가상화 엔진이 아니다. OS에서 제공하는 네이티브 엔진이며 윈도우에서는 Hyper-V가 이에 해당한다.

그럼 왜 VBox 자체 엔진 냅두고 NEM으로 실행될까? 찾아보니 WSL2가 Hyper-V를 이용하기 때문에 문제가 된다고 한다. WSL2 커널을 실행시키기 위해 Hyper-V가 Type-1 하이퍼바이저로 작동하여, 윈도우 커널부터 가상 머신 위에서 돌린다는 모양이다. Hyper-V가 중첩 가상화를 지원하는지는 모르겠지만, 여하튼 이미 Hyper-V가 가상화 기능을 점유한 상태이기 때문에 VBox나 VMware의 자체 가상화 엔진을 사용할 수 없다.

이 문제를 해결할 수 있도록, WHP (Windows Hypervisor Platform)를 지원한다고 한다. 이를 이용하면 서드파티 소프트웨어 에서도 Hyper-V 엔진으로 가상 머신을 작동시킬 수 있다는 것이고, 이게 VBox에서는 NEM이라는 이름으로 구현된 것이다. 참고로 VMware와 Docker Windows도 WHP를 이용하여 Hyper-V 엔진으로 가상 머신을 작동시킬 수 있다.

그러고 보니 회사 컴퓨터를 세팅할 때부터 WSL2를 깔아 두었고, VBox에서는 계속 거북이 아이콘만 봐 왔던 것 같다. 여하튼 NEM을 사용하는 경우, 안정성이 영 구린 것인지 잘 쓰던 가상 머신이 어느 날 갑자기 커널 패닉을 일으킬 수 있다고 한다. 게스트 OS로 윈도우를 써도 원인모를 프리징이 발생한다니 뭐... 별 수 있나.

그럼 어떻게 해야 VBox 엔진을 다시 사용할 수 있을까? 결론부터 말하자면 Hyper-V 를 끄면 된다. 그렇게 하면 VBox가 CPU 가상화 기능을 사용할 수 있게 되어, NEM을 사용할 필요가 없어진다. 거북이 아이콘도 CPU 가상화를 뜻하는 V 아이콘으로 돌아온다.

VM running on VT-x/AMD-V
  1. 설정 - 앱 및 기능 메뉴에 들어가서 우선 설치되어 있는 WSL 리눅스 배포판을 모두 삭제한다.
  2. 위 메뉴에서 선택적 기능 - 기타 Windows 기능을 선택한다. 또는 실행 메뉴에서 OptionalFeatures.exe 을 실행해도 된다.
  3. 다음 항목에 있는 체크박스를 모두 해제한다.
    - Hyper-V
    - Linux용 Windows 하위 시스템
    - 가상 머신 플랫폼
  4. 확인을 누르면 윈도우에서 Hyper-V 관련 기능이 모두 삭제된다. 삭제 과정이 완료되면 재부팅한다.

다만 이렇게 하면, WHP에 의존하는 WSL2나 Docker Windows는 사용할 수 없게 된다. VMware야 자체 엔진이 있으니 상관없지만.