Hướng dẫn cài đặt KVM/QEMU và Virt-Manager trên Ubuntu: Ảo hóa chuẩn Type-1 hiệu năng cao

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

Nếu bạn chán cảnh VirtualBox ngốn RAM, giật lag hay văng lỗi kernel module mỗi khi Ubuntu cập nhật nhân Linux, hãy chuyển sang KVM/QEMU. KVM biến thẳng nhân Linux thành hypervisor bare-metal (Type-1). Nhờ đó, hiệu năng CPU và I/O đĩa của máy ảo đạt gần 95-98% so với máy vật lý.

Khởi động nhanh: Dựng máy ảo KVM với Virt-Manager trong 5 phút

Trước hết, kiểm tra xem CPU của bạn có hỗ trợ ảo hóa phần cứng (Intel VT-x hoặc AMD-V) hay không:

egrep -c '(vmx|svm)' /proc/cpuinfo

Nếu kết quả trả về từ 1 trở lên (thường là 4, 8, 16 ứng với số luồng CPU), máy đã sẵn sàng. Trường hợp số trả về là 0, bạn cần vào BIOS/UEFI bật Intel Virtualization Technology (VT-x) hoặc AMD SVM/SVM Mode.

Tiến hành cài bộ công cụ KVM, QEMU, libvirt và giao diện Virt-Manager:

sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

Thêm user hiện tại vào nhóm libvirt và kvm để thao tác không cần quyền root:

sudo usermod -aG libvirt,kvm $USER
newgrp libvirt

Kích hoạt service libvirtd để chạy ngầm cùng hệ thống:

sudo systemctl enable --now libvirtd

Gõ virt-manager trên terminal hoặc mở ứng dụng Virtual Machine Manager. Bấm biểu tượng máy tính góc trên bên trái để tạo VM mới. Chọn file ISO cài đặt, gán tài nguyên (ví dụ 4 vCPU, 4GB RAM, 30GB disk) rồi bấm Finish. Máy ảo sẽ boot thẳng vào bộ cài đặt chỉ sau vài giây.

Bản chất: KVM, QEMU và Virt-Manager phối hợp ra sao?

Người mới dùng Linux thường nhầm ba công cụ này là một. Trên thực tế, mỗi thành phần đảm nhiệm một tầng chuyên biệt:

1. KVM (Kernel-based Virtual Machine)

KVM là module nằm trực tiếp trong nhân Linux. Nhiệm vụ chính của nó là mở giao diện tận dụng phần cứng ảo hóa VT-x/AMD-V. KVM cho phép vCPU của máy ảo chạy thẳng trên CPU máy chủ mà không cần qua tầng dịch mã lệnh, giúp giảm tối đa độ trễ.

2. QEMU (Quick Emulator)

KVM chỉ lo CPU và RAM. Nó không giả lập bàn phím, chuột, card mạng hay bus lưu trữ. Lúc này, QEMU chạy ở userspace sẽ bù đắp phần thiếu: giả lập chipset, thiết bị ngoại vi, card màn hình ảo và nạp BIOS/UEFI (OVMF) cho máy ảo.

3. Libvirt và Virt-Manager

Tự gõ lệnh qemu-system-x86_64 với hàng chục tham số cờ cồng kềnh rất dễ sai sót. Daemon libvirt đứng ra chuẩn hóa toàn bộ cấu hình máy ảo, mạng và disk thành file XML rõ ràng. Còn Virt-Manager là giao diện đồ họa GTK giúp bạn click chuột tạo máy ảo, chỉnh cấu hình hay chụp snapshot mà không cần chạm vào file cấu hình gốc.

Cấu hình Bridge Network và quản trị từ xa qua SSH

Mặc định, máy ảo KVM nằm sau mạng NAT (dải 192.168.122.0/24 qua card virbr0). VM vẫn ra được Internet nhưng máy khác trong mạng LAN không thể ping hay SSH trực tiếp vào nó.

