本篇介紹如何使用 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
帳號與密碼就是剛剛建立虛擬機器時所設定的 seal
與 my_pass
(當然這個每個人要設成自己的帳號密碼)。
大致上 KVM 就是這樣使用,virsh
這個指令有很多功能,可以用
virsh help
來看看他所有的功能,常用的應該就是上面的 list
與 shutdown
。
要將虛擬機器關機一般是用 SSH 進去下 shutdown
指令比較好,令一個做法是用 virsh
的 shutdown
指令:
virsh shutdown vm01
這個指令相當於按下一般機器的電源按鈕,當然比較不建議這樣關。