本篇介紹如何使用 KVM 在 Linux 上建立虛擬機器,但是現在寫到一半,沒時間繼續寫,先放上來,以後再說。

安裝

這裡以 Ubuntu Linux 10.04 為例,安裝 KVM。

首先安裝 KVM 相關的基本套件:

  • libvirt-bin:提供 libvirtd,用來管理 qemu 與 kvm。
  • qemu-kvm:主要的虛擬引擎。
  • ubuntu-vm-builder:強大的虛擬機器製作工具。
  • bridge-utils:用來建立虛擬機器使用的 bridge。

用 apt 安裝:

sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

另外亦可安裝 virt-viewer 用來觀看虛擬機器:

sudo apt-get install virt-viewer

在安裝完成後,系統會自動將您的 username 加入 libvirtd 群組,在這個群組中的使用者才能夠使用 KVM,想要讓設定生效的話,您必須先登出後,再重新登入。另外,系統也會多新增一個 kvm 群組,不過一般的使用者不需要加入這個群組,所以不用管它。

重新登入後,首先檢查安裝是否正確,執行:

virsh -c qemu:///system list

若是看到

Id Name                 State
----------------------------------

就表示沒問題了,若是看到這樣:

libvir: Remote error : Permission denied
error: failed to connect to the hypervisor

就表示安裝的過程有問題,請先檢查上面的安裝過程有沒有出錯,或是您忘記要登出後在重新登入。

另外,檢查 sock 檔的權限:

sudo ls -la /var/run/libvirt/libvirt-sock

應該要像這樣

srwxrwx--- 1 root libvirtd 0 2012-02-04 13:38 /var/run/libvirt/libvirt-sock

這樣就沒問題了。

另外,若是使用 Ubuntu Desktop 版本,也可以再安裝圖形界面的管理程式:

sudo apt-get install virt-manager

網路設定

接著設定 KVM 用的網路,一般來說網路的設定分為兩種:

  • Usermode Networking:虛擬機器透過 NAT 的方式連上網路,這是預設的設定。
  • Bridged Networking:透過 bridge 方式連上網路,這樣外面的機器也可以直接連進這個虛擬機器,這樣就可以提供網路服務,例如架網站。

若使用 Usermode Networking,預設虛擬機器可以從 192.168.122.0/24 獲取 IP 位址,而真實機器的 IP 位址則是 192.168.122.1,若是要傳輸檔案則可以使用 scp 的方式互傳。若您想要使用 Usermode Networking 方式,就不需要任何額外的設定,直接跳過這裡。

Bridged Networking 方式可以透過實體的網路卡連上網路,讓外界的使用者可以接連進虛擬機器,這裡因為筆者用不到,所以暫時就不研究了。

在這裡筆者希望將虛擬機器鎖在內部,只允許對內的連線,因此要將預設的網路設定稍微修改一下,首先看一下目前的設定:

virsh net-list

輸出為

Name                 State      Autostart
-----------------------------------------
default              active     yes

目前的網路設定預設是 default 這個設定,我們直接修改它就好了,首先把設定檔倒出來:

virsh net-dumpxml default > default.xml

這個內容應該像這樣:

<network>
<name>default</name>
<uuid>45f1405b-791a-06e4-d8e8-8bcfffc4c90f</uuid>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0' />
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254' />
</dhcp>
</ip>
</network>

其中預設的 <forward mode=’nat’/> 是將網路設定為 NAT 模式,在這個模式下,虛擬機器上面的封包會自動透過 ip forward 連到外面,但這不是筆者需要的,所以就直接把這行拿掉,這樣這個虛擬機器就只能跟 host 連線而已。

接著在將編輯好的設定餵回給 virsh

virsh define default.xml

這樣就完成設定了。接著將這個 default 設定設為自動啓動,並啟動這個 default 設定:

virsh net-autostart default
virsh net-start default

上面這樣把設定檔 dump 出來的修改方式其實可以用一個指令代替:

virsh net-edit default

不過這樣的編輯方式預設是使用 vi 編輯器,如果您不會 vi 又想要使用這樣的方式,也可以更改 EDITOR 環境變數來指定您慣用的編輯器。

建立虛擬機器

要建立虛擬機器就使用 vmbuilder 這個工具就行了,他的選項很多,一開始可以先列出所有的選項看看有哪些東西可以用:

vmbuilder kvm ubuntu --help

很多選項都是會因為個人的情況不同而要做調整,首先進到放置 image 的目錄:

cd /var/lib/libvirt/images

然後建立虛擬機器:

vmbuilder kvm ubuntu \
--domain=kvm \
--dest=vm01 \
--arch=amd64 \
--hostname=vm01 \
--mem=8192 \
--cpus=16 \
--user=seal \
--pass=my_pass \
--ip=192.168.122.10 \
--mask=255.255.255.0 \
--net=192.168.122.0 \
--bcast=192.168.122.255 \
--gw=192.168.122.1 \
--iso=/home/seal/LinuxISO/ubuntu-10.04.3-server-amd64.iso \
--suite=lucid \
--components='main,universe,restricted' \
--addpkg=acpid \
--addpkg=vim \
--addpkg=build-essential \
--addpkg=openssh-server \
--addpkg=avahi-daemon \
--libvirt=qemu:///system

虛擬機器建立好之後,先查詢看看:

virsh 'list --all'

這個指令會列出所有的虛擬機器,正常來說應該會出現像這樣的列表:

 Id Name                 State
----------------------------------
  1 vm01                 running

接著就是執行虛擬機器了:

virsh start vm01

這裡的 vm01 是指定要啓動的虛擬機器名稱(也就是上面的 Id Name),這樣 vm01 這台虛擬機器就已經「開機」了,接著若是要使用他的話,就用 SSH 連線進去,

ssh seal@192.168.122.10

帳號與密碼就是剛剛建立虛擬機器時所設定的 sealmy_pass(當然這個每個人要設成自己的帳號密碼)。

大致上 KVM 就是這樣使用,virsh 這個指令有很多功能,可以用

virsh help

來看看他所有的功能,常用的應該就是上面的 listshutdown

要將虛擬機器關機一般是用 SSH 進去下 shutdown 指令比較好,令一個做法是用 virshshutdown 指令:

virsh shutdown vm01

這個指令相當於按下一般機器的電源按鈕,當然比較不建議這樣關。