Computer >> 컴퓨터 >  >> 소프트웨어 >> 가상 머신

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

본격적으로 시작하기 전에 한 가지 경고를 드리겠습니다. 하드웨어 가상화를 지원하지 않는 환경에서 Xen을 사용하려고 하면 온갖 문제에 부딪히게 됩니다. 다시 말해, 가상화 확장 기능(VT-x/AMD-V)을 지원하는 최신 CPU가 없다면 Xen 사용 자체를 재고해야 한다는 뜻입니다. VirtualBox나 VMware Player 같은 개인용 가상화 솔루션과는 비교도 되지 않을 만큼 까다로운데, 사실 Xen은 애초에 완전히 다른 시장과 용도를 겨냥한 솔루션이기 때문입니다.

하지만 저처럼 고집이 세서 튜토리얼 하나로 세상을 정복하고 싶으신 분들이라면, 어차피 직접 시도해 보고 싶으실 겁니다. 그리고 아마 실패하실 겁니다. 가장 큰 걸림돌은 게스트 OS가 CD나 CD 이미지로 부팅되지 않아 설치조차 시작할 수 없다는 점이고, 반가상화 네트워킹 설정 역시 결코 만만치 않습니다. 오늘은 이 과정을 조금이라도 단순하게 만들어 보려고 합니다. 물론 '시도'한다는 데 강조점을 두겠습니다.

이 글에서는 어떤 문제에 직면하게 되는지, 그 증상은 무엇인지, 가능하다면 어떻게 우회할 수 있는지, 반가상화 커널과 initrd 파일을 다루는 방법, 그리고 게스트용 브리지 네트워크 어댑터 구성 방법까지 알아보겠습니다. 모든 내용이 불확실성 속에 감싸여 있음을 미리 밝혀둡니다. 함께 따라와 주세요.

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

반가상화가 번거로운 이유

먼저 공식적인 설명부터 살펴보겠습니다.

반가상화(Paravirtualization)는 Xen이 처음 도입하고 이후 다른 가상화 솔루션들도 채택한 효율적이고 가벼운 가상화 기술이다. 반가상화는 호스트 CPU의 가상화 확장 기능을 필요로 하지 않는다. 대신, 반가상화된 게스트는 하이퍼바이저를 인식하고 에뮬레이션이나 가상 에뮬레이트 하드웨어 없이도 효율적으로 실행될 수 있도록, Xen에서 기본 동작하도록 포팅된 특수 커널을 필요로 한다.

여기서 핵심은 바로 게스트가 특수 커널을 필요로 한다는 부분입니다. 이것이 무엇인지, 어떻게 구하는지 모른다면 환경을 구축하기 위해 상당한 노력을 들여야 합니다. 특히 라이브 CD 이미지로 부팅하려 할 때 문제가 발생하는데, 이는 시스템 설치의 첫 단계이기 때문에 치명적입니다.

CD 또는 ISO 이미지로 부팅하기

문제는 새로운 가상 머신을 설정하려는 순간 시작됩니다. 수없이 해왔던 것처럼 게스트가 먼저 CD로 부팅되기를 원할 것입니다.

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

그런데 ISO 이미지를 사용하더라도 다음과 같은 지저분한 오류를 만나게 됩니다.

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

인터넷을 검색하면 이것이 가능한지 불가능한지에 대한 수많은 방법을 찾을 수 있습니다. 하지만 어느 것도 한 줄짜리 간단한 명령으로 해결되거나 플러그 앤 플레이 방식으로 작동하지 않습니다. 가장 흔한 해결책은 이미지를 추출하여 HTTP 서버에 업로드하거나, 이미지를 루프백 디바이스로 마운트하는 방식 정도입니다.

참고로, 아래 '추가 자료' 섹션도 꼭 확인해 보시기 바랍니다. 참고 자료에는 위 테스트에서 사용한 Ubuntu가 별도의 추가 작업과 수정 없이는 반가상화 게스트로 제대로 부팅되지 않는 이유가 설명되어 있습니다.

그렇다면 어떻게 해야 할까?

우선, 당장 아무것도 하지 마세요. 제안되는 몇 가지 방법 중 쉽게 구현할 수 있는 것은 거의 없으며, 실제로 제대로 작동하지도 않습니다. 해야 할 일은 오류 메시지를 분석하는 것입니다. '세부 정보(Details)'를 클릭하고 최선을 다해 읽어보세요. 설명이 유용할 수도 있습니다.