Tạo Linux Bridge nhận IP trực tiếp từ Router

Để máy ảo có IP cùng lớp mạng văn phòng (ví dụ 192.168.1.x), bạn gom card mạng vật lý vào một bridge ảo thông qua Netplan:

sudo nano /etc/netplan/01-netcfg.yaml

Giả sử card mạng vật lý của bạn là enp3s0, hãy sửa nội dung file thành:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: false
  bridges:
    br0:
      interfaces: [enp3s0]
      dhcp4: true
      parameters:
        stp: false
        forward-delay: 0

Áp dụng cấu hình:

sudo netplan apply

Mở Virt-Manager, chọn máy ảo > mục NIC. Chuyển Network source từ NAT sang Bridge device... và điền br0. Khởi động lại, máy ảo sẽ nhận IP trực tiếp từ DHCP server của router.

Quản lý server headless từ xa qua SSH

Bạn không cần cài desktop GUI cồng kềnh lên máy chủ. Trên server staging chạy Ubuntu Server 22.04/24.04, bạn chỉ cần cài qemu-kvm và libvirtd. Toàn bộ phần giao diện Virt-Manager sẽ chạy trực tiếp trên laptop cá nhân của bạn.

Trên Virt-Manager ở laptop, chọn File > Add Connection. Đánh dấu vào Connect to remote host over SSH, nhập user và IP của máy chủ rồi kết nối. Libvirt sẽ tự động forward socket qua SSH tunnel: vừa bảo mật, vừa tiết kiệm hàng trăm MB RAM cho server.

Kinh nghiệm thực chiến khi vận hành

  • Luôn ưu tiên VirtIO: Khi chọn phần cứng đĩa, hãy đặt Bus là VirtIO thay vì SATA. Card mạng cũng chọn virtio thay vì e1000. VirtIO dùng cơ chế paravirtualization, giúp thông lượng đọc ghi đĩa tăng từ ~180MB/s lên hơn 500MB/s trên ổ NVMe. Nếu cài Windows guest, bạn tải thêm file ISO virtio-win từ Fedora để load driver trong lúc chọn ổ đĩa.
  • Chọn QCOW2 thay vì RAW: QCOW2 cấp phát dung lượng theo nhu cầu thực tế (thin-provisioning), hỗ trợ nén và snapshot tức thời chỉ mất 1-2 giây. Bạn chỉ nên dùng RAW khi cần chạy benchmark database khắt khe nhằm vắt kiệt 2-3% IOPS cuối cùng.
  • Khắc phục lỗi Permission Denied với file ISO: Tiến trình QEMU chạy dưới user libvirt-qemu nên không thể đọc file ISO nằm trong thư mục cá nhân như /home/user/Downloads. Cách giải quyết chuẩn nhất là chuyển ISO về đúng thư mục quản lý:
sudo mv ~/Downloads/ubuntu.iso /var/lib/libvirt/images/
sudo chown libvirt-qemu:kvm /var/lib/libvirt/images/ubuntu.iso
  • Bỏ túi các lệnh virsh hữu ích: Dùng khi giao diện Virt-Manager bị đơ hoặc khi bạn cần viết bash script tự động hóa:
virsh list --all                                                      # Kiểm tra trạng thái toàn bộ VM
virsh start vm-ubuntu                                                # Bật máy ảo
virsh shutdown vm-ubuntu                                             # Tắt mềm ACPI an toàn
virsh destroy vm-ubuntu                                              # Cắt nguồn cưỡng bức nếu VM treo
virsh snapshot-create-as --domain vm-ubuntu --name "truoc-khi-update" # Tạo snapshot backup

Sự kết hợp giữa KVM/QEMU và Virt-Manager giải quyết trọn vẹn bài toán hiệu năng lẫn tính tiện dụng. Nhẹ hơn VirtualBox, linh hoạt hơn VMware Workstation, đây là combo đáng đầu tư thời gian cho bất kỳ ai làm việc thường xuyên trên Linux.

Share: