對於個人使用的 VM 環境來說,除了圖形化介面的 VirtualBox 或 VMWare 之外,在 Linux 上可以使用的虛擬化技術還有 KVM, QEMU, Xen 等,他們各自可以擁有很多不同的操作介面,可能是文字、圖形或網頁。對這些虛擬化技術如果能有統一的 API ,不同類型的操作介面就可以只用這套 API 控制不同虛擬化技術的 VM , libvirt 就是提供這種 API 的一套函式庫,而 virsh 則是使用這個函式庫的一種文字介面管理程式。

安裝套件

權限設定

非 root 的使用者需要在 kvm 這個 group 中才能建立/控制 VM。

使用 virt-install 建立 VM

以安裝 Archlinux 為例,在 archlinux 的 iso 檔所在目錄中,底下的指令可以快速的建立一臺 VM 並開機

virt-install \
    --name=<vm_name> \
    --vcpus=1 --memory=1024 \
    --cdrom=archlinux-2020.04.01-x86_64.iso \
    --disk size=20,format=vmdk \
    --os-variant=archlinux \
    --graphics=vnc,port=5900,listen=0.0.0.0 \
    --noautoconsole

在文字介面中使用 --graphics=vnc 參數可以將畫面輸出到 vnc 協定上,並且可以指定 port 及 bind address 。如此就可以從遠端連入該虛擬機器的畫面進行操作,由於可以指定 port ,使用前務必檢查防火牆有沒有擋下所使用的 port 。

virsh 常見指令

virsh list [--all]

列出正在運行的(加上 --all 是全部) VM 。

virsh start <vm_name>

啟動指定的 VM 。

virsh destroy <name>

強制關閉指定的 VM 。

virsh shutdown <name>

對指定的 VM 送出關機指令。

virsh undefine <name> [--remove-all-storage] [--wipe-storage]

刪除指定的 VM ,並指定是否刪除相關磁碟映像檔。