虚拟机(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