2013年1月17日 星期四

使用KVM建立虛擬機器(以Ubuntu 12.04 LTS平台為例)


以下的步驟均在Ubuntu 12.04 LTS 環境中執行,並以root身份登入。

1. 先檢查實體電腦是否支援 Intel VT or AMD-V: 
# egrep '(vmx|svm)' --color=always /proc/cpuinfo

如果有出現 vmx 或者 svm 表示實體CPU有支援,如果CPU沒有支援就無法繼續了。
或者您也可以安裝CPU檢查套件來檢查:
# apt-get install cpu-checker
# kvm-ok

如果出現KVM acceleration can be used就表示可以繼續安裝KVM。要注意的是您也必須檢查BIOS是否有將VT的功能開啟。

2. 安裝KVM和 vmbuilder
# apt-get install ubuntu-virt-server python-vm-builder kvm-ipxe

安裝完畢後必須將目前的使用者(root)加入libvirtd的群組,請輸入:
# adduser `id -un` libvirtd
# adduser `id -un` kvm

接著請務必先登出再登入,使群組生效。重新登入後請執行:
# virsh -c qemu:///system list

如果出現底下的畫面,表示您的KVM已經正確運行。
Id 名稱 狀態
----------------------------------

3. 安裝網路橋接(Bridge)界面,讓虛擬機器可以和外面的網路連接:
# apt-get install bridge-utils

安裝完成後必須修改網路組態設定,請使用您熟悉的編輯器開啟/etc/network/interfaces,修改前的組態可能是:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254
dns-nameservers 8.8.8.8 8.8.4.4

請將內容修改為:(增加br0橋接界面)

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0 iface eth0 inet manual
auto br0 iface br0 inet static
address 192.168.0.100
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4

bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

接著重新啟動網路:
# /etc/init.d/networking restart

檢查修改後的網路組態,看看br0界面是否正常運行以及IP位址是否正確:
# ifconfig

br0 Link encap:Ethernet HWaddr 00:26:18:97:91:72
      inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
      inet6 addr: fe80::226:18ff:fe97:9172/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:228570 errors:0 dropped:0 overruns:0 frame:0
      TX packets:143241 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:322035649 (322.0 MB) TX bytes:11535133 (11.5 MB)

eth0 Link encap:Ethernet HWaddr 00:26:18:97:91:72
        inet6 addr: fe80::226:18ff:fe97:9172/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
        RX packets:229408 errors:4 dropped:0 overruns:0 frame:4
        TX packets:143224 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:325306184 (325.3 MB) TX bytes:11538445 (11.5 MB)
        Interrupt:19 Base address:0xdead

lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:36 errors:0 dropped:0 overruns:0 frame:0
    TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:2720 (2.7 KB) TX bytes:2720 (2.7 KB)

virbr0 Link encap:Ethernet HWaddr da:b0:93:41:4a:3b
          inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
          UP BROADCAST MULTICAST MTU:1500 Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

如果網路組態正確無誤,請重新啟動實體電腦主機。

4. 安裝virt-install(虛擬機器建立)virt-manager(虛擬機器管理員):
# apt-get install virtinst
# apt-get install virt-manager

5. 利用virt-manager建立虛擬機器(Guest),請執行:
# virt-manager

會出現虛擬機器管理員:
 
虛擬機器管理員

請點選左上角的圖示建立新的機器,會出現底下的畫面(步驟 1/5):
 
步驟1/5

接著輸入虛擬機器名稱,並選擇安裝方式,然後再按下一步。例如您要安裝Windows 7,則在名稱欄位輸入Windows7並選擇本地端安裝媒體,接著按下一步。(註:在本範例中筆者已事先將Windows 7的光碟轉成ISO格式,並置於/media/ISO/ 目錄中,您也可以直接利用光碟來安裝)

在步驟 2/5 的畫面只要指定正確的ISO檔位置,並選取要建立的虛擬機器作業系統類型與版本,再點選下一步。
步驟2/5

接著指定虛擬機器的CPU及記憶體,再按下一步
 
步驟3/5

接下來是指定儲存空間,請依照需求指定虛擬機器的硬碟容量大小(例如20G),在這個畫面中如果您勾選現在分配整個磁碟,則系統會實際產生一個您所指定容量的儲存空間(20G),優點是安裝系統時間會縮短,缺點是會佔用實體硬碟的空間。如果您沒有勾選分配整個磁碟,在安裝時並不會真正佔用20G的空間,可以節省佔用實體硬碟的容量。
 
步驟4/5

最後一個步驟是檢視虛擬機器組態及指定網路界面。在這個步驟中要注意的是產生的虛擬機器會被置放在 /var/lib/libvirt/images/ 目錄下並命名為 Windows7.img 。

另外在網路設定的部份,您可以選擇NAT模式,或者改用橋接的方式讓虛擬機器和實體機器位於同一個網段。如果要採用橋接方式,請在進階選項點選 Specify shared device name ,接著在Bridge name輸入br0 就可以了。

為了要再次確認虛擬機器組態,請先勾選在安裝前自訂組態,再點選完成。
 
步驟5/5

您可以在自訂組態的畫面檢視內容或者變更虛擬機器的硬體設定,如果一切無誤請點選左上角的開始安裝。
 
開始安裝

接著就會出現熟悉的安裝畫面,請先依照畫面安裝好Windows7的虛擬機器,後續再進行效能調校:
 
Windows7安裝

