Ubuntu下的虛擬化簡析 虛擬機器(VM)是一個運行在虛擬層的電腦,通常被叫做hypervisor。它並不是真是存在的,然而可以像一個真正的電腦一樣工作。虛擬機器所啟動並執行虛擬層決定了虛擬機器的虛擬介面,對於虛擬機器上啟動並執行作業系統而言,它們就是對應的網卡,記憶體,硬碟等。從某種意義上講,虛擬機器讓guest作業系統誤以為它運行在特定的物理裝置上,這些物理裝置實際上由虛擬軟體類比,並且虛擬軟體負責處理與實際硬體的互動。這被稱作硬體類比。 www.2cto.com 虛擬技術中有一個折中處理。有些虛擬軟體運行在作業系統層之上,這種虛擬化的靈活性比較差,在本機速度效能比較高。另外一些虛擬軟體直接或接近等於運行在硬體(bare metal)上,也就是說該虛擬軟體或者是作業系統核心的一部分,或者是作為作業系統運行,在虛擬軟體跟物理硬體資源之間沒有其他軟體層。這種方法速度比較快。 KVMKVM(Kernel-based Virtual Machine)是Linux系統核心的一部分。KVM並不提供硬體類比,只是提供底層操作。運行KVM,需要處理器支援硬體虛擬化。Intel和AMD都推出了處理器的擴充,用來支援硬體虛擬化,分別為IntelVT-x和AMD-V。 www.2cto.com 以下命令查看CPU是否支援硬體虛擬化egrep -c '(vmx|svm)' /proc/cpuinfo傳回值為0說明CPU不支援硬體虛擬化;返回1或更高值說明CPU支援。通常情況,硬體虛擬化擴充是預設不啟用的,要通過進入BIOS設定啟用。 以X200為例進行BIOS修改:開機F12->BootMenu-><Enter Setup>->Config->CPU->將Intel(R) Virtualization Technology選為EnabledIntel(R) VT-d Feature選為Enabled 以下命令查看處理器是否是64位egrep -c ' lm ' /proc/cpuinfo返回為0說明CPU不是64位,返回為1或更高值說明是64位。 查看目前安裝的Ubuntu核心是否為64位,使用以下命令uname -mx86_64說明系統為64-bit kernel,i386,i486, i586 or i686說明Linux核心為32位。 www.2cto.com 查看安裝的Ubuntu的版本資訊:cat /etc/lsb-release查看Linux核心版本cat /proc/version 安裝kvm-ok查看kvm狀態sudo apt-get install cpu-checker在終端輸入sudo kvm-ok來檢查CPU目前狀態。當CPU不支援硬體虛擬化時返回:INFO:Your CPU does not support KVM extensionsKVM acceleration can NOT be used
當CPU支援硬體虛擬化但未啟用時返回:INFO:Your CPU supports KVM extensionsINFO:KVM (vmx) is disabled by your BIOSHINT:Enter your BIOS setup and enable Virtualization Technology (VT),and then hard power off/power on your systemKVM acceleration can NOT be used
CPU支援硬體虛擬化且正常啟用時返回INFO:/dev/kvm does not existHINT: sudo modprobe kvm_intelINFO:Your CPU supports KVM extensionsKVM acceleration can be used www.2cto.com 安裝kvmsudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils其中qemu-kvm是KVM必須的使用者空間組件libvirt-bin是與Linux虛擬功能互動的二進位的C工具箱,不僅支援KVM,而且支援XEN,VirtualBox等。virtinst是一系列建立VMs的命令列工具bridge-utils是用來配置Linux乙太網路連結的工具集此外,可以安裝virt-viewer,為VMs提供了一個GUI和VNC的介面;virt-manager,提供了一個管理VMs的GUI。安裝後可以在Dash首頁找到。 預設情況下,通過KVM安裝的客戶作業系統可以使用網路服務,但是對於網路上的其他電腦是不可見的,也就是說不能作為伺服器被其他系統訪問。預設情況下,VMs的IP位址範圍為10.0.2.0/24,而客戶作業系統可以通過10.0.2.2來訪問主機。如果你想要改變網路設定,使得虛擬機器能夠被外界訪問,那麼需要建立網路連結,讓它們對網路上的其他系統可見。需要注意的是,使用這種方法,需要通過預設的網路管理器來控制建立的硬體;該方法對有線網路可行,對無線網路不可行。首先安裝libcap2-bin。然後需要通過設定cap_net_admin授予QEMU許可權管理網路。
64位系統,通過以下命令設定:sudo setcap cap_net_admin=ei /usr/bin/qemu-system-x86_6432位系統,通過以下命令設定:sudo setcap cap_net_admin=ei /usr/bin/qemu-system-i386然後在/etc/network/interfaces添加以下幾行,使用DHCP建立一個橋接介面br0:auto br0iface br0 inet dhcp<tab>bridge_portseth 0<tab>bridge_stp off<tab>bridge_fd 0<tab>bridge_maxwait 0 通過以下命令重啟網路:sudo /etc/init.d/networking restart最後,你需要通過該橋接網路建立客戶VMs。用這個新的br0介面手動定義你的客戶作業系統,與你在作業系統中通常定義的方式相同。 www.2cto.com 通過KVM建立虛擬機器有幾種方法。其中一種方法是通過vmbuilder。使用命令sudo apt-get install python-vm-builder來安裝。Vmbuilder必須的兩個參數是虛擬軟體名稱和將要使用的作業系統名稱。vmbuilder功能非常強大,可以通過命令列輸入vmbuilder kvm ubuntu --help 來瞭解。這裡的例子基於KVM和Ubuntu12.04 LTSsudo vmbuilder kvm ubuntu --suite precise --flavour virtual --arch i386 -o --libvirt qemu:///system --ip 192.168.0.100 --hostname lovelace --bridge br0--suite指定了Ubuntu的發行版本,--flavour指定我們想要使用虛擬核心(這是用來建造JeOS image的),--arch說明我們想要建立使用一個32位的機器上,-o要vmbuilder去覆蓋前面版本的VM,--libvirt報告本地虛擬環境,增加結果VM到有效機器的列表。 vmbuilder的功能非常強大,更適合有一定基礎的使用者。此外,我們可以使用virtinst來進行KVM的使用和配置。virtinst包括了很多個工具,這裡我們簡單介紹下virt-install和virt-clone,前者用來建立虛擬機器;後者用來複製現存的虛擬機器。我們可以使用virt-install來實現剛才使用vmbuilder的功能;區別僅僅是參數選項不同。此外virt-install還可以建立包含GUI的案頭image,能被VNC訪問。
sudo virt-install -n hopper -r 512 --disk path=/var/lib/libvirt/images/hopper.img, size=20 -c /dev/cdrom --accelerate --connect=qemu:///system --vnc --noautoconsole -v-n hopper定義虛擬機器的名字;-r 512指定了虛擬機器被分配的記憶體,單位為M;--disk path=...是虛擬硬碟的路徑,可以是一個檔案,一個分區,或者是一個邏輯空間。這裡我們在/var/lib/libvirt/images目錄建立了一個20G的檔案名稱字為hopper.img;-c/dev/cdrom是主機的CD-ROM裝置路徑,也可以使用一個ISO檔案;--accelerate啟用核心加速;--connect定義使用的hypervisor;--vnc用VNC虛擬控制台到處客戶;--noautoconsole阻止自動連結到虛擬機器的控制台;-v建立一個完全虛擬化的客戶。 要複製一個虛擬機器,可使用virt-clonesudo virt-clone -o hopper -n knuth -f /var/lib/libvirt/images/knuth.img --connect=qemu:///system-o hopper定義源虛擬機器名;-n knuth定義目的虛擬機器名;-f定義新虛擬機器使用的檔案/分區/邏輯空間的路徑;--connect定義使用的hypervisor。 www.2cto.com 要開啟一個虛擬機器,使用命令virsh -c qemu:///system start hopper要關閉一個虛擬機器,使用命令virsh -c qemu:///system shutdown hopper當虛擬機器被安裝和運行時,你可以通過配置的IP地址來連結。你也可以使用GUI介面virt-view -c qemu:///system hopper你可以使用GUI來管理你的虛擬機器virt-manager -c qemu:///system 另外常用的虛擬軟體有VirtualBox,VMware和Xen。VirtualBox的使用非常簡單,可以在Ubuntu軟體庫下載,也可以從www.virtualbox.org/wiki/Downloads網頁直接下載對應版本的最新軟體。VMware是付費的企業級的虛擬平台。Ubuntu目前宣布不支援Xen的使用。