如何在 Ubuntu 16.04 建立 KVM 虛擬機器

KVM(Kernel-based Virtual Machine)是 Ubuntu 及其他 Linux 分發版本所支援的虛擬處理介面來運行虛擬機器,從 Linux 核心 2.6.20 起已加入主流核心中。 QEmu 是完整模擬器,透過 KVM 運行虛擬機器。很多雲端伺服器都以虛擬機器方式運行,其優點是快速步署,在突然增加機器需要,短時間內便能增加主機數量,亦可以節省購買時間、金錢、空間。

橋接網絡介面

一般 Linux 系統只為一張實體網絡卡提供一個網絡介面,一個 MAC 地址。如果用作 KVM 主機,那麼就要使用橋接方式來容許一張實體網絡卡給予多台虛擬機器使用,以不同網絡介面,不同 MAC 地址來共用相同一張實體網絡卡。我們可以在 /etc/network/interfaces 中,以 eth0 作例子,設定為 br0 橋接網絡介面。

#auto eth0
#iface eth0 inet static
# The primary network interface
auto br0
iface br0 inet static
address 10.0.0.1
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
gateway 10.0.0.254
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.8.8 8.8.4.4
dns-search linuxharbour.com
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

準備虛擬硬碟

在建立 KVM 虛擬機器前,我們先預備虛擬機器所需的虛擬硬碟。建立虛擬機器方法有兩種,第一種是直接在 Linux 主機上建立,第二種是先在用家電腦以其他虛擬機器軟件建立後,例如 VirtualBox,上傳虛擬硬碟影像檔到 Linux 主機上轉換。另外,也可以混合兩種方法,在用家電腦建立較細容量的虛擬硬碟影像檔,再在 Linux 主機建立較大的虛擬硬碟作第二硬碟來儲存資料。

因為常建議 Linux 伺服器只使用文字指令,而不採用圖像介面,筆者建議採用混合方式,先在 VirtualBox 安裝 Ubuntu 或其他 Linux 分發版本,然後上傳及轉換後直接運行。如果讀者的 KVM 主機有圖像介面,例給  GNOME 等,也可以在 Linux 圖像介面為 KVM 虛擬機器安裝 Linux 系統。

直接建立虛擬硬碟

QEmu 提供 qemu-img 來建立多種格式的虛擬硬碟影像檔,QCOW 是 QEmu 團隊開發虛擬硬碟影像檔格式,例如建立 200GB 的 mydatadisk.qcow2 可用以下指令。

$ qemu-img create -f qcow2 mydatadisk.qcow2 200G

轉換虛擬機器影像檔

qemu-img 亦可協助轉換虛擬硬碟影像檔格式,例如在 VirtualBox 建立的 VDI 虛擬硬碟影像檔(例子:mylinuxdisk.vdi ),可利用下列指令轉換到 QCOW 格式(例子:mylinuxdisk.qcow2)。

$ qemu-img convert -f vdi mylinuxdisk.vdi -O qcow2 mylinuxdisk.qcow2

直接建立及運行 KVM 虛擬機器(已在虛擬硬碟安裝 Linux 系統)

在建立虛擬硬碟後,可以使用 virt-install 指令,以這虛擬硬碟影像檔(例子:mylinuxdisk.qcow2)來建立 KVM 虛擬機器, –import 會跳過操作系統安裝步驟。以下參考例子會建立一台 2 個虛擬處理器(VCPUs)、1GB 虛擬記憶體(Virtual Memory/RAM)及以橋接網絡介面 br0 作虛擬網絡卡。

$ virt-install –name mylinuxvm –vcpus 2 –ram 1024 –import –disk mylinuxdisk.qcow2,format=qcow2 –network bridge=br0

建立 KVM 虛擬機器及安裝 Linux 系統(未在虛擬硬碟在安裝 Linux 系統)

virt-install 指令也可以透過 -c 來指明 CDROM 的 image,例如 ubuntu-16.04-server-amd64.iso,然後在 GNOME 使用 virt-manager 來為虛擬硬碟影像檔安裝 Linux 系統。

$ virt-install –name mylinuxvm –vcpus 2 –ram 1024 –disk mylinuxdisk.qcow2,format=qcow2 –network bridge=br0 -c ubuntu-16.04-server-amd64.iso

為 KVM 虛擬機器加入額外虛擬硬碟

virsh 是 KVM 的虛擬機器管理工具,我們可以使用 virsh 來額外加入另一台虛擬硬碟,例如 myvdisk2.qcow2 (vdb)。

$ virsh attach-disk mylinuxvm –subdriver qcow2 –source myvdisk2.qcow2 –target vdb –persistent

Related posts

Sammy Fung

Sammy 是 Linux 技術顧問,擁有 20 年 Linux 技術經驗。