虚拟化技术基础:
cpu虚拟化:
模拟:emulation
虚拟:virtulization
完全虚拟化(full-virtulization)
BT: 二进制翻译 (软件)
HVM:硬件辅助的虚拟化 (硬件)
半虚拟化(para-virtulization)
Memory:
进程:线性地址空间
内核:物理地址空间
MMU Virtulization
Intel: EPT, Extended Page Table
AMD: NTP, Nested Page Table
TLB virtulization
tagged TLB
I/O:
外存:
硬盘、光盘、U盘
网络设备:
网卡
显示设备:
VGA: frame buffer机制
键盘鼠标:
ps/2, usb
I/O虚拟化的方式:
模拟: 完全使用软件来模拟真实硬件
半虚拟化化:
IO-through: IO透传
Intel: VT-d
基于北桥的硬件辅助的虚拟化技术;
两种实现方式:
Type-I:
xen, vmware ESX/ESXi
Type-II:
kvm, vmware workstation, virtualbox
虚拟化技术的分类:
模拟:著名的模拟器,PearPC, Bochs, QEMU
完全虚拟化:也称为native virtulization
两种加速方式:
BT
HVM
VMware Workstation, VMware Server, Parallels Desktop, KVM, Xen(HVM)
半虚拟化:para-virtualization
xen, uml(user-mode linux)
OS级别的虚拟化:
OpenVZ, lxc
Solaris Containers
FreeBSD jails
库虚拟化:
wine
应用程序虚拟化:
jvm
虚拟化网络:
nat mode
bridge mode
routed mode
isolation mode
使用brctl的配置的过程示例:
# brctl addbr br0
# brctl stp br0 on
# ifconfig eth0 0 up
# brctl addif br0 eth0
# ifconfig br0 IP/NETMASK up
# route add default gw GW
Xen:
Xen的组成部分:
1.Xen Hypervisor: 分配CPU、Memory、Interrupt
2. Dom0 : ①特权域 为用户提供接口创建虚拟机
②借助其内核,驱动IO程序。(其他虚拟机的IO就是由Dom0通过Qemu模拟出IO,再关联至实际硬盘。半虚拟化模式提高效率,分前半段和后半段)
3.DomU 非特权域,根据其虚拟化方式实现。
Xen的工作模式:
pv: 半虚拟化
fv: 依赖于CPU的HVM
pv on hvm: CPU完全虚拟化,但IO采用半虚拟化;
xen hypervisor
硬件 --> 安装Linux --> 安装xen --> 修改grub,配置其内核为xen,而不再使用原Linux的内核(Linux的内核和initramfs文件被当作xen的模块)--> 重新编译Linux内核,使得其能够运行于Dom0 --> 重启系统;
创建一个pv格式的vm:
(1) 准备磁盘映像文件
qemu-img create -f raw -o size=2G /images/xen/busybox.img
mke2fs -t ext /images/xen/busybox.img
(2) 提供根文件系统
编译busybox,并复制到busybox.img映像中
mount -o /images/xen/busybox.img /mnt
cp -a $BUSYBOX/_install/* /mnt
mkdir /mnt/{proc,sys,dev,var}
(3) 提供配置DomU配置文件
name = "busybox-001"
kernel = "/boot/vmlinuz"
ramdisk = "/boot/initramfs.img"
extra = "selinux=0 init=/bin/sh"
memory = 256
vcpus = 2
disk = [ '/images/xen/busybox.img,raw,xvda,rw' ]
root = "/dev/xvda ro"
(4) 启动实例:
xl [-v] create
xl create
Ctrl + ]
使用xl命令进行创建虚拟机并完成CentOS 6.6的系统安装
(1) 创建磁盘映像文件;
(2) 获取安装指定版本的系统所需要kernel及initrd文件;
(3) 创建DomU配置文件,示例如下:
name = "centos-001"
kernel = "/images/kernel/vmlinuz"
ramdisk = "/images/kernel/initrd.img"
extra = "ks=http://172.16.0.1/centos6.x86_64.cfg"
memory = 512
vcpus = 2
vif = [ 'bridge=xenbr0' ]
disk = [ '/images/xen/centos6.6.img,qcow2,xvda,rw' ]
on_reboot = "shutdown"
(4) 安装完成后,创建虚拟机的配置文件需要做出修改;
name = "centos-001"
bootloader = "pygrub"
memory = 512
vcpus = 2
vif = [ 'bridge=xenbr0' ]
disk = [ '/images/xen/centos6.6.img,qcow2,xvda,rw' ]
启动图形窗口:
在创建虚拟机的配置文件中定义vfb
(1) vfb = [ 'sdl=1' ]
(2) vnc
(a) yum install tigervnc
(b) vfb = [ 'vnc=1' ]
vnc监听的端口为5900, 相应的DISPLAYNUM为0