가상 기계는 Virtualbox 또는 VMware를 많이 이용하게 되는데, 이런 상용 툴들은 보다 일찍 더 나은 기능을 제공했고 사람들에게 많이 알려져 있기 때문입니다.
한편 리눅스 커널에서 가상화를 지원하고 있으며, 이것의 성능이 VirtualBox보다 더 나은 결과를 보인다는 기사가 있습니다.
데비안 bullseye에서 다음 패키지가 필요합니다:
- sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon
만약, 좀 더 최근의 패키지를 원하면, 아래와 같이 개별적으로 패키지를 backports에서 설치할 수 있습니다:
- sudo apt install qemu-kvm/bullseye-backports
없는 패키지는 무시하셔도 됩니다.
설치에서, 운영 시스템의 정보가 부족할 수 있는데, 예를 들어, 데비안은 10 버전까지 존재하고, 1년이 넘은 11 버전은 목록에 보이지 않습니다. 이 목록은 osinfo-db에서 제공하며, 시드 버전 osinfo-db를 설치하면 더 많은 목록을 보실 수 있습니다.
게스트 설치는 많이 자동화가 이루어져서, 게스트에 따라 Virtualbox 또는 VMware보다 더 적은 단계로 설치될 수도 있습니다.
이 툴을 사용하지 않았던 이유는 그래픽 성능이 상대적으로 떨어졌기 때문입니다. 당시에는 Nvidia 그래픽 카드를 사용하고, 독점 드라이버를 사용했습니다.
하지만, 새롭게 AMD 그래픽 카드로 바꾸고 나서, qemu/kvm이 리눅스 게스트에서 virtualbox, vmware에 비해 더 나은 성능을 보여줍니다. 이전 그래픽 카드와 다르게, AMD 그래픽 카드는 오픈-소스 드라이버를 사용했습니다.
어쨌든, 시간 차이가 1년 이상이 나기 때문에, 그 기간에 패치가 이루어졌는지 확인은 해보지 않았습니다. 또는 아마도, 당시 시간을 많이 할애하지 못해서, 그래픽 성능을 제대로 처리하도록 설정을 하지 못했을 수도 있습니다.
확실한 것은 두 상용 제품보다 더 나은 성능을 보인다는 사실이고, 예전에 비해, 처음 적응하는 시간도 훨씬 단축되어, 비록 Virtualbox가 개인 사용자에게 무료라고 할지라도, 두 상용 제품을 사용할 이유가 전혀 없어졌습니다.
Usage
리눅스 호스트는 부팅하는데, 25~30초 정도가 걸려서 암호를 입력하고 그놈 데스크탑을 사용할 수 있는 상황에 놓입니다. 반면에, 게스트로 같은 리눅스는 대체로 7초 내외로 데스크탑을 사용할 수 있는 상황에 놓입니다.
한편, 윈도우 10은 10초 내외로 시스템을 사용할 수 있는 상황에 놓입니다. 하지만, UEFI 펌웨어를 사용하면, 5~6초 정도 추가 시간이 필요합니다.
2D 그래픽 성능은 나쁘지 않아서, 사용함에 불편함을 느낄 수 없습니다. 그러나, 게임을 위해, 윈도우 가상 기계에서 더 나은 그래픽 성능이 필요할 때에는 gpu passthrough를 사용할 수 있습니다.
보통, passthrough는 2개의 그래픽 카드가 필요하지만, 1개의 그래픽 카드로 호스트와 게스트를 번갈아 가면서 사용할 수 있는 방법이 소개되어 있습니다.
Display devices
여기의 정보에 따라, 데스크탑 리눅스를 게스트로 사용할 경우에, Video->Virtio를 사용하는 것을 추천하고, 윈도우는 QXL을 사용하는 것을 추천하지만, 리눅스에서도 QXL에서 좀 더 부드러운 느낌이 있습니다. 이상하게도, 현재 시드에서 QXL은 처음 로그인에서 튕기는 현상이 있지만, Virtio에서는 그런 현상이 없습니다.
문제는 설치 시에 Virtio를 사용하면, 가상 터미널에서 키보드 출력에 문제가 생길 수 있습니다. 설치 후에, 바꾸는 것이 좋겠습니다.
Resize qcomw2 images
Expanding images
게스트 OS를 중지합니다:
- cd /var/lib/libvirt/images
- sudo qemu-img resize image.qcow2 +10G
10G를 늘립니다.
이제 GParted 라이브 이미지를 사용하여 부팅을 해야 합니다.
먼저, Virtual Machine Manager에서 해당 게스트를 Open을 눌러서 엽니다.
그런-다음 View->Details를 누릅니다.
그런-다음 Add Hardware를 눌러서 다음으로 바꾸고 Finish를 누릅니다:
- Device type: CDROM devie
- Bus type: SATA
그런-다음 SATA CDROM1을 눌러서,
- Source path: gparted-live-1.3.1-1-amd64.iso를 시스템에서 찾아서 연결하고 Apply를 누릅니다.
그런-다음 Boot Options에서 VirtIO Disk1을 선택 해제하고 SATA CDROM1을 선택하고 Apply를 누릅니다.
그런-다음 View->Console로 바꾸고, Virtual Machine->Run을 누릅니다.
부팅 후에, GParted를 보면, 마지막에 unallocated가 아주 적은 양이 있고, 새롭게 늘린 10G unallocated 부분이 보일 것입니다.
앞의 작은 unallocated를 지우면, 10G와 합해져서 하나의 unallocated 부분이 만들어집니다.
이제, 늘리고 싶은 파티션을 클릭하고, Partition->Resize/Move를 선택하고, 남은 양을 앞으로 합칩니다.
그런-다음 Apply를 눌러서 적용하면, 파티션이 늘어납니다.
이제, 이전의 부팅을 hd로 바꾸고 서비스를 재시작하고, 게스트로 로그인한 후에, 파티션이 늘어났는지 확인합니다.
Shrinking images
만들어진 이미지가 너무 커서 줄이고 싶으면, 우선 실제 사용량보다 적당히 더 큰 크기의 이미지를 만듭니다.
- cd /var/lib/libvirt/images
- sudo qemu-img create -f qcow2 -o preallocation=metadata newimage.qcow2 40G
- sudo apt install libguestfs-tools
- sudo virt-resize oldimage.qcow2 newimage.qcow2
이때, oldimage의 실제 사용량이 newimage보다 크면, 제대로 수행되지 않을 것으로 예상됩니다.
이제 이름을 바꾸어서 제대로 부팅이 되는지 확인을 해야 합니다:
- sudo mv oldimage.qcow2 oldimage.qcow2.dist
- sudo mv newimage.qcow2 oldimage.qcow2
- sudo systemctl restart libvirtd
이제 File->Add Connection...을 누르고, oldimage의 게스트를 선택하고, 부팅을 합니다.
그런-다음 크기가 작아졌는지 확인을 합니다. 정상적이라면, oldimage.qcow2.dist을 삭제합니다.
Share folder
Linux host linux guest
다음 과정을 통해 호스트의 디렉토리를 공유할 수 있습니다. 먼저, Virtual Machine Manager에서 해당 게스트의 속성을 추가합니다:
- View->Details
- Add Hardware
- FileSystem (Memory에서 Enable shared memory를 활성화하십시오)
- Driver: virtiofs (또는 virtio-9p)
- 이것을 위해 마운트하려는 디렉토리의 직전 상위 디렉토리를 새롭게 pool로 만들어야 합니다:
- Locate directory volume가 올라오면,
- +버튼을 누르고,
- Name: hostfiles
- Type: dir:Filesystem Directory
- Target Path: 호스트 디렉토리
- Source path: 직전에서 만든 호스트 디렉토리의 하위 디렉토리
- Target path: /hostshare
- Driver: virtiofs (또는 virtio-9p)
- guest linux booting
- mkdir ~/hostfiles
- sudo mount -t virtiofs /hostshare ~/hostfiles
또는
- sudo mount -t 9p -o trans=virtio /hostshare ~/hostfiles
선택한 호스트 디렉토리가 ~/hostfiles에 마운트됩니다.
필요하다면 간단히 마운트하도록 /etc/fstab에 다음을 추가할 수 있습니다:
/hostshare /home/user_id/hostfiles virtiofs defaults 0 0
또는
/hostshare /home/user_id/hostfiles 9p trans=virtio,version=9p2000.L,ro 0 0
이런 식이면, 아래와 같이 간단히 마운트할 수 있습니다:
- sudo mount hostfiles
Linux host windows guest
Samba를 이용할 수 있습니다.
USB device
USB 저장 장치를 자동으로 꽂아도 자동으로 검색하지는 않습니다. 대신, 매핑을 수동으로 수행할 수 있습니다.
게스트로 부팅한 후에, Virtual Machine -> Redirect USB device를 선택하면, 원하는 장치를 볼 수 있습니다.
Images directory edit
기본값으로 주어지는 이미지 디렉토리, /var/lib/libvirt/images를 다른 곳으로 바꿀 수 있습니다. 이렇게 하면, 새로운 게스트는 해당 디렉토리 아래에 설치될 것입니다.
- virsh pool-destroy default
- virsh pool-edit default
여기서 <path></path> 사이에 디렉토리를 적어줄 수 있습니다.
- virsh pool-start default
한편, 기존의 이미지는 다른 곳으로 옮겨서, 설정에서 위치를 바꿀 수 있습니다.
- virt-manager에서 기존의 게스트를 Open 누릅니다.
- 게스트 창에서 View->Details를 누릅니다.
- VirtIO Disk 1을 선택하고, 오른쪽 창의 메뉴에서 XML을 누릅니다.
- <sorce file="directory_path">
대안 루트 파티션이 새롭게 포맷될 경우를 대비해서, 위의 과정을 수행하지 않고, 이미지를 다른 곳으로 옮긴 후, 직전의 방법으로 이미지를 직접 지정해 줄 수 있습니다.
Linux guest 3d support
Video Model: Virtio, 3D acceleration 체크 Display Spice Listen type: None, OpenGL 체크 후 아래 박스: Auto 확인 리눅스 부팅 후에,
- sudo apt install nux-tools
- /usr/lib/nux/unity_support_test -p
이 부분은 다른 가상 기계보다 성능 면에서 떨어지고, 게다가, 2d 성능도 함께 감소하기 때문에 추천할만 하지 않습니다.
Troubleshootings
copy and paste 게스트에서 다음을 설치해야 합니다:
- sudo apt install spice-vdagent
change virtual name 가상의 버전 업데이트 후에, 이름을 맞출 필요가 있습니다.
- 먼저, 해당 가상 기계를 열고, View->Details에서 왼쪽 메뉴에서 Overview에서 이름을 바꿉니다.
- 그런-다음 이미지의 이름을 바꿀 필요가 있는데, VirtIO Disk 1에서 XML을 눌러서 이름을 바꿉니다.
- 호스트 시스템에서 이전 과정에서 바꾼 이름과 같게 바꿉니다. 이때, xml 파일을 수정하기 위해, Virtual Machine Manager에서, Edit->Preferences를 누르고, General에서 Enable XML editing을 선택합니다.
booting cd-rom /etc/libvirt/qemu/guest_name.xml 파일에서 수정합니다: <boot dev='cdrom'/>
- sudo systemctl restart libvirtd
위의 방법보다는 View->Details에서 Boot device order를 바꿀 수 있습니다. internal error End of file from qemu monitor : 패치를 해서 패키지를 시도합니다. 패치 정보를 확인하십시오.