6. Windows虛擬機器效能調整
如果想讓Windows虛擬機器在KVM中有比較好的效能,可以安裝virtio驅動程式來提昇虛擬機器中的硬碟及網路卡速度。請先到 http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/ 下載最新版本的virtio(本範例版本為virtio-win-0.1-30.iso),接著先將Windows的虛擬機器關機,並從虛擬機器管理員編輯虛擬機器細節,將下載的virtio-win-0.1-30.iso掛載到IDE CDROM 1(先將原先Windows7的安裝光碟斷線再連線,並指定virtio-win-0.1-30.iso檔的位置),接著再加入硬體,新增一個Storage儲存裝置,並指定裝置類型為Virtio disk,然後將網路界面(NIC)的裝置類型也改為virtio,最後就可以將Windows虛擬機器再度開啟。
Virtio disk

Windows虛擬機器再度開啟之後,裝置管理員中會產生二個有驚嘆號的裝置,分別是Ethernet控制卡和SCSI控制卡,只要更新此二個裝置的驅動程式,並將驅動程式的位置指向剛剛掛載virtio的光碟機就可以正確安裝。

安裝完畢請再度將Windows虛擬機器關機,並再次從虛擬機器管理員編輯虛擬機器細節,移除剛剛新增的0.1G虛擬硬碟(請勿刪錯磁碟),再將原先安裝Windows系統的IDE Disk 1之虛擬磁碟型態改為Virtio,然後再重新開啟Windows虛擬機器。如此就可以提昇Windows的效能。
IDE to Virtio

7. 複製(Clone)虛擬機器
虛擬機器安裝完成後,接下來如果要產生第二台相同的虛擬機器,只要使用複製(Clone)的方式就可以了,不需要重新再安裝一次。Clone的方法有二種,在Clone之前必須先關閉虛擬機器,第一種是利用virt-clone指令:

# virt-clone --connect qemu:///system -o Windows7 -n Windows7-clone -f /var/lib/libvirt/images/Windows7-clone.img

第二種是在虛擬機器管理員點選欲複製的虛擬機器,按滑鼠右鍵並選擇Clone來進行複製。
Clone-1
Clone-2

8. 匯入現有磁碟映像:
在上一個步驟我們Clone了一台虛擬機器,並在/var/lib/libvirt/images/ 目錄下產生Windows7-clone.img的映像檔,接著我們利用虛擬機器管理員將此映像檔掛載成另一台新的虛擬機器。
只要再新增一台新的虛擬機器,自訂好名稱並選擇匯入現有的磁碟映像,接著指定映像檔所在的位置(/var/lib/libvirt/images/Windows7-clone.img),然後依照之前建立虛擬機器的方式逐步執行就可以了。
匯入1
匯入2

9. 將實體機器轉換成虛擬機器(P2V)
就筆者所知KVM並沒有提供實體轉虛擬的工具,因此必須利用第三方工具程式先行將實體機器轉為虛擬,再掛載到KVM當中執行。建議使用VMware 所提供的VMware vCenter Converter™ 來進行實體轉虛擬的動作,您可以到 http://www.vmware.com/products/converter/overview.html 下載Converter,轉換步驟請自行參考相關文件,本文不再贅述。轉換完成之後可以直接掛載vmdk 檔,或者先將vmdk 轉成qcow2格式的映像檔,再進行掛載,轉換指令如下:

# kvm-img convert -O qcow2 VM1.vmdk VM1.qcow2

轉換完成後請依照前面步驟8. 匯入現有磁碟映像的方式,就可以啟動此實體轉虛擬的機器。

12 則留言:

  1. 作者已經移除這則留言。

    回覆刪除
  2. 作者已經移除這則留言。

    回覆刪除
  3. 您好
    請問在VMWare Workstation10上
    用NAT網路
    裝KVM我也選NAT可以嗎?

    學生甲我用
    WIN8作業系統安裝VMWare10裡面建Ubuntu12.04.4.ISO再新增WIN7.ISO的KVM


    WIN7 KVM安裝到
    顯示No bootable device.這最後一行卡住表示?

    回覆刪除
    回覆
    1. 不好意思,我沒有用過VMWare10,所以沒辦法提供您正確的解答,不過您既然是在Windows8安裝VMWare10,為何不直接新增一台虛擬機掛Win7就可以了,還要先掛Ubuntu然後在Ubuntu上再掛Win7? 我想這樣會有比較多的變數,要找錯誤也比較不容易。

      刪除
    2. 因為研究需要要用KVM
      但我又不想把原本作業系統弄成Ubuntu所以才用這麼複雜

      刪除
  4. 然後我重裝亂試
    其中一次win7 KVM 說硬碟空間不足
    是我一開始VMware Workstation 20gb不夠用得意思?

    回覆刪除
    回覆
    1. Windows7的最低系統需求是16 GB 可用硬碟空間 (32 位元) 或 20 GB (64 位元),建議您把空間設大一點

      刪除
    2. 我今晚會在重裝看看
      他VMware那裡硬碟建議20GB
      新增KVM那裡建議8GB

      不知道超過會不會弄壞電腦什麼的0.0

      刪除
    3. VMware 和 KVM 建議的都是最小的空間,只要您實體硬碟的空間足夠,可以把空間放大一點,不會弄壞電腦的

      刪除
    4. KVM剛剛發現是顯示可用空間6點多GB
      我把VMware settings擴充
      終端機下載gparted來解決就沒顯示可用空間了

      只是不知道Ubuntu硬碟能不能合併
      建立兩個ext4主硬碟想合併卻不會合

      刪除
    5. 系統還是不給裝 硬碟沒連接上
      再建立一個新虛擬機了
      先謝謝大大這篇的資訊感恩^ ^

      刪除
  5. 老師好,我本機OS為ubuntu16.04LTS,用KVM掛載WIN7x86、64都嘗試過也照著步驟來做,除Virtio驅動是最新的,進入安裝畫面後顯示No bootable device,想請問是因為16.04版本問題嗎

    回覆刪除