최근 필자가 사용하던 시스템 중 하나에서 VirtualBox가 갑자기 작동하지 않는 문제가 발생했습니다. 어떤 가상 머신을 실행하려고 해도 항상 같은 오류가 나타났는데, 팝업 창에는 "Failed to open a session for the virtual machine [가상 머신 이름]"이라는 메시지가 표시되고, 세부 정보 상자에는 NS_ERROR_FAILURE (0x80004005)라고 나타났습니다.
메시지가 너무 추상적이고 암호처럼 생겨서 무엇이 문제인지 바로 파악하기 어려웠습니다. 그래서 여러 시행착오 끝에 문제를 해결했고, 그 과정을 정리한 것이 바로 이 가이드입니다. 물론 이 방법이 동일한 오류 코드로 인해 발생하는 모든 문제를 해결해 주지는 않겠지만, 자신의 시스템에서 무엇이 잘못되었는지 파악하는 데 충분한 단서를 얻을 수 있을 것입니다.

문제의 구체적인 원인 분석
팝업 메시지만으로는 정보가 부족했기 때문에 시스템 로그를 확인했습니다. 그 결과 훨씬 유용한 단서를 발견할 수 있었습니다. 바로 VirtualBox의 VMSVGA 그래픽 드라이버가 크래시(crash)를 일으켰고, 오류가 libX11 공유 라이브러리를 가리키고 있었다는 점입니다.
Feb 3 12:21:09 kernel: [] VMSVGA FIFO[11413]: segfault at f8 ip 00007fcf4df5ada4 sp 00007fced9329c40 error 4 in libX11.so.6.3.0[7fcf4df40000+133000]
이 시점에서 VirtualBox 설치 환경 자체에 문제가 생겼다고 판단하고, 단계별로 체계적으로 점검하기 시작했습니다. 먼저 vboxconfig 명령으로 VirtualBox 커널 모듈을 재빌드했습니다. 이 과정은 서비스도 함께 재시작해 줍니다.
sudo vboxconfig
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
하지만 이 작업만으로는 문제가 즉시 해결되지 않았습니다. 조금 더 생각해 본 결과, vboxconfig 설정 과정에서 다루어지지 않는 다른 구성 요소가 범인일 수 있다는 결론에 도달했습니다. 그렇다면 VirtualBox 확장 팩(Extension Pack)은 어떨까요?
문제가 발생한 시스템에 설치된 항목들을 살펴본 결과, VirtualBox 본체와 확장 팩의 버전이 서로 달랐습니다. 버전 불일치는 예기치 못한 동작을 유발할 수 있는데, 실제로 제 시스템에서 그런 현상이 나타난 것으로 보입니다. 특히 리눅스에서는 이 문제가 더 심각해집니다. VirtualBox는 실행 시 확장 팩 업데이트를 확인하고 설치를 허용하는 반면, 본체 프로그램은 시스템 업데이트에 의존하기 때문입니다. 만약 '시스템 먼저, 확장 팩 나중'이라는 순서대로 업데이트가 진행되지 않으면, 위 사례처럼 가상 머신이 아예 실행되지 않는 상황에 빠질 수 있습니다.


해결 방법
해결책은 문제가 되는 확장 팩을 제거한 후, VirtualBox 본체와 버전이 일치하는 확장 팩을 새로 설치하는 것입니다(반대로 본체를 업그레이드하는 방법도 가능합니다). 어느 쪽이든 두 버전이 반드시 일치해야 합니다. 필자는 File > Preferences > Extensions 메뉴로 이동해 Remove 버튼을 클릭했습니다. 그런데 이번에는 확장 팩을 삭제하려는 순간 앞서와 동일한 오류가 또 발생했습니다!
명령줄을 통한 정리
이 두 번째 문제의 해결책은 터미널 창에서 정리(cleanup) 작업을 수행하는 것입니다. 이 명령으로 확장 팩을 설치하거나 제거할 수 있으며, 심지어 강제 제거도 가능합니다.
VBoxManage extpack cleanup
Successfully performed extension pack cleanup
이후 GUI로 돌아가니 이제 확장 팩이 정상적으로 제거되었습니다. 그다음 본체 프로그램과 버전이 일치하는 새 확장 팩을 내려받아 설치했습니다.

그리고 이제 가상 머신들이 예전처럼 정상적으로 작동합니다!
마무리
사실 이번 문제는 어느 면에서 보면 필자 스스로 빚은 결과이기도 합니다. 하지만 이런 문제를 미연에 방지할 수 있는 개선점들도 분명 존재합니다. 예를 들어 호환되지 않는 확장 팩의 설치 자체를 차단한다거나, 여러 버전을 함께 보관해 두었다가 기본 버전에 문제가 생기면 대체 버전을 사용하게 한다거나, 더 상세한 오류 메시지를 제공하거나, 본체 프로그램과 마찬가지로 확장 팩도 VirtualBox 리눅스 저장소를 통해 배포하는 방안 등이 있습니다.
비슷한 문제를 겪고 있다면 한 가지 유의할 점이 있습니다. 이 오류 코드는 매우 광범위한 원인을 포괄할 가능성이 높기 때문에, 오류 메시지만 보고 VirtualBox 문제의 근본 원인을 단정하기란 쉽지 않습니다. 실제로 출발점은 같지만 해결책과 결과가 완전히 다른 수많은 버그 리포트나 포럼 글을 읽게 될 수도 있습니다. 필자의 사례도 예외는 아니었지만, 시스템 로그 정보를 꼼꼼히 따라가며 초점을 좁혀 나갔기 때문에 진짜 범인을 찾아낼 수 있었습니다. 오늘은 여기까지 하겠습니다. 감사합니다.