모든 경우를 일일이 설명하지는 않겠지만, 반가상화의 문제는 크게 두 가지 핵심 이슈로 요약됩니다. 첫째, 게스트 시스템을 부팅하려면 올바른 커널과 initrd가 필요합니다. 둘째, 반가상화 네트워크 인터페이스가 까다롭습니다. 이 두 가지가 결합되면 CD/DVD 부팅 자체가 막히게 됩니다.

커널 및 initrd 이미지

완전 가상화(Full Virtualization)에서는 비교적 간단합니다. 가상 머신 구성 파일에서 builder, kernel, boot 지시문을 적절히 지정하기만 하면 됩니다. hvmloader 커널은 항상 사용 가능하므로 문제될 것이 없습니다.

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

그러나 반가상화 게스트에는 이런 커널이나 initrd가 기본 제공되지 않습니다. 따라서 약간의 편법이 필요합니다. GUI 마법사로 가상 머신을 생성한 후 실행하려 하면 CD-ROM 오류가 발생하지만, 구성 파일은 디스크에 기록되어 있습니다.

/etc/xen/vm 디렉터리로 이동하여 해당 파일을 텍스트 편집기로 열어보세요. kernel과 initrd 줄이 /tmp 아래의 임시 커널 및 initrd 이미지를 가리키고 있음을 확인할 수 있습니다. 이 두 항목을 영구적인 Xen 커널 및 initrd 파일로 변경할 수도 있지만, 해당 파일들을 별도로 내려받거나 직접 빌드해야 할 수 있어 번거롭습니다. 또한 CD 이미지 내부를 살펴보고 xen 관련 파일을 찾아 복사한 뒤 게스트 부팅에 활용하는 방법도 있습니다. 예시는 다음과 같습니다.

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

bootloader 지시문에 적절한 인자를 넣어 사용하는 방법도 있지만, 이 역시 가상 머신마다 서로 다른 설정이 필요해 지루한 과정입니다. 그래도 대부분의 Linux 게스트에서는 아래 설정이 작동할 수 있습니다. 물론 큰 따옴표 붙은 '어쩌면'이 붙습니다.

bootloader = '/usr/lib/xen/boot/domUloader.py'
bootentry = '--entry-=xvda1:/boot/vmlinuz-xen,/boot/initrd-xen'

물론 xvda1 부분은 여러분의 환경에서 실제 사용하는 가상 디바이스 이름으로 조정해야 합니다. 이것은 지저분한 편법이며 반드시 작동한다는 보장은 없습니다.

반가상화 네트워크 인터페이스

또 다른 장애물은 vif 지시문입니다. Xen 반가상화 게스트는 여러분의 네트워크 설정을 달가워하지 않을 수 있습니다. 그 이유는 네트워크 어댑터를 브리징하지 않으면 직접 사용할 수 없기 때문입니다. eth0이나 wlan0 같은 디바이스는 사용할 수 없으며, xenbr0이나 br0 등을 사용해야 합니다. 명령줄에서 가상 머신을 시작하려고 하면 오류 메시지가 시원하게 나타날 것입니다.

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

임시 방편으로 해당 지시문을 삭제하거나 주석 처리하면 가상 머신이 부팅될 수 있습니다. 다시 말하지만, 대부분의 튜토리얼처럼 확실한 '예스'가 아니라 여기서는 답답한 '어쩌면'을 다루고 있습니다. 구성 파일에 있는 vif를 비롯한 관련 지시문을 주석 처리해 보세요.

#vif=['']

그리고 나면, 마법 같은 콘솔 화면이:

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

그리고 언젠가는 네트워크 문제와 반드시 마주하게 됩니다.

일반적으로 네트워크 없이도 넘어갈 수는 있지만, 게스트에 연결이 필요한 이상 거의 쓸모가 없습니다. 따라서 어댑터를 브리징해야 합니다. 일부 네트워크 인터페이스는 브리징을 지원하지 않을 수 있으니 이 점도 고려하세요.

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

Xen 반가상화(Paravirtualization) 완벽 이해: 핵심 문제점과 해결 방법

