1,模擬:Emulationhtml
Qemu,PearPC,Bochspython
2,徹底虛擬化:Full Virtualization,Native Virtualizationlinux
HVM:hardware virtualization machinec++
vmware workstation,virtualBox,Parallels desktop(mac),KVM,xendocker
3,半虛擬化:pava-virtualizationshell
必須修改guestOS的內核,讓它知道本身不是容許在物理機器刪上,而是容許在虛擬環境中。centos
使用hypercall調用物理機的cpuapi
xen,UML(user-mode Linux)微信
4,容器虛擬化網絡
docker,openvz,LXC(linux container),libcontainer,virtuozzo,linux V Server
5,庫級別虛擬化
wine
劍橋大學開發的開源vmm(virtual machine monitor),虛擬機監視器。
xen是安裝在物理機器上的。
xen只控制物理機器的cpu和內存,I/O控制,交給了在它上面安裝的第一個虛擬內核(叫dom0)。處理dom0的虛擬機叫:domU,在domU上的I/O操做,都是直接發給dom0,dom0再去操做硬件控制器。domU上的I/O接口叫frontend,dom0上的I/O叫backend。
xen hypervisor
分配cpu,memory,interrupt
dom0:
特權域,I/O分配
網絡設備
net-front(guestOS),net-backend(dom0)
塊設備
block-front(guestOS),block-backend(dom0)
linux kernel:
2.6.37開始支持容許dom0
3.0對關鍵特性進行了優化
提供管理domu的工具:
實現對虛擬機的添加,啓動,快照,中止,刪除等相似在,virtualBox上的操做。
domU:非特權域,根據虛擬化方式,有多種類型
PV:半虛擬化
HVM:硬件提供虛擬化支持,有的cpu提供虛擬化支持
PV ON HVM
不依賴於CPU的HVM特性,但要求guestOS的內核要作出修改,以達到知曉本身不是容許在物理機上。
運行於domu上的os:linux(2.6.24+),Netbsd,Freebsd,openSolaris
依賴於Intel VT或AMD的AMD-V,還有依賴Qemu來模擬I/O設備
運行於domu上的os:幾乎全部支持x86平臺的
cpu爲HVM模式運行,I/O設備爲PV模式運行。
運行於domu上的os:只要OS能驅動PV接口類型的IO設備(net-front,block-front)
下圖是xm和xl的對比:
xe/xapi:提供了多xen管理的api,所以多用於cloud環境。
上面的cloud環境:
xenstore:爲各個domainU提供的共享信息存儲空間,有層級結構的名稱空間,位於Dom0
背景:虛擬化技術有xen,kvm,qemu等,每一個虛擬化剷平都有本身的管理工具,學習這麼多的管理工具太費勁了,全部就出現了一個救世主,virsh。它能夠管理下面的3個虛擬化產品,只用一套命令便可。
virsh/libvirt:用python開發的圖像化管理工具,相似VMware的圖形界面,對應用戶很友好。可是它必須啓動libvirtd守護進程,也挺消耗資源。
RHCL 5.7:默認的虛擬化技術是xen
RHCL 6+:僅支持kvm(紅帽收購了以色列的kvm公司)
Dom0上沒法安裝centos6+
DomU上能夠安裝centos6+
1,編譯3.0以上版本的內核,啓動對Dom0的支持
2,編譯xen程序
可使用製做好的程序包項目:
1,去清華的yum源上找到xen的rpm下載網址,本身作一個repo文件(文件名爲xen4.repo),指向那個地址便可
xen4.repo內容:注意url不要寫錯。
[xen4centos] name=xen4 for centos 6 baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/6.10/virt/x86_64/xen-410/ gpgcheck=0
2,yum install xen
因爲要更新內核,因此有點慢。成功後,/boot目錄下多了下面的文件。
# ls /boot/xen* /boot/xen-4.10.4.36.g6cb1cb9c63-1.el6.config /boot/xen-4.10.4.36.g6cb1cb9c63-1.el6.gz /boot/xen.gz
3,修改/etc/grub.conf文件
修改前:
kernel /vmlinuz-4.9.206-36.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=\ en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh\ gb quiet initrd /initramfs-4.9.206-36.el6.x86_64.img
修改後:
kernel /xen.gz dom0_mem=1024M cpufrep=xen dom0_max_vcpus=2 dom0_vcpus_pin module /vmlinuz-4.9.206-36.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=\ en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh\ gb quiet module /initramfs-4.9.206-36.el6.x86_64.img
修改內容:
加了一行:kernel /xen.gz dom0_mem=1024M cpufrep=xen dom0_max_vcpus=2 dom0_vcpus_pin
宣告說kernel已經不是centos了,而是我xen了,原來的kernel降級成module了。
xen的命令行參數說明的官方文檔
把原來的2行,其中的第一行的kernel替換成module;第二行的initrd替換成module。
修改後的/etc/grub.conf文件
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/vg_c610-lv_root # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (4.9.206-36.el6.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M cpufrep=xen dom0_max_vcpus=2 dom0_vcpus_pin module /vmlinuz-4.9.206-36.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=\ en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh\ gb quiet module /initramfs-4.9.206-36.el6.x86_64.img title CentOS 6 (2.6.32-754.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=/dev/mapper/vg_c610-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=\ en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_c610/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_c610/lv_root rd_NO_DM rh\ gb quiet initrd /initramfs-2.6.32-754.el6.x86_64.img
4,重啓系統
5,確認結果
# uname -r 4.9.206-36.el6.x86_64 # xl list Name ID Mem VCPUs State Time(s) Domain-0 0 1024 2 r----- 28.2
發現內核升級了,而且在dom0上安裝了centos,分配的內存是1024M,分配的cpu是2個。
正確的作法是在物理機器上安裝xen,而後在xen上安裝dom0和其餘domu。