虛擬機(VM)是一個運行在虛擬層的計算機,通常被叫做hypervisor。它並不是真是存在的,然而可以像一個真正的計算機一樣工作。虛擬機所運行的虛擬層決定了虛擬機的虛擬界面,對於虛擬機上運行的操作系統而言,它們就是對應的網卡,內存,硬盤等。從某種意義上講,虛擬機讓guest操作系統誤以為它運行在特定的物理設備上,這些物理設備實際上由虛擬軟件模擬,並且虛擬軟件負責處理與實際硬件的交互。這被稱作硬件模擬。
虛擬技術中有一個折中處理。有些虛擬軟件運行在操作系統層之上,這種虛擬化的靈活性比較差,在本機速度性能比較高。另外一些虛擬軟件直接或接近等於運行在硬件(bare metal)上,也就是說該虛擬軟件或者是操作系統內核的一部分,或者是作為操作系統運行,在虛擬軟件跟物理硬件資源之間沒有其他軟件層。這種方法速度比較快。
KVM
KVM(Kernel-based Virtual Machine)是Linux系統內核的一部分。KVM並不提供硬件模擬,只是提供底層操作。運行KVM,需要處理器支持硬件虛擬化。Intel和AMD都推出了處理器的擴展,用來支持硬件虛擬化,分別為IntelVT-x和AMD-V。
以下命令查看CPU是否支持硬件虛擬化
egrep -c '(vmx|svm)' /proc/cpuinfo
返回值為0說明CPU不支持硬件虛擬化;返回1或更高值說明CPU支持。通常情況,硬件虛擬化擴展是默認不啟用的,要通過進入BIOS設置啟用。
以X200為例進行BIOS修改:開機F12->BootMenu-><Enter Setup>->Config->CPU->
將Intel(R) Virtualization Technology選為Enabled
Intel(R) VT-d Feature選為Enabled
以下命令查看處理器是否是64位
egrep -c ' lm ' /proc/cpuinfo
返回為0說明CPU不是64位,返回為1或更高值說明是64位。
查看目前安裝的Ubuntu內核是否為64位,使用以下命令
uname -m
x86_64說明系統為64-bit kernel,i386,i486, i586 or i686說明Linux內核為32位。
查看安裝的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 extensions
KVM acceleration can NOT be used
當CPU支持硬件虛擬化但未啟用時返回:
INFO:Your CPU supports KVM extensions
INFO:KVM (vmx) is disabled by your BIOS
HINT:Enter your BIOS setup and enable Virtualization Technology (VT),
and then hard power off/power on your system
KVM acceleration can NOT be used
CPU支持硬件虛擬化且正常啟用時返回
INFO:/dev/kvm does not exist
HINT: sudo modprobe kvm_intel
INFO:Your CPU supports KVM extensions
KVM acceleration can be used
安裝kvm
sudo 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_64
32位系統,通過以下命令設置:
sudo setcap cap_net_admin=ei /usr/bin/qemu-system-i386
然後在/etc/network/interfaces添加以下幾行,使用DHCP創建一個橋接界面br0:
auto br0
iface 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界面手動定義你的客戶操作系統,與你在操作系統中通常定義的方式相同。
通過KVM創建虛擬機有幾種方法。其中一種方法是通過vmbuilder。使用命令sudo apt-get install python-vm-builder來安裝。Vmbuilder必須的兩個參數是虛擬軟件名稱和將要使用的操作系統名稱。vmbuilder功能非常強大,可以通過命令行輸入vmbuilder kvm ubuntu --help 來了解。這裡的例子基於KVM和Ubuntu12.04 LTS
sudo 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-clone
sudo virt-clone -o hopper -n knuth -f /var/lib/libvirt/images/knuth.img --connect=qemu:///system
-o hopper定義源虛擬機名;-n knuth定義目的虛擬機名;-f定義新虛擬機使用的文件/分區/邏輯空間的路徑;--connect定義使用的hypervisor。
要打開一個虛擬機,使用命令
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的使用。