역시 이것이 도움이 될 수도, 안 될 수도 있습니다. 사실상 보장이 없습니다. 예를 들어 운이 나쁘면 '이제 그만두는 게 좋겠다'고 말해주는 듯한 메시지를 보게 될 수도 있습니다. 아니면 brctl 유틸리티를 사용해 수동으로 브리지를 생성해 볼 수도 있습니다.

지금까지의 정리

내용이 다소 혼란스러울 수 있으니 지금까지 살펴본 것을 정리해 보겠습니다. 핵심 이슈는 두 가지입니다. 하나는 게스트용 부트로더/커널이고, 다른 하나는 네트워크 인터페이스입니다. 반가상화 모드로 실행되는 Xen은 게스트가 사용할 올바른 커널과 initrd 파일이 디스크 어딘가에 위치해야 하며, 브리지된 네트워크 어댑터도 필요로 합니다.

첫 번째 문제는 가상 머신 마법사가 하드디스크에 임시 항목을 생성하도록 하는 방식으로 해결할 수 있지만, 이는 일부 종류의 게스트 운영체제에서만 작동합니다. 예를 들어 RedHat 6 기반인 Scientific Linux 6은 이런 방식을 명시적으로 지원하므로 운이 좋은 경우입니다. 자세한 내용은 아래를 참고하세요. 또는 적절한 Xen 커널과 initrd를 하드디스크의 적절한 위치에 수동으로 배치하는 방법도 있습니다. 최후의 수단으로 bootloader를 직접 사용하는 방법도 있으며, 이 경우에도 올바른 파일이 필요합니다.

두 번째 문제는 추가 단계가 필요합니다. 네트워크 브리지를 구성해야 합니다. 유선 및 무선 어댑터 모두 브리징할 수 있지만, 일부 하드웨어는 이를 지원하지 않을 수 있습니다.

그럼에도 불구하고 작동하지 않을 수 있습니다. 아마 작동하지 않을 겁니다. 결론적으로, Xen 반가상화는 골칫거리이므로 가급적 피하는 것이 좋습니다. 이런 방식으로 가상 머신을 구동하는 어려움을 다른 어떤 대안과 비교해 보면 답은 명백합니다.

추가 자료

이 가이드를 읽고도 용기를 잃지 않으셨다면, CD-ROM으로 게스트를 부팅하는 가능한 해결책을 다룬 몇 가지 글을 더 읽어볼 수 있습니다. 아니, 정확히는 왜 작동하지 않는지, 그리고 왜 애쓰지 말아야 하는지를 보여주는 글들입니다.

Xen domU 지원 - Ubuntu나 Fedora 같은 인기 배포판은 아직 안 됩니다.

SLES 반가상화 domU를 구조 시스템(rescue system)으로 부팅하는 방법

결론

Xen을 반가상화 모드로 사용하는 것은 유쾌한 작업이 아닙니다. 게스트 시스템의 para-domU 지원 수준에 따라 운이 좋으면 CD나 ISO 이미지로 부팅할 수도 있습니다. 하지만 브리지 네트워킹도 필요하며, 특히 무선 어댑터에서는 항상 작동한다고 보장할 수 없습니다.

게다가 게스트 시스템에 맞는 Xen 커널과 initrd 파일을 찾아 헤매야 할 수도 있고, 심지어 직접 커스텀 버전을 컴파일해야 할 수도 있습니다. 이런 작업은 기술력, 인내심, 관리 부담 면에서 대부분의 사람들에게 과한 수준이며, 다른 가상화 솔루션들은 땀 한 방 흘리지 않고 같은 기능을 제공한다는 점을 생각하면 더욱 그렇습니다.

이 가이드가 안개를 조금이라도 걷어주었기를 바랍니다. 웹 서버든, 루프백 디바이스든, 물리 드라이브든 결과는 같습니다. 특수한 커널과 initrd 이미지, 그리고 브리지 네트워킹이 필요합니다. domU 반가상화를 지원하는 게스트를 가지고 있다면 운이 좋은 것이고, 그렇지 않다면 많은 고생이 예상됩니다. 제 진심 어린 조언은 이렇습니다. 가능하면 피하고, 대안 솔루션을 선택하세요. 다만, 완전 하드웨어 가상화 모드에서의 Xen은 꽤 훌륭합니다.

그럼, 즐거운 가상화 되세요.