日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Xen安装部署和基本原理

發(fā)布時(shí)間:2024/1/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Xen安装部署和基本原理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Refer to :?http://www.178linux.com/14764

目錄:
? ?1. Xen的簡介
? ?1.1 ?Xen的大體結(jié)構(gòu)
? ?1.2 Xen對VM的稱呼
? ?1.3 Xen對CPU和內(nèi)存的虛擬化過程
? ?1.4 Xen對IO設(shè)備的虛擬化過程
? ?1.5 Linux Kernel對Xen的支持
? ?1.6 Xen版本發(fā)布簡史
? ?1.7 Xen的工具棧
? ?1.8 XenStore
? ?1.9 ?虛擬化中的四種網(wǎng)絡(luò)模型
? ?1.10 Xen的安全問題導(dǎo)讀
? ?2. Xen的安裝及配置文件說明
? ?2.1.1 ?在CentOS6.6上運(yùn)行Xen的條件
? ?2.1.2 ?Xen的配置
? ?2.2.1 ?Xen 啟動DomU的配置文件說明
? ?2.2.1.1 ?如何創(chuàng)建一個(gè)Xen PV模式的VM 【注:HVM模式的VM創(chuàng)建參見試驗(yàn)部分】
? ?3. 使用libvirt實(shí)現(xiàn)Xen虛擬機(jī)的圖形管理
? ?4. PV DomU的根文件系統(tǒng)可以以多種不同的方式安置

1. Xen的簡介
? ? ? ? ?Xen是一個(gè)開源的可直接運(yùn)行于硬件層之上的虛擬化軟件,它可在傳統(tǒng)虛擬技術(shù)極度不友好的X86架構(gòu)上也有上佳的表現(xiàn)
? 它是英國劍橋大學(xué)開發(fā)的開源虛擬化軟件,它的初衷是在一臺物理機(jī)上運(yùn)行上百臺虛擬機(jī);
? ? ? ? ?Xen的設(shè)計(jì)十分精巧,它屬于虛擬化type-I ,因?yàn)閄en實(shí)際是一個(gè)簡化版的Hypervisor層;相對于Type-II類型的基于Host的
? ?虛擬化(如:VMware Workstattion),其性能相對會較好;Xen僅對CPU和Memory直接接管,而其它IO硬件驅(qū)動則由其上運(yùn)行的
? ?第一個(gè)虛擬機(jī)來提供支持.這樣做的原因是: Xen無法為眾多IO設(shè)備開發(fā)驅(qū)動,而硬件設(shè)備的開發(fā)商也不會專為Xen提供驅(qū)動,
? ?因此Xen采用了這樣一種特別的設(shè)計(jì)方式。

? ? ? ? ?Xen默認(rèn)認(rèn)為自己是直接運(yùn)行于硬件層之上的虛擬化軟件,并且可以直接驅(qū)動CPU和內(nèi)存,需注意CPU和內(nèi)存是所有想要運(yùn)行
? 的操作系統(tǒng)必須能直接支持的,但Xen為保證自身的小巧,它并沒有提供虛擬機(jī)的管理接口,因此它采用了一種獨(dú)特的方式,先運(yùn)行一臺特權(quán)虛擬機(jī),且這臺VM必須支持Kernel的修改,因此選擇開源的Linux做為特權(quán)VM是最合適的,這樣也可方便采用Linux所支持的方式來開發(fā)虛擬機(jī)管理接口,實(shí)現(xiàn)與Xen Hypervisor層直接交互來完成為VM分配CPU和內(nèi)存資源 及 創(chuàng)建、刪除、停止、啟動VM的管理接口;通常這臺特權(quán)虛擬機(jī)一定會采用當(dāng)前比較流行的Linux發(fā)行版,因?yàn)樗苤С指郔O硬件設(shè)備,如:網(wǎng)卡,磁盤,顯卡,聲卡等; 到目前為止,NetBSD, GNU/Linux, FreeBSD和Plan 9,OpenSolaris等系統(tǒng)已經(jīng)支持已半虛擬化方式運(yùn)行在Xen的DomU中;并且目前Xen已經(jīng)支持x86,x86_64和ARM等平臺,并正在向IA64、PPC移植。移植到其他平臺從技術(shù)上是可行的,未來有可能會實(shí)現(xiàn)。
??
? ? ? ? ?Xen虛擬機(jī)支持在不停止的情況下在多個(gè)物理主機(jī)之間實(shí)時(shí)遷移。在操作過程中,虛擬機(jī)在沒有停止工作的情況下內(nèi)存被反復(fù)的復(fù)制到目標(biāo)機(jī)器。虛擬機(jī)在最終目的地開始執(zhí)行之前,會有一次60-300毫秒的非常短暫的暫停以執(zhí)行最終的同步化,給人無縫遷移的感覺。類似的技術(shù)被用來暫停一臺正在運(yùn)行的虛擬機(jī)到磁盤,并切換到另外一臺,第一臺虛擬機(jī)在以后可以恢復(fù)。
? ? ? ? ? ??
1.1 ?Xen的大體結(jié)構(gòu):
? ? Xen的組成分為三部分:
? ? ? ? ? ?(1) 硬件層之上的Xen Hypervisor層:負(fù)責(zé)直接驅(qū)動CPU和Memory這些基礎(chǔ)硬件,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?為其它所有虛擬機(jī)提供CPU、內(nèi)存、Interrupt(中斷)管理,并且還提供了HyperCall的調(diào)用。
? ? ? ? ? ?(2) 第一個(gè)虛擬機(jī): 此虛擬機(jī)在Xen中稱為特權(quán)虛擬機(jī): 它有整個(gè)虛擬化環(huán)境的訪問權(quán),并負(fù)責(zé)創(chuàng)建用戶級虛擬機(jī),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?并為其分配I/O設(shè)備資源.它的Kernel是經(jīng)過特別修改的VM,它可以直接訪問IO硬件也可訪問其它用戶VM。
? ? ? ? ? ?(3) 其它眾多虛擬機(jī): 這些虛擬就是用戶級虛擬機(jī): 它們是實(shí)際提供給用戶使用的虛擬機(jī),也是相關(guān)隔離的VM。
? ? ? ? ? ? ? ? ? ? ? ?需要注意:Xen支持三種虛擬化,當(dāng)然此處的虛擬化特指CPU的半虛擬化或完成虛擬化.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<1> Para-Virtualization(半虛擬化): 在這種虛擬化中,CPU不要求支持HVM特性,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?但GuestOS的Kernel必須允許被修改.否則將無法支持該GuestOS運(yùn)行在DomU中。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?這是因?yàn)楸仨氉孏uestOS知道自己是運(yùn)行在虛擬化環(huán)境中,這樣它在進(jìn)行特權(quán)指令操作硬件時(shí),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?會直接發(fā)起HyperCall向Xen Hypervisor發(fā)起請求來完成所謂的硬件操作。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?在PV技術(shù)下,能夠運(yùn)行在DomU上的OS包括:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Linux, NetBSD, FreeBSD, OpenSolaris
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<2> HVM(基于硬件的完全虛擬化): 此種虛擬化需要借助于Intel的VT-x 或 AMD的AMD-v 的HVM技術(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?及Qemu的IO硬件模擬,才能支持GuestOS的kernel不修改,就可直接被DomU支持。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?這是因?yàn)閄en Hypervisor是運(yùn)行在CPU的環(huán)-1上的,GuestOS的kernel是運(yùn)行在CPU的環(huán)0上,
???????????????????????????????????????????????GuestOS向環(huán)0上發(fā)起的所有假特權(quán)指令調(diào)用都由CPU直接捕獲,并交由環(huán)-1上的
???????????????????????????????????????????????Xen Hypervisor處理,最后由Xen代其執(zhí)行
????????????????????????????????????????????? ?這樣DomU若發(fā)起關(guān)機(jī)指令時(shí),Xen僅會切斷該GuestOS的電源,而不會影響其它GuestOS。
???????????????????????????????????????????????在HVM技術(shù)下,能夠運(yùn)行在DomU上的OS包括: 所有支持X86架構(gòu)的OS.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?<3> PV on HVM: I/O設(shè)備半虛擬化運(yùn)行,CPU運(yùn)行于HVM模式
? ? ? ? ? ? ? ? ? ? ? ? ? ?此中方式是為了解決HVM方式中IO設(shè)備也必須完全模擬而帶來的性能低下問題;通過讓CPU進(jìn)行
? ? ? ? ? ? ? ? ? ? ? ? ? ?完全虛擬化,而I/O設(shè)備則采用在GuestOS中安裝相應(yīng)的IO驅(qū)動實(shí)現(xiàn)IO的半虛擬化的方式來提高效率。
? ? ? ? ? ? ? ? ? ? ? ? ? ?在PV on HVM的技術(shù)下,能夠運(yùn)行在DomU上的OS包括:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?只要OS能驅(qū)動PV接口類型的IO設(shè)備,即可.
1.2 Xen對VM的稱呼:
? ? ? ?Xen對VM統(tǒng)稱為Domain.
? ? ? ?第一臺特權(quán)VM,在Xen中通常稱為: Domain0,簡稱為Dom0, 別名: Privileged Domain.
? ? ? ?其它后續(xù)用戶級VM,在Xen中稱為: Domain1,Domain2,…., 它們有一個(gè)統(tǒng)稱為DomU,別名:Unprivileged Domain.
? ? ? ?

1.3 Xen對CPU和內(nèi)存的虛擬化過程【注: 關(guān)于虛擬化中CPU和內(nèi)存的虛擬化在附件加入了一些補(bǔ)充.】:
? ? ? ?Xen在給VM提供CPU的虛擬化時(shí),它采用的也是在Xen hypervisor層啟動一個(gè)線程,并將這些線程映射到某個(gè)物理核心上,
? 當(dāng)然通過DomU的配置文件中的cpus可以指定將這些模擬CPU的線程綁定到某幾個(gè)物理核心上;而內(nèi)存的虛擬化
? 則是內(nèi)存頁的映射,將物理內(nèi)存上多個(gè)連續(xù)或不連續(xù)的內(nèi)存頁映射給VM,讓VM看來這就是一個(gè)完整的連續(xù)的內(nèi)存空間.

1.4 Xen對IO設(shè)備的虛擬化過程:
? ? ? ?當(dāng)啟動一個(gè)用戶VM(DomU)時(shí), 該VM所需的CPU和內(nèi)存都有Xen Hypervisor提供,而它若需要使用IO設(shè)備時(shí),則向特權(quán)VM
? 發(fā)起請求,特權(quán)VM(Dom0)會為該用戶VM創(chuàng)建一個(gè)模擬的硬件設(shè)備線程,并運(yùn)行于特權(quán)VM的用戶空間,當(dāng)用戶VM向該IO硬件
? 發(fā)起調(diào)用時(shí),特權(quán)VM上相應(yīng)的模擬設(shè)備接收請求并將其轉(zhuǎn)化為特權(quán)VM對IO硬件的操作,交給特權(quán)VM的內(nèi)核來代為
? 完成其操作。這里需注意這些虛擬IO硬件需要由Qemu來模擬,Xen本身并沒有提供相應(yīng)的模擬功能。
? (注:特權(quán)VM的CPU和內(nèi)存也是有Xen Hypervisor提供.)
??
? ? ? ?Qemu模擬IO設(shè)備(完全虛擬化方式): 假如用戶VM向特權(quán)VM請求磁盤,特權(quán)VM可以將一個(gè)分區(qū)、文件等,
通過Qemu將其模擬成一個(gè)磁盤設(shè)備,就拿文件來說,特權(quán)VM先創(chuàng)建一個(gè)映像文件,再通過Qemu為該文件模擬一個(gè)磁盤控制器芯片,然后,將其映射到用戶VM上,當(dāng)然模擬的這個(gè)磁盤控制器芯片一定是一個(gè)最常見的,用戶VM的Kernel一定支持的,但需注意: 模擬的磁盤可能會與實(shí)際的物理磁盤不同,因?yàn)橐M可能兼容。這樣一來用戶VM假如要寫數(shù)據(jù)到磁盤的過程如下:
? ? ? ?用戶VM-APP—>用戶VM-Kernel調(diào)用虛擬磁盤的驅(qū)動進(jìn)行寫數(shù)據(jù)前的準(zhǔn)備
???????????????????????????? ??(如:數(shù)據(jù)寫入到磁盤中的扇區(qū)位置/數(shù)據(jù)編碼等)—>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?用戶VM-Kernel將編碼后的信息發(fā)給特權(quán)VM的模擬磁盤進(jìn)程—>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?特權(quán)VM的模擬磁盤進(jìn)程再將編號信息還原后發(fā)給特權(quán)VM-kernel—>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?特權(quán)VM-kernel調(diào)用真實(shí)物理磁盤的驅(qū)動對數(shù)據(jù)進(jìn)行寫前準(zhǔn)備—>最后磁盤驅(qū)動調(diào)度磁盤完成寫入.
? ? ? 摘錄補(bǔ)充:(http://my.oschina.net/davehe/blog/94039?fromerr=mOuCyx6W)
? ? ? ? ? ?Xen向Domain提供了一個(gè)抽象層,其中包含了管理和虛擬硬件的API。Domain 0內(nèi)部包含了真實(shí)的設(shè)備驅(qū)動(原生設(shè)備驅(qū)動),可直接訪問物理硬件,Xen?提供的管理?API?可與其交互,并通過用戶模式下的管理工具(如:xm/xend、xl等)來管理?Xen?的虛擬機(jī)環(huán)境。

????????

? ? ? ?半虛擬化的IO設(shè)備:它與模擬最大不同是DomU知道自己是運(yùn)行在虛擬化環(huán)境中的,并且知道這個(gè)磁盤不是真正的磁盤
? 它只是Xen模擬的一個(gè)磁盤前端驅(qū)動(Disk Frontend),它要寫數(shù)據(jù)時(shí),直接將數(shù)據(jù)交給Disk Frontend,而不再去調(diào)用磁盤
? 驅(qū)動進(jìn)行數(shù)據(jù)編碼,當(dāng)特權(quán)VM端的Disk backend收到來自DomU的數(shù)據(jù)時(shí),也是直接轉(zhuǎn)給特權(quán)VM-Kernel,由其直接調(diào)用
? 物理磁盤驅(qū)動來對這些原始數(shù)據(jù)進(jìn)行處理并寫入磁盤。
? ?摘錄補(bǔ)充:
? ? ? ? ? ?Xen2.0之后,引入了分離設(shè)備驅(qū)動模式。該模式在每個(gè)用戶域中建立前端(front end)設(shè)備,在特權(quán)域(Dom0)中建立后端(back end)設(shè)備。所有的用戶域操作系統(tǒng)像使用普通設(shè)備一樣向前端設(shè)備發(fā)送請求,而前端設(shè)備通過IO請求描述符(IO descripror ring)和設(shè)備通道(device channel)將這些請求以及用戶域的身份信息發(fā)送到處于特權(quán)域中的后端設(shè)備。這種體系將控制信息傳遞和數(shù)據(jù)傳遞分開處理。
? ? ? ? ? ?半虛擬化客戶機(jī)(Domain U PV)的PV Block Driver接收到要向本地磁盤寫入數(shù)據(jù)的請求,然后通過Xen Hypervisor將自己與Domain 0共享的本地內(nèi)存中的數(shù)據(jù)寫入到本地磁盤中。在Domain 0?和半虛擬化Domain U之間存在事件通道(我的理解:Device Channel包含Event Channel),這個(gè)通道允許它們之間通過存在于Xen Hypervisor內(nèi)的異步中斷來進(jìn)行通信。Domain 0將會接收到一個(gè)來自于Xen Hypervisor的系統(tǒng)中斷,并觸發(fā)Domain 0中的Block Backend驅(qū)動程序去訪問本地系統(tǒng)內(nèi)容,并從自己與半虛擬化客戶機(jī)的共享內(nèi)存中讀取適合的數(shù)據(jù)塊后,隨即被寫入到本地磁盤的指定位置中。

????????

? ? ? ? 但無論采用模擬或半虛擬化最終都是對物理磁盤的操作,假如當(dāng)前只有一個(gè)物理磁盤,眾多用戶VM都在進(jìn)行大量的
? 讀寫請求,此時(shí),為了避免用戶VM無限制的向特權(quán)VM發(fā)起請求,特權(quán)VM中采用一個(gè)環(huán)狀緩存區(qū),每到一個(gè)IO請求,就先將其
? 塞入這個(gè)環(huán)狀緩沖區(qū)的槽位中,若緩沖區(qū)滿了,就會告訴用戶VM IO設(shè)備繁忙。當(dāng)然其它各種IO設(shè)備大致都采用這種機(jī)制
? 來控制。
?
1.5 ?Linux Kernel對Xen的支持:
? ? ? ? ? ?》Linux2.6.37 ?: kernel開始對Xen進(jìn)行支持,并加其加入到Kernel中。
? ? ? ? ? ?》Linux3.0 :Kernel開始對Xen的關(guān)鍵部分進(jìn)行優(yōu)化.
? ? ?RHEL對Xen的支持概況:
? ? ? ?Redhat系列對Xen的支持情況:
? ? ? ? ? ?RHEL5.7 ~ 及以前版本: 默認(rèn)的企業(yè)虛擬化技術(shù)為Xen.
? ? ? ? ? ? ? ? ? ?但Redhat提供了兩種內(nèi)核:
? ? ? ? ? ? ? ? ? ? ? ?kernel-… ? ? ?:這是僅允許RHEL系統(tǒng)的內(nèi)核,不能運(yùn)行在DomU中。
? ? ? ? ? ? ? ? ? ? ? ?kernel-xen.. ?:這是需要部署XenServer時(shí),使用的Kernel版本.
? ? ? ? ? ?RHEL6 ~ 及以后版本: 默認(rèn)支持KVM(收購自以色列的一款虛擬化工具),并且不在對Xen做任何支持,但允許自己運(yùn)行在DomU中.

1.6 ?Xen版本發(fā)布簡史:
? 10年4月Xen4.0.0發(fā)布,改進(jìn)后Xen的DomU最大可支持虛擬CPU 64顆,Xen主機(jī)可支持1TB內(nèi)存和128顆物理CPU,磁盤可支持快照和克隆; HVM客戶機(jī)支持虛擬內(nèi)存頁共享;
? ?11年4月發(fā)布的Xen4.1版后,xm/xend開始被提示廢棄,xl這個(gè)更輕量級的Xen VM管理工具逐漸成為主流.
? ?15年為止已經(jīng)發(fā)布Xen4.5版本.目前yum源可用的最新版Xen是4.6.1版的(http://mirrors.skyshe.cn/centos/6.7/virt/x86_64/xen-46/).

1.7 ?Xen的工具棧:
? ? ? ?xend : 這是Xen Hypervisor的Dom0上運(yùn)行的服務(wù),此服務(wù)用來監(jiān)控xm命令發(fā)來的指令,并完成相應(yīng)的動作。
? ? ? ?xm : Xen Management,用來管理VM的創(chuàng)建、刪除、啟動、快照、刪除、停止等的管理工具。
? ? ? ?xl : 這是一個(gè)基于libxenlight庫的一個(gè)輕量級VM管理工具,它從Xen4.1開始出現(xiàn),從4.3以后,它被作為主要的VM管理
? ? ? ? ? ?工具,而xm這個(gè)重量級管理工具開始被提示廢棄.
? ? ? ?以下為xm、xl的對比圖:

????????

? ? ? ? xl 和 xm都需要調(diào)用libxenlight,但xl不需要運(yùn)行任何服務(wù),它可直接調(diào)用libxenlight完成相關(guān)操作。
? ? ? xe/XAPI,是xend的一個(gè)API管理接口,通常用于Xen Cloud環(huán)境中:Xen Server, XCP
? ? ??
? ? ?virsh/ libvirt : 這是Redhat發(fā)起開發(fā)的一套用于管理眾多不同類別的VM的管理工具。
? ? ? ? ? ? ? ? ? ? ? ?virsh : 這是一個(gè)命令行工具
? ? ? ? ? ? ? ? ? ? ? ?libvirt: 則是一個(gè)lib庫, libvirtd守護(hù)進(jìn)程用于監(jiān)聽virsh命令操作,并調(diào)用lbvirt完成相關(guān)操作.

????????

1.8 ?XenStore:
? ? ? ?為各Domain之間提供共享信息存儲的空間,同時(shí)它也是一個(gè)有著層級結(jié)構(gòu)的名稱空間數(shù)據(jù)庫;
? ?它運(yùn)行于Dom0上,由Dom0直接管理,它支持事務(wù)和原子操作。XenStore通常用來控制DomU中設(shè)備的機(jī)制,
? ?并通過多種方式對其進(jìn)行訪問。
? ?摘錄補(bǔ)充(http://blog.chinaunix.net/uid-26299858-id-3134495.html):
? ? ? ? ?XenStore是Xen提供的一個(gè)域間共享的存儲系統(tǒng),它以字符串形式存放了管理程序和前、后端驅(qū)動程序的配置信息。
? ?Dom0管理所有的數(shù)據(jù),而DomU通過共享內(nèi)存,向Dom0請求與自己相關(guān)的鍵值,以此實(shí)現(xiàn)域間通信。Xen提供了多種
? ?接口用來操作XenStore:命令行的xenstore-*命令、用戶空間的xs_系列函數(shù)、內(nèi)核的XenBus接口,都可以用來方便地
? ?操作XenStore的數(shù)據(jù)。

1.9 ?虛擬化中的四種網(wǎng)絡(luò)模型
? ? ? ?在虛擬化環(huán)境中虛擬網(wǎng)絡(luò)是十分重要但又比較難,需要特別注意;
? ? ? ?在Linux中實(shí)現(xiàn)虛擬網(wǎng)絡(luò)的方法中比較常用的工具有兩個(gè):bridge-utils 和 openvswitch,它們創(chuàng)建的虛擬網(wǎng)絡(luò)設(shè)備是
? ? ? ?不能相互使用的,比如:bridge-utils創(chuàng)建的橋設(shè)備,openvswitch是無法識別的。
? ? ? ?用下圖來做簡單說明

????????

????????注:lo1: 為loopback接口,但實(shí)際測試時(shí),發(fā)現(xiàn)loopback接口無法橋接到虛擬網(wǎng)橋上。

1.10 ?Xen的安全問題導(dǎo)讀
? ? ? 補(bǔ)充見附件:

2. Xen的安裝及配置文件說明

2.1.1 ?在CentOS6.6上運(yùn)行Xen的條件:
? ? ? ?方式一:
? ? ? ? ? ?(1) 編譯3.0以上版本的內(nèi)核,啟動對Dom0的支持.
? ? ? ? ? ?(2) 編譯xen程序
? ? ? ?方式二:
? ? ? ? ? ?使用相關(guān)Xen運(yùn)行環(huán)境快速部署的項(xiàng)目:
? ? ? ? ? ?(1) xen4contos : 這是Xen官方提供的開源項(xiàng)目。
? ? ? ? ? ? ? ? ?xen環(huán)境部署的RPM包鏡像站:?http://mirrors.aliyun.com/centos/6.7/xen4/x86_64/?? ?
? ? ? ? ? ?(2) xen made easy
? ? ? ? ? ?? ? ? ? ??
2.1.2 Xen的配置:
? ? ? ? ? ?(1) 修改grub.conf
? ? ? ? ? ? ? ? # Xen是直接運(yùn)行于硬件層之上的,因此必須修改grub.conf,手動添加以下參數(shù):
? ? ? ? ? ? ? ? title ?Xen Server Linux 3.7.4
? ? ? ? ? ? ? ? ? ? ? ?root (hd0,0)
? ? ? ? ? ? ? ? ? ? ? ?kernel ?/xen.gz ?dom0_mem=1024M ?cpufreq=xen ?dom0_max_vcpus=2 ?dom0_vcpus_pin
? ? ? ? ? ? ? ? ? ? ? ?module??/vmlinuz-3.7.4-1.el6xen.x86_64 ro ?root=/dev/mapper/vg0-root ?rd_NO_LUNKS.UTF-8 ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rd_LVM_LV=vg0/swap ?rd_NO_MDSYSFONT=latarcyrheb-sun16 ?crashkernel=auto ?rd_NO_DM
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?KEYBOARDTYPE=pc ?KEYTABLE=us ?rd_LVM_LV=vg0/root ? rhgb ?quiet
? ? ? ? ? ? ? ? ? ? ? ?module??/initramfs-3.7.4-1.el6xen.x86_64.img
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?注: kernel 必須指定xen*.gz為啟動的內(nèi)核, dom0_mem:設(shè)定Dom0啟動后可以使用的內(nèi)存大小,
? ? ? ? ? ? ? ? ? ? ?cpufreq: 設(shè)定由Xen來管理CPU, ?dom0_max_vcpus: 設(shè)定Dom0可以使用多少顆CPU,
? ? ? ? ? ? ? ? ? ? ?dom0_vcpus_pin: 將Dom0固定在系統(tǒng)啟動后,分配給它的CPU上,以避免它去搶占其它物理CPU核心,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?這樣其它物理核心就可以分配給DomU來使用了。
? ? ? ? ? ? ? ? ? ? ?詳細(xì)參數(shù)查看:
? ? ? ? ? ? ? ? ? ? ? ? ? ?http://xenbits.xen.org/docs/unstable/misc/xen-command-line.html
? ? ? ? ? ? ? ? ? ? ? ? ? ?
2.2.1 Xen 啟動DomU的配置文件說明
? ? ? ?xl ?list : ? ? ?#首先需要了解的第一個(gè)命令.
? ? ? ? ? ?xen VM的常見狀態(tài):
? ? ? ? ? ? ? ?r : running
? ? ? ? ? ? ? ?b: block(阻塞)
? ? ? ? ? ? ? ?p: pause(暫停): 類似與睡眠.
? ? ? ? ? ? ? ?s: stop
? ? ? ? ? ? ? ?c: crash(崩潰)
? ? ? ? ? ? ? ?d: dying, 正在關(guān)閉的過程中.
? ?
2.2.1.1 ?如何創(chuàng)建一個(gè)Xen PV模式的VM:
? ? ? ? ? ?1. Kernel 和 initrd或initramfs :這些LinuxKernel文件必須要有,但可以不在DomU上,它們可以在Dom0上.
? ? ? ? ? ?2. DomU內(nèi)核模塊(即:/lib/modules/`uname -r`): 這些就需要在DomU根文件系統(tǒng)中存儲了。
? ? ? ? ? ?3. 根文件系統(tǒng)
? ? ? ? ? ?4. swap設(shè)備: 若條件充足也可以提供.
? ? ? ? ? ?
? ? ? ? ? ?以上四步的內(nèi)容必須定義在DomU的配置文件中.
? ? ? ? ? ?注: xl 和 xm啟動DomU的配置文件是存在一些不同的.
? ? ? ? ? ?
? ? ? ? ? ?對于xl命令創(chuàng)建VM所需的配置文件說明可查看:
? ? ? ? ? ? ? ? ? ?man ?xl.cfg
? ? ? ? ? ? ? ? ? ?# 注: man ?xl.conf ? ?#這是對xl命令所使用的配置文件.
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ?xl.cfg的配置文件參數(shù)說明:
? ? ? ? ? ? ? ? ? ?name : 域的唯一名.
? ? ? ? ? ? ? ? ? ?builder: 指明VM的類型,generic:創(chuàng)建PV類型的VM; ?HVM:創(chuàng)建HVM類型的VM
? ? ? ? ? ? ? ? ? ?vcpus: 指定CPU個(gè)數(shù).
? ? ? ? ? ? ? ? ? ? ? ? ? ?maxvcpus:指定最大可使用CPU的個(gè)數(shù),這些CPU可在需要是手動啟動。
? ? ? ? ? ? ? ? ? ? ? ? ? ?cpus: 指定VM的vcpu線程可以運(yùn)行在哪些物理核心列表上.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#如:cpus="0-3,5,^1" ? 這表示:VCPU可運(yùn)行在0,2,3,5上,但不能運(yùn)行在1上.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#建議將vCPU綁定到固定的物理核心上,這樣可減少vCPU線程在多個(gè)物理核心上切換.
? ? ? ? ? ? ? ? ? ?memory: 指定DomU啟動時(shí)預(yù)分配的內(nèi)存大小[單位:M]
? ? ? ? ? ? ? ? ? ? ? ? ? ?maxmem: 指定最大給DomU分配的內(nèi)存大小. [單位:M]
? ? ? ? ? ? ? ? ? ?on_poweroff: 指定DomU關(guān)機(jī)時(shí),實(shí)際采用的動作.
? ? ? ? ? ? ? ? ? ? ? ? ? ?destroy: 直接將DomU斷電關(guān)機(jī).
? ? ? ? ? ? ? ? ? ? ? ? ? ?restart: 重啟
? ? ? ? ? ? ? ? ? ? ? ? ? ?rename-restart: 改名后重啟
? ? ? ? ? ? ? ? ? ? ? ? ? ?preserve: 將這個(gè)DomU保存,以便下次再啟動。
? ? ? ? ? ? ? ? ? ? ? ? ? ?coredump-destroy: 將DomU的運(yùn)行中的內(nèi)核數(shù)據(jù)備份出來后,再關(guān)機(jī)。
? ? ? ? ? ? ? ? ? ? ? ? ? ?coredump-restart: 先備份內(nèi)核數(shù)據(jù),再重啟.
? ? ? ? ? ? ? ? ? ?on_reboot: 重啟DomU時(shí)實(shí)際采用的動作。
? ? ? ? ? ? ? ? ? ?on_crash: 當(dāng)DomU崩潰后,實(shí)際采用的動作。
? ? ? ? ? ? ? ? ? ?uuid: DomU的UUID,非必須.
? ? ? ? ? ? ? ? ? ?disk:指定DomU的磁盤列表
? ? ? ? ? ? ? ? ? ? ? ? ? ?如: disk=[ "/img/disk/DomU1.img" , "/dev/sda3" , …]
? ? ? ? ? ? ? ? ? ?vif : 指定DomU的網(wǎng)卡列表
? ? ? ? ? ? ? ? ? ? ? ? ? ?如: vif=[ "NET_SPEC_STRING" , "NET_SPEC_STRING" , …]
? ? ? ? ? ? ? ? ? ?vfb: 指定DomU的顯示器, vfb:virtual frame buffer(虛擬幀緩沖)
? ? ? ? ? ? ? ? ? ? ? ? ? ?如: vfb=[ "VFB_SPEC_STRING" , "VFB_SPEC_STRING" ,…]
? ? ? ? ? ? ? ? ? ?pci :指定DomU的PCI設(shè)備列表.
? ? ? ? ? ? ? ? ? ? ? ? ? ?如:pci=[ "PCI_SPEC_STRING" , "PCI_SPEC_STRING" ,…]
? ? ? ? ? ?PV模型的專用指令:
? ? ? ? ? ? ? ? ? ?kernel : 指定內(nèi)核文件路徑,此路徑為Dom0的路徑.
? ? ? ? ? ? ? ? ? ?ramdisk: 指定initrd或initramfs文件的路徑.
? ? ? ? ? ? ? ? ? ?root: 指定根文件系統(tǒng). 此參數(shù)僅與kernel和ramdisk一起使用,因?yàn)?kernel和ramdisk都是在Dom0上的,
? ? ? ? ? ? ? ? ? ? ? ? ? ?并沒有g(shù)rub.conf來告訴kernel根文件系統(tǒng)在哪里,因此這里需要指定。
? ? ? ? ? ? ? ? ? ?extra: 與root參數(shù)類似,它是指定kernel啟動時(shí)的其它參數(shù)的.
? ? ? ? ? ? ? ??# 以上4個(gè)參數(shù)用于kernel文件在Dom0上, 下面固定格式用于DomU有自身的Kernel文件.
? ? ? ? ? ? ? ? ? ?bootloader="pygrub": 若DomU使用自己的kernel和ramdisk,則此時(shí)需要一個(gè)Dom0中的應(yīng)用程序來
????????????????????????????實(shí)現(xiàn)其bootloader功能; 這個(gè)不用指定root,因?yàn)?DomU的啟動所需的所有文件都在自己
????????????????????????????的鏡像文件中,它可以從grub.conf中指定根文件系統(tǒng)的位置.

? ? ? ? ? ? ? ? 注:
? ? ? ? ? ? ? ? ? ? ?# 讓DomU通過網(wǎng)絡(luò)之間安裝操作系統(tǒng),需要注意:
? ? ? ? ? ? ? ? ? ? ?# ?kernel 和 ramdisk所需要的文件必須是:安裝光盤目錄下/isolinux/{vmlinuz,initrd.img}
? ? ? ? ? ? ? ? ? ? ? ?kernel="/images/kernel/vmlinuz"
? ? ? ? ? ? ? ? ? ? ? ?ramdisk="/images/kernel/initrd.img" ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ?extra="ks=http://1.1.1.1/centos6.6_x86_64.ks" ? ? ? #注:給內(nèi)核傳遞的ks文件。
? ? ? ? ? ? ? ? 另注:【注: 沒有親自測試,若有偏差還望指正.】
? ? ? ? ? ? ? ? ? ? ? ? cloud-init*.rpm工具包可以將安裝的OS中的特有信息(如:MAC, 磁盤信息等)刪除,并且可以在下次啟動時(shí),
? ? ? ? ? ? ? ? ?自動生成這些信息.是制作云模板OS鏡像的工具。
? ?
? ? ? ? ? ?磁盤參數(shù)的指定方式:
? ? ? ? ? ? ? ? ? ?xl方式創(chuàng)建VM時(shí),磁盤指定格式: http://xenbits.xen.org/docs/unstable/misc/xl-disk-configuration.txt
? ? ? ? ? ? ? ? ? ?[<target>, [<format>,[<vdev>,[<access>]]]]
? ? ? ? ? ? ? ? ? ?target: ?表示磁盤映像文件或設(shè)備文件路徑:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如: /images/xen/linux.img
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /dev/vg-xen/lv-linux
? ? ? ? ? ? ? ? ? ?format: 表示磁盤的格式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如: raw、qcow2..等,具體格式可查看: qemu-img ?–help |grep 'Supported formats'
? ? ? ? ? ? ? ? ? ?vdev: 指定添加的虛擬磁盤被DomU識別為何種類型的磁盤; 支持:hd, sd, xvd(xen-vritual-disk)
? ? ? ? ? ? ? ? ? ? ? ? ? ?注: 指定是需要寫成: sda 或 sdb等,即要指定這是第幾塊磁盤.
? ? ? ? ? ? ? ? ? ?access: 訪問權(quán)限,除CDROM為'r'只讀外,其它都為'rw'
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ?示例:
? ? ? ? ? ? ? ? ? ? ? ? disk=["/images/xen/linux.img,qcow2,xvda,rw", ?"/iso/CentOS6.7.iso,,hdc,devtype=cdrom"]
? ? ? ? ? ? ? ? ? ? ? ?# 使用Dom0中物理磁盤分區(qū)做為DomU的存儲空間
? ? ? ? ? ? ? ? ? ? ? ? disk=['/dev/vg-data/lv-bbox,raw,xvda,rw']
? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ?創(chuàng)建虛擬磁盤文件:
? ? ? ? ? ? ? ? ? ? ? ?#注qemu-img創(chuàng)建的磁盤映像文件是采用稀疏磁盤格式創(chuàng)建的.因此用:du -sh ?linux.img 可看到其大小為0.
? ? ? ? ? ? ? ? ? ? ? ?#【qemu-img 的子命令簡介詳見附件】
? ? ? ? ? ? ? ? ? ? ? ?qemu-img ?create ?-f ?raw ?-o ?size=2G ? /images/xen/linux.img ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?或 ?qemu-img ?create ?-f ?raw ?/images/xen/linux.img ?2G
? ? ? ? ? ? ? ? ? ? ? ?若想知道當(dāng)前指定的磁盤格式支持哪些額外參數(shù):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?qemu-img ?create ?-f ?qcow2 ?-o ?? ? /images/xen/linux.img ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?size : 指定qcow2格式的虛擬磁盤大小。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?backing_file: 指定其后端存儲快照信息的映像文件位置.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?backing_fmt: 指定后端映像文件的格式。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?encryption: 是否對創(chuàng)建的映像文件加密
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cluster_size: 指定qcow2格式的簇大小.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?preallocation: 指定創(chuàng)建qcow2格式的磁盤映像文件時(shí),需要預(yù)先做些什么:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?> off : 什么也不做,創(chuàng)建一個(gè)空磁盤.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?> metadata: 預(yù)先創(chuàng)建qcow2的元數(shù)據(jù)信息,建議設(shè)置.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?> full: 直接填充成指定大小的磁盤文件,它包含了metadata.
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ?創(chuàng)建虛擬網(wǎng)絡(luò)接口:
? ? ? ? ? ? ? ? ? ? ? ?#虛擬網(wǎng)卡的創(chuàng)建直接在配置文件中使用vif指定即可。
? ? ? ? ? ? ? ? ? ? ? ?#格式: vif=[ "NET_SPEC_STRING" , "NET_SPEC_STRING" , …]
? ? ? ? ? ? ? ? ? ? ? ?NET_SPEC_STRING:的格式如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?key=value
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?key包含以下幾個(gè):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?》mac :指定網(wǎng)卡的MAC地址,注:MAC地址必須以:00:16:3e 開頭,這是IANA分配給Xen的MAC廠商前綴.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?》bridge: 指定此網(wǎng)卡要橋接到Dom0上的那個(gè)橋設(shè)備上.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?》model: 指定模擬網(wǎng)卡的芯片類型:[rtl8139 |e1000]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?》vifname:指定在Dom0中顯示的接口名, 注: 在DomU中顯示還是eth0…
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?》script: DomU在創(chuàng)建網(wǎng)絡(luò)接口時(shí),預(yù)先執(zhí)行的腳本.注: 此腳本的路徑也是Dom0上的路徑.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?》ip:指定要注入DomU中的IP地址。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?》rate: 指定網(wǎng)卡的設(shè)備速率.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如: rate=10Mb/s?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rate=1MB/s@20ms ? ? ?#20毫秒內(nèi)只能傳輸1M/0.02s=20000字節(jié)/20ms
? ? ??
? ? ? ? ? ? ? ? ? 圖形窗口的啟用:
? ? ? ? ? ? ? ? ? ? ? ?可直接修改DomU的啟動配置文件,并在其中添加:
? ? ? ? ? ? ? ? ? ? ? ? ? ?(1) vfb=['sdl=1'] ? ? ? #這是直接在本地啟動一個(gè)VNC窗口來輸出DomU的圖形桌面,且只能本地連接.
? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)Dom0上啟動一個(gè)VNC進(jìn)程,并監(jiān)聽在5900端口上,可通過密碼連接.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?vfb=['vnc=1,vnclisten=0.0.0.0,vncpasswd=123456,vncunused=1,vncdisplay=:1']
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#注: vncunused: 為非0值,則表示vncserver監(jiān)聽在大于5900的第一個(gè)沒被占用的端口上.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# vncdisplay: VNC顯示號,默認(rèn)為當(dāng)前域的ID,當(dāng)前域的VNC服務(wù)器將監(jiān)聽在5900+此顯示號的端口上.

3. 使用libvirt實(shí)現(xiàn)Xen虛擬機(jī)的圖形管理
? ? ? ?yum install ?libvirt ?libvirt-deamon-xen ?virt-manager ?python-virtinst ?libvirt-client
? ? ? ?注: virt-manager: 是圖形管理VM的接口界面,類似與VMware,可創(chuàng)建、啟動、停止等
? ? ? ? ? ? ? ?python-virtinst: 此工具提供了virt-install命令行管理VM的接口.
? ? ? ? ? ? ? ?libvirt-client: 提供了一個(gè)virsh命令來管理VM。
? ? ? ? ? ? ? ?
? ? ? ?service ?libvirtd ?start ? ?#要使用libvirt工具集,此服務(wù)必須首先啟動.
? ? ? ?virsh ?dumpxml ?busybox ? ? #將busybox的信息輸出為virsh的可用的xml配置文件,可修改此文件做模板來創(chuàng)建新VM實(shí)例.
? ? ? ? ? ? ? ?

4. PV DomU的根文件系統(tǒng)可以以多種不同的方式安置:
? ?(1) 虛擬磁盤映像文件
? ? ? ?(a)方便制作成通用模板
? ? ? ? ? ? ? ?當(dāng)用qemu-img創(chuàng)建好一個(gè)虛擬磁盤映像文件,并向其中安裝好OS后,可以使用cloud-init這種工具對其進(jìn)行
? ? ? ? ?修改,去除其中OS的唯一性的數(shù)據(jù)信息(如:MAC地址等),需要注意的是,磁盤映像文件實(shí)際上是由標(biāo)準(zhǔn)格式的并且
? ? ? ? ?在其上創(chuàng)建完文件系統(tǒng)后,就可以通過FS的API接口在不掛載的情況下對其中的文件進(jìn)行修改.
? ? ? ?(b)方便實(shí)現(xiàn)實(shí)時(shí)遷移
? ? ? ? ? ? ? ? 1. 將模板映像文件放置于FTP/NFS/Samba等共享存儲上,且有多臺Xen Hypervisor:
? ? ? ? ? ? ? ? ? ? ?場景一: 需要快速創(chuàng)建一臺VM.
? ? ? ? ? ? ? ? ? ? ? ? ? ?假如當(dāng)前業(yè)務(wù)中MySQL的從庫讀壓力過大,需要擴(kuò)容,此時(shí)就可以直接通過自行開發(fā)的腳本工具來判斷
? ? ? ? ? ? ? ? ? ? ? ?當(dāng)前那個(gè)Xen Hypervisor更空閑,然后,直接下載從共享存儲上下載一個(gè)模板磁盤映像,直接就可以啟動起來.
? ? ? ? ? ? ? ? ? ? ? ?并且這是配置好的從庫模板,啟動后它可以直接連接到主庫等等.
? ? ? ? ? ? ? ? ? ? ? 場景二: 快速遷移
? ? ? ? ? ? ? ? ? ? ? ? ? ?假如當(dāng)前某臺Xen Hypervisor的CPU、Memory或其他資源突然升高,此時(shí),可直接將該Xen Hypervisor上
? ? ? ? ? ? ? ? ? ? ? ? 某些VM的內(nèi)存數(shù)據(jù)導(dǎo)出到共享存儲上,然后直接在另一臺比較寬裕的Xen Hypervisor上,下載模板映像文
? ? ? ? ? ? ? ? ? ? ? ? 件并直接將該共享存儲上導(dǎo)出的內(nèi)存數(shù)據(jù)與模板映像文件關(guān)聯(lián),就可恢復(fù)到此Xen Hypervisor上實(shí)現(xiàn)快速遷移。
? ? ? ? ? ? ? ? 2.分布式文件系統(tǒng)上存儲磁盤映像文件,且有多臺Xen Hypervisor:
? ? ? ? ? ? ? ? ? ? ? ?場景一: 故障快速恢復(fù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 假如當(dāng)前Xen Hypervisor上運(yùn)行了多臺VM,但Xen Hypervisor所在物理機(jī)突然故障,這時(shí),我們完全可以直接
? ? ? ? ? ? ? ? ? ? ? ?將分布式存儲系統(tǒng)上的磁盤映像文件直接讓正常的Xen Hypervisor接管,已實(shí)現(xiàn)快速遷移.
? ? ? ? ? ? ? ? ? ? ? ?場景二:快速遷移
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如上面場景二類似,但此處我們無需在下模板磁盤映像文件,直接dump出運(yùn)行中VM的內(nèi)存數(shù)據(jù)到共享存儲上
? ? ? ? ? ? ? ? ? ? ? ?就可以直接在另一臺Xen Hypervisor上啟動起來。
????(2) 使用Dom0上空閑的物理磁盤分區(qū)
? ? (3) 使用Dom0上空閑的邏輯卷
? ? (4) 使用iSCSI設(shè)備提供的塊級別網(wǎng)絡(luò)文件系統(tǒng) 或 分布式文件系統(tǒng)。
? ? (5) 網(wǎng)絡(luò)文件系統(tǒng),如: NFS, Samba

?

實(shí)驗(yàn)?zāi)夸?
? ?1. 環(huán)境說明
? ?2. Xen的安裝和配置
? ?3. 未解決的問題
? ? ? ?1.在DomU的配置中添加sdl=1,啟動報(bào)錯(cuò),改為vnc=1,正常.
? ? ? ?2.配置文件中指定IP,但啟動DomU后,IP并沒有自動配置上.
? ? ? ?3.不能動態(tài)調(diào)整vCPU的個(gè)數(shù).
? ? ? ?4.以上問題若有高手知道,非常愿意交流。
? ?4. 創(chuàng)建第一臺Xen DomU
? ? ? ?4.1 創(chuàng)建并啟動DomU
? ? ? ?4.2 基本功能測試
? ? ? ? ? ?1. 測試啟動DomU的圖形窗口(僅本地可連的VNC(sdl=1) 和 可遠(yuǎn)程連接的VNC(vnc=1)).
? ? ? ? ? ?2. 測試動態(tài)添加和移除磁盤
? ? ? ? ? ?3. 測試動態(tài)添加和移除網(wǎng)卡
? ? ? ? ? ?4. 測試掛起DomU(即:將DomU的內(nèi)存數(shù)據(jù)導(dǎo)出到文件.)
? ? ? ? ? ?5. 測試恢復(fù)DomU.
? ? ? ? ? ?6. 測試動態(tài)增加內(nèi)存和CPU
? ? ? ? ? ?7. 測試創(chuàng)建克隆DomU.
? ? ? ? ? ? ? ?1) 類似VMware中的連接克隆
? ? ? ? ? ? ? ?2) 直接復(fù)制HVM DomU的img映像文件來克隆DomU.
? ? ? ? ? ?8. 測試遷移DomU
? ? ? ? ? ?9. Xen的提供的批量操作DomU的腳本簡單分析: xendomains
? ? ? ? ? ?10. xenstore的簡單操作說明.
? ?
? ?以上測試因本人對Xen的理解實(shí)在有限,不能更深入測試,以下測試僅本人親自測試所作,若有錯(cuò)誤或遺漏,還望多多指出,僅做拋磚引玉。

測試環(huán)境:
? ?Dom0:CentOS 6.7(Kernel:2.6.32)
? ?Xen安裝源:?http://mirrors.aliyun.com/centos/6.7/xen4/x86_64/
? ?Xen環(huán)境:
? ? ? ?Kernel: 3.18.21-16.el6.x86_64
? ? ? ?Xen: xen-4.4.3-3.el6.gz
? ? ? ?
Xen的安裝:

???????#?配置yum源:[root@centos6?~]#?cat??/etc/yum.repos.d/xen.repo[Aliyun]name=aliyun-xen-mirrorsbaseurl=http://mirrors.aliyun.com/centos/6.7/xen4/x86_64/enabled=1gpgcheck=0 ???????#?安裝Xen[root@centos6?~]#?yum?install?xen #?配置啟動Xen: [root@centos6?~]#?cat??/boot/grub/grub.confdefault=0timeout=5splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenutitle?Xen-Dom0-CentOS?(3.18.21-16.el6.x86_64)root?(hd0,0)kernel???/xen.gz?dom0_mem=1024M?cpufreq=xen?dom0_max_vcpus=2?dom0_vcpus_pinmodule??/vmlinuz-3.18.21-16.el6.x86_64?ro?root=UUID=11753f30-71af-4c50-8f64-32ddbed68711?nomodeset?rd_NO_LUKS?KEYBOARDTYPE=pc?KEYTABLE=us.UTF-8?rd_NO_MD?SYSFONT=latarcyrheb-sun16?crashkernel=auto?rd_NO_LVM?rd_NO_DM?rhgb?quietmodule??/initramfs-3.18.21-16.el6.x86_64.imgtitle?CentOS?6?(2.6.32-573.el6.x86_64)root?(hd0,0)kernel?/vmlinuz-2.6.32-573.el6.x86_64?ro?root=UUID=11753f30-71af-4c50-8f64-32ddbed68711?nomodeset?rd_NO_LUKS?KEYBOARDTYPE=pc?KEYTABLE=us.UTF-8?rd_NO_MD?SYSFONT=latarcyrheb-sun16?crashkernel=autord_NO_LVM?rd_NO_DM?rhgb?quietinitrd?/initramfs-2.6.32-573.el6.x86_64.img

創(chuàng)建一臺cirros虛擬機(jī):
? ? ? ?(1) 下載Cirros:?http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
? ? ? ?(2) 創(chuàng)建image存儲目錄

??????????????[root@centos6?~]#?mkdir??-pv??/images/xen/[root@centos6?~]#?cp??cirros-0.3.4-x86_64-disk.img???/images/xen/cirros.img

? ? ? ?(3) 創(chuàng)建Xen DomU的啟動配置文件:

??????????????[root@centos6?~]#?cd??/etc/xen[root@centos6?~]#?cp??xlexample.pvlinux???cirros#?修改cirros后配置如下:[root@centos6?~]#?grep?-Ev?'^$|^#'???cirros?name?=?"cirros-001"bootloader="pygrub"memory?=?512vcpus?=?2vif?=?[?'bridge=xenbr0'?]disk?=?[?'/images/xen/cirros.img,qcow2,xvda,rw'?]

? ? ? ?(4) 創(chuàng)建橋接口

???????????????#注:?在創(chuàng)建橋接口前,需要先注意禁止NetworkManager服務(wù)啟動.#???????service??NetworkManager??stop??&&??chkconfig??NetworkManager??off#橋接口的作用:#?????DomU啟動后,它若需要與Dom0或外網(wǎng)通信就需要通過Dom0來實(shí)現(xiàn),而Dom0實(shí)現(xiàn)的方式就是#?創(chuàng)建橋接口,橋接后,系統(tǒng)會將Dom0的物理網(wǎng)卡模擬成一個(gè)二層交換機(jī),然后,創(chuàng)建一個(gè)虛接口代替#?ethX,?這樣當(dāng)物理網(wǎng)卡收到目的MAC是自己的數(shù)據(jù)包時(shí),就轉(zhuǎn)發(fā)到虛接口上.若不是則轉(zhuǎn)發(fā)給后端DomU.[root@centos6?~]#?cat?ifcfg-eth0?DEVICE=eth0TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=noneBRIDGE=xenbr0USERCTL=no[root@centos6?~]#?cat?ifcfg-xenbr0?DEVICE=xenbr0TYPE=BridgeONBOOT=yesNM_CONTROLLED=noBOOTPROTO=noneIPADDR=192.168.137.132NETMASK=255.255.255.0GATEWAY=192.168.137.1DNS1=114.114.114.114USERCTL=noDELAY=0

? ? ? ?(5) 測試啟動

??????#?注:測試啟動后,請注意網(wǎng)卡的MAC地址.?由于上面配置文件中沒有指定MAC地址,因此每次啟動后,#???????其MAC地址會被Xen自動重新分配.#???-c?:?啟動的同時(shí)進(jìn)入控制臺.#???-n?:?檢查配置文件,非真正啟動.[root@centos6?~]#?xl??create??cirros??-c??#啟動并登錄DomU的終端后,若要退回的Dom0,按:?Ctrl+],?#?若退回到Dom0后,?Xshell?等連接工具不能正常顯示:可輸入reset來重置.[root@centos6?~]#?xl??console??cirros-001??#手動登錄cirros的控制臺

? ? ? ?基本命令使用說明

???????????xl??help??create????????#查看創(chuàng)建DomU的幫助xl??-v??create??/etc/xen/cirros??-n????????????#測試配置文件是否符合需求.xl??create??/etc/xen/cirros??-c?????????????????#創(chuàng)建并啟動成功后,立刻連接到其控制臺上.xl??-v??create??/etc/xen/cirros?????????????????#啟動cirros虛擬機(jī)xl??list????????#查看當(dāng)前運(yùn)行的VM情況xl??console???cirros-001???????????#連接到剛剛啟動的cirros虛擬機(jī)的控制臺.ctrl?+?]??????????????????????????????????????#退回到Dom0.exit??????????????????????????????????????????#拆除cirros,即銷毀cirros.xl??destroy??cirros-001????????????#關(guān)機(jī)并銷毀cirros,?注:銷毀后,下次再用配置文件啟動DomU時(shí),就是一個(gè)新的DomU了.

? ? ? ? ? ?啟動cirros虛擬機(jī)登錄后:

????????????????ifconfig??-a????????????????????????????????????????????????#是看不到任何接口的.insmod??/lib/modules/xen-netfront.ko????????#安裝網(wǎng)卡接口驅(qū)動模塊ifconfig??-a?ifconfig??eth0??192.168.1.20??upctrl?+?]????????????#?回到到Dom0,查看網(wǎng)絡(luò)接口狀態(tài).Dom0:??ifconfig??-a?????#將可以看到一個(gè)新接口.vif#.@?#?"#":?表示DomU的ID?;??@:表示Dom0上創(chuàng)建的橋ID.Dom0:??brctl??show?????#將看到新接口已經(jīng)被橋接到Dom0的橋設(shè)備上了。

? ?xl的其它常用命令:

????????xl??shutdown???DomU_Namexl??reboot???DomU_Namexl??pause???DomU_Name?????????#暫停DomUxl??unpause??DomU_Namexl??save??DomU_Name????/path/to/save_name.img????/etc/xen/ConfigFile?#將DomU掛起。xl??restore??/etc/xen/ConfigFile???/path/to/save_name.img????????????#恢復(fù)DomU到運(yùn)行態(tài),無需指定DomU_Name.xl??help??cd-insert??????????????#插入光驅(qū),僅適用于HVM模式xl??help??cd-eject???????????????#拔出光驅(qū)xl??vcpu-list???DomU_Name????????#顯示DomU上有幾顆真正使用的虛擬CPU.#CPU?Affinity:表示該虛擬CPU線程可以運(yùn)行在哪些物理核心上.xl??vcpu-pin??DomU_ID??0??3??????#將DomU的0號VCPU綁定到物理核心3上.xl??vcpu-set??DomU_Name??1???????#設(shè)置DomU當(dāng)前只能使用1顆VCPU.若當(dāng)前它有多顆VCPU,則其它CPU將被暫停.#注:?若在配置文件中指定了maxvcpus?,則此命令可動態(tài)添加VCPU數(shù)量.#??????否則只能在當(dāng)前VCPU總數(shù)的基礎(chǔ)上減少。xl??pci-list???DomU_Name????????#顯示當(dāng)前DomU上的PCI設(shè)備.xl??pci-attach??DomU_Name???????#給運(yùn)行時(shí)的DomU添加一塊PCI設(shè)備.xl??pci-detach??DomU_Name???????#將運(yùn)行的DomU中的PCI設(shè)備直接移除。xl??info????????????#查看當(dāng)前Xen?Hypervisor的摘要描述信息--?nr_cpus??????#物理核心總數(shù)--?max_cpu_id???#最大支持的VCPU個(gè)數(shù)#更詳細(xì)的信息參見:http://smilejay.com/2012/03/xl-info_xm-info/xl??demsg?DomU_Name?????????#查看DomU啟動時(shí)信息.xl??top?????????????????????#查看DomU的資源使用情況.xl??network-list???DomU_Name??????????????????????#查看DomU的網(wǎng)絡(luò)接口列表xl??network-attach??DomU_Name??bridge="xenbr1"????#給運(yùn)行中DomU添加一塊虛擬網(wǎng)卡.xl??network-detach??DomU_Name??1??????????????????#拆除網(wǎng)卡編號為1的網(wǎng)卡.qemu-img??create??-f??qcow2??-o??size=3G,preallocation=metadata??/images/xen/busybox.2.imgxl??block-list???DomU_Name????????????#查看當(dāng)前DomU_Name的磁盤列表.xl??block-attach??DomU_Name???'/images/xen/busybox.2.img,qcow2,xvdb,rw'????#給DomU添加一個(gè)磁盤設(shè)備.xl??block-detach??DomU_Name???DevID???#移除一塊磁盤.block-list中Vdev項(xiàng)就是DevID.xl??uptime??DomU_Name???????#查看DomU的運(yùn)行時(shí)長.

基本功能測試部分:
? ?(6) 測試打開本地圖形窗口:

[root@centos6?~]#?echo??"vfb='['sdl=1']'"?>>?/etc/xen/cirros??????#開啟僅本機(jī)訪問的VNC窗口.#?測試失敗,報(bào)一下錯(cuò)誤:#?Parsing?config?from?cirros#?libxl:?notice:?libxl_numa.c:494:libxl__get_numa_candidate:?NUMA?placement?failed,?performance?might?be?affected#?libxl:?error:?libxl_dm.c:1401:device_model_spawn_outcome:?domain?1?device?model:?spawn?failed?(rc=-3)#?libxl:?error:?libxl_create.c:1189:domcreate_devmodel_started:?device?model?did?not?start:?-3#?libxl:?error:?libxl_dm.c:1505:kill_device_model:?Device?Model?already?exited#?測試使用VNC遠(yuǎn)程連接打開.#?開啟可遠(yuǎn)程連接的VNC服務(wù). [root@centos6?~]#?echo?"vfb=['vnc=1,vnclisten=0.0.0.0,vncpasswd=123456']"???>>??/etc/xen/cirros

? ?(7) 測試動態(tài)添加和拆除磁盤

???????????[root@centos6?~]#?qemu-img??create??-f??raw??-o??size=1G???/images/xen/cirros-01.img[root@centos6?~]#?xl??block-attach???cirros-001??'/images/xen/cirros-01.img,raw,xvdb,rw'[root@centos6?~]#?xl??console??cirros-001[root@centos6?~]#??fdisk?-l?|grep?'Disk?/dev'Disk?/dev/xvda:?41?MB,?41126400?bytesDisk?/dev/xvdb:?1073?MB,?1073741824?bytes???????#可以看到已經(jīng)添加成功.[root@centos6?~]#?xl?block-list?cirros-001Vdev??BE??handle?state?evt-ch?ring-ref?BE-path???????????????????????51728?0???2??????4?????17?????793??????/local/domain/0/backend/vbd/2/51728????#一定注意:新加的磁盤不一定是顯示在末行.51712?0???2??????4?????15?????8????????/local/domain/0/backend/qdisk/2/51712[root@centos6?~]#?xl?block-detach?cirros-001?51728????????????#拆除磁盤.DEBUG?libxl__device_destroy_tapdisk?105?type=aio:/images/xen/cirros-01.img?disk=:/images/xen/cirros-01.img[root@centos6?~]#?xl?-v?block-list?cirros-001Vdev??BE??handle?state?evt-ch?ring-ref?BE-path???????????????????????51712?0???2??????4?????15?????8????????/local/domain/0/backend/qdisk/2/51712

? ?(8) 測試動態(tài)添加網(wǎng)卡

??????????[root@centos6?~]#?xl?network-attach??cirros-001???????????#不加參數(shù)也可以添加虛擬網(wǎng)卡.[root@centos6?~]#?xl?network-attach?cirros-001?'ip=1.1.1.2,bridge=xenbr1'?????????#添加參數(shù),但I(xiàn)P參數(shù)沒有生效.不知為何?[root@centos6?~]#?xl?network-list?cirros-001Idx?BE?Mac?Addr.?????????handle?state?evt-ch???tx-/rx-ring-ref?BE-path???????????????????????0???0??00:16:3e:0e:ae:e1?????0?????4?????16???775/774?????????/local/domain/0/backend/vif/1/01???0??00:16:3e:68:3e:4f?????1?????4?????17??1280/1281????????/local/domain/0/backend/vif/1/12???0??00:16:3e:77:0b:eb?????2?????4?????18??1792/1793????????/local/domain/0/backend/vif/1/2

? ?(9) 保存DomU當(dāng)前的內(nèi)存數(shù)據(jù)到指定位置.

????????????#?注:默認(rèn)掛起后,會destroy?DomU.#????-p?:?保存當(dāng)前時(shí)刻的內(nèi)存狀態(tài)后,將DomU暫停在內(nèi)存中.#????-c?:?保存當(dāng)前時(shí)間的內(nèi)存狀態(tài)后,?DomU繼續(xù)運(yùn)行.[root@centos6?~]#?xl?save?-p?cirros-001?/tmp/cirros-04070526.img?/etc/xen/cirros?Saving?to?/tmp/cirros-04070526.img?new?xl?format?(info?0x0/0x0/1307)xc:?Saving?memory:?iter?0?(last?sent?0?skipped?0):?131072/131072??100%?[root@centos6?~]#?xl?listName????????????????????????????????????????ID???Mem?VCPUs?State?Time(s)Domain-0?????????????????????????????????????0??1024?????2?????r-----?????610.2cirros-001???????????????????????????????????2???512?????2?????--p---???????1.5[root@centos6?~]#?xl?console?cirros-001[10489.060379]?Freezing?user?space?processes?...?(elapsed?0.01?seconds)?done.[root@centos6?~]#?xl?save??-c??cirros-001?/tmp/cirros-04070538.img?/etc/xen/cirros?Saving?to?/tmp/cirros-04070538.img?new?xl?format?(info?0x0/0x0/1307)xc:?Saving?memory:?iter?0?(last?sent?0?skipped?0):?131072/131072??100%[root@centos6?~]#?xl?list??????????????????????????????????????????????Name????????????????????????????????????????ID???Mem?VCPUs?State?Time(s)Domain-0?????????????????????????????????????0??1024?????2?????r-----?????682.5cirros-001???????????????????????????????????2???512?????2?????-b----???????2.1

? ?(10) 恢復(fù)保存的DomU狀態(tài)

???????????[root@centos6?~]#?xl?restore?/etc/xen/cirros?/tmp/cirros-04070538.img?Loading?new?save?file?/tmp/cirros-04070538.img?(new?xl?fmt?info?0x0/0x0/1307)Savefile?contains?xl?domain?configParsing?config?from?/etc/xen/cirroslibxl:?notice:?libxl_numa.c:494:libxl__get_numa_candidate:?NUMA?placement?failed,?performance?might?be?affectedxc:?Reloading?memory?pages:?131072/131072??100%#?注:?在保存內(nèi)存數(shù)據(jù)前,我事先為cirros添加了一塊磁盤?和?一塊網(wǎng)卡.#??????請注意:?恢復(fù)DomU后,動態(tài)關(guān)聯(lián)的網(wǎng)卡和磁盤都已經(jīng)被去除了。[root@centos6?~]#?xl?network-list?cirros-001Idx?BE?Mac?Addr.?????????handle?state?evt-ch???tx-/rx-ring-ref?BE-path???????????????????????0???0??00:16:3e:48:55:6d?????0?????4?????16???775/774?????????/local/domain/0/backend/vif/5/0[root@centos6?~]#?xl?block-list?cirros-001Vdev??BE??handle?state?evt-ch?ring-ref?BE-path???????????????????????51712?0???5??????4?????15?????8????????/local/domain/0/backend/qdisk/5/51712

? ?(11) 測試動態(tài)增加內(nèi)存和CPU:

??????????[root@centos6?xen]#?xl?listName????????????????????????????????????????ID???Mem?VCPUs?State?Time(s)Domain-0?????????????????????????????????????0??1024?????2?????r-----?????932.5cirros-001???????????????????????????????????6???512?????1?????-b----???????4.3busybox-001??????????????????????????????????7???256?????1?????-b----??????10.0[root@centos6?xen]#?grep?-Ev?'^$|^#'?cirros?name?=?"cirros-001"bootloader="pygrub"memory?=?512maxmem?=?1024vcpus?=?1maxvcpus?=?3cpus?=?"0-2"????????????????????????????#將CPU綁定到0,1,2這三顆物理核心上.vif?=?[?'ip=10.1.0.10,bridge=xenbr0'?]??#?IP參數(shù)設(shè)置后,測試發(fā)現(xiàn)總是不生效,不知原因?yàn)楹?#xff1f;disk?=?[?'/images/xen/cirros.img,qcow2,xvda,rw'?]vfb?=?[?'vnc=1,vncpasswd=123456,vnclisten=0.0.0.0'?][root@centos6?xen]#?grep?-Ev?'^$|^#'?busyboxname?=?"busybox-001"kernel?=?"/boot/vmlinuz"ramdisk?=?"/boot/initramfs.img"extra?=?"selinux=0?init=/bin/sh?"root?=?"/dev/xvda?ro"memory?=?256vcpus?=?1vif?=?[?'ip=10.1.0.11,bridge=xenbr1'?]??disk?=?[?'/images/xen/busybox.img,raw,xvda,rw'?]?[root@centos6?xen]#?xl?mem-set?cirros-001?600m[root@centos6?xen]#?xl?mem-set?busybox-001?300mlibxl:?error:?libxl.c:4106:libxl_set_memory_target:?memory_dynamic_max?must?be?less?than?or?equal?to?memory_static_max[root@centos6?xen]#?xl?listName????????????????????????????????????????ID???Mem?VCPUs?State?Time(s)Domain-0?????????????????????????????????????0??1024?????2?????r-----?????945.7busybox-001??????????????????????????????????7???256?????1?????-b----??????10.2cirros-001???????????????????????????????????8???600?????1?????-b----???????2.8#?上面測試結(jié)果顯示:?必須在配置文件中啟動最大內(nèi)存(maxmem)參數(shù),才能使用命令來動態(tài)調(diào)整Memory.#??能否使用mem-max動態(tài)增加最大內(nèi)存那?[root@centos6?xen]#?xl?mem-max?busybox-001?512m[root@centos6?xen]#?xl?listName????????????????????????????????????????ID???Mem?VCPUs?State?Time(s)Domain-0?????????????????????????????????????0??1024?????2?????r-----?????947.4busybox-001??????????????????????????????????7???256?????1?????-b----??????10.2cirros-001???????????????????????????????????8???600?????1?????-b----???????2.9[root@centos6?xen]#?xl?mem-set?busybox-001?300mlibxl:?error:?libxl.c:4106:libxl_set_memory_target:?memory_dynamic_max?must?be?less?than?or?equal?to?memory_static_max[root@centos6?xen]#?xl?listName????????????????????????????????????????ID???Mem?VCPUs?State?Time(s)Domain-0?????????????????????????????????????0??1024?????2?????r-----?????947.7busybox-001??????????????????????????????????7???256?????1?????-b----??????10.2?????#測試結(jié)果:?必須修改配置文件.cirros-001???????????????????????????????????8???600?????1?????-b----???????2.9[root@centos6?xen]#?xl?vcpu-set?cirros-001?3[root@centos6?xen]#?xl?vcpu-list?cirros-001Name????????????????????????????????ID??VCPU???CPU?State???Time(s)?CPU?Affinitycirros-001???????????????????????????8?????0????0???-b-???????2.7??all??????#注:?動態(tài)調(diào)整VCPU個(gè)數(shù)后,并沒有動態(tài)激活更多的VCPU.cirros-001???????????????????????????8?????1????-???--p???????0.1??all???????#????問題原因,目前還不清楚...cirros-001???????????????????????????8?????2????-???--p???????0.1??all???????#?在DomU中查看?cat??/proc/cpuinfo,也只有一顆.

? ?(12) 測試創(chuàng)建克隆DomU.
? ? ? ? ? ?1) 類似VMware中的連接克隆.

???????????#注:?通過qemu-img來創(chuàng)建一個(gè)關(guān)聯(lián)后端文件的img鏡像文件.#????來測試連接克隆,但測試結(jié)果是失敗的。#?嘗試發(fā)現(xiàn):?將連接鏡像文件做為磁盤啟動后,再里面所做的修改,在關(guān)機(jī)后會同步到后端鏡像文件中。#?另注:?個(gè)人認(rèn)為連接克隆不適合線上操作,?僅個(gè)人使用時(shí)節(jié)省空間是比較好的選擇。因此,可不必深究.qemu-img??create??-f??qcow2??-o??backing_file=/images/xen/cirros.img????/images/xen/cirros.link.img

? ? ? ? ? ?2) 直接復(fù)制HVM DomU的img映像文件來克隆DomU.
? ? ? ? ? ? ? ?# Linux測試沒有發(fā)現(xiàn)太多異常,除了MAC會在每次create時(shí)重新生成外,相互訪問正常,水平有限,望高手勿噴。
? ? ? ? ? ? ? ?# Windows的測試,此處采用WinXP來測試,WinXP僅支持HVM模式(完全虛擬化)下測試.
? ? ? ? ? ? ? ?(a) 我的CPU支持VT-x,因此在VMware中開啟了VT-x輸出給VM的功能:

????????????????

? ? ? ? ? ? ? ? (b) 提供WinXP的基本配置文件

??????????????[root@centos6?xen]#?grep?-Ev?'^$|^#'?winxpbuilder?=?"hvm"name?=?"WinXP-001"memory?=?1024vcpus?=?2vif?=?[?'bridge=xenbr0'?]disk?=?[?'/images/xen/winxp.img,qcow2,xvda,rw'?,?'/mnt/win7/windows/WinXPSP3-Vol.iso,,hdc,cdrom']vnc?=?1

? ? ? ? ? ? ? (c)啟動WinXP后,連接VNC開始從CDROM安裝WinXP.

???????????????#注:我的筆記本內(nèi)存只有8G,分配給Xen?VM?4G,但安裝WinXP依然巨慢,安裝了一個(gè)晚上才基本裝好.vncviewer??127.0.0.1:5900

? ? ? ? ? ? ? (d)克隆WinXP的映像文件

???????????????????????cp??-a???/images/xen/winxp.img???/images/xen/winxp-2.img

? ? ? ? ? ? ? (e)測試結(jié)果:
? ? ? ? ? ? ? ? ? ?> WinXP可以啟動,MAC地址可以在配置文件中指定來保障其不是每次重啟后都改變.
? ? ? ? ? ? ? ? ? ?> 但查詢Windows的SID時(shí), 直接復(fù)制的映像文件與原有的映像文件的SID是相同的.
? ? ? ? ? ? ? ? ? ? ? ?這也是應(yīng)該是必然,Xen還不太可能每次create時(shí)去修改Windows的SID.
? ? ? ? ? ? ? ? ? 注:
? ? ? ? ? ? ? ? ? ? ? ?Windows查看當(dāng)前用戶的SID:
? ? ? ? ? ? ? ? ? ? ? ? ? ?開始–>運(yùn)行–>regedit–>HKEY_USERS 下面兩個(gè)就是當(dāng)前用戶的SID.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如: S-1-5-21-861567501-1326574676-682003330-1003
? ? ? ? ? ? ? ? ? ? Windows SID的重要性:?http://www.cnblogs.com/mq0036/p/3518542.html
? ? ? ? ? ? ? ? ? ? SID = Security Identifiers,安全標(biāo)識符,是標(biāo)識用戶、組和計(jì)算機(jī)帳戶的唯一的號碼。
? ? ? ? ? ? ?如果兩臺電腦的SID相同,在一個(gè)局域網(wǎng)里就會發(fā)生沖突,比如自己GHOST了系統(tǒng),然后還原到其它電腦上,
? ? ? ? ? ? ?這時(shí)候的SID是相同的,就會產(chǎn)生沖突。另外A和B兩臺PC機(jī)的管理員SID相同,則A上僅管理員可訪問的共享,
? ? ? ? ? ? ?B上的管理員也將可訪問,當(dāng)然A也能訪問B.

? ?(13) Xen的實(shí)時(shí)遷移

????????????#?xl??命令做遷移比較簡單,直接使用以下命令即可實(shí)現(xiàn):#?-C?:?指定DomU的配置文件,非必須.#?192.168.137.151:?目標(biāo)Xen?Hypervisor的IP.#?注:?遷移的條件:?#???????(1)?busybox-001的磁盤映像文件,在目標(biāo)Xen?Hypervisor上必須能訪問到.#???????(2)?兩邊的/etc/hosts文件最好一致.因?yàn)?xl?的遷移實(shí)際上是采用ssh隧道來完成的.#?另注:?由于測試時(shí),啟動兩臺Xen?Hypervisor后,總是會導(dǎo)致其中一臺在不確定的時(shí)間掛掉.#????????導(dǎo)致沒能做的太詳細(xì),我在遷移時(shí),先是將busybox-001的磁盤映像文件拷貝到目標(biāo)機(jī)上后,#????????在執(zhí)行以下命令就成功了。但要注意目錄必須與busybox配置文件中一致.#?當(dāng)然,最好是先用iSCSI或NFS,Samba等將磁盤映像文件共享,在做以下操作會更真實(shí).xl??migrate??-C??/etc/xen/busybox???busybox-001???192.168.137.151

? ?(14) 關(guān)于Xen提供的批量啟動、停止或遷移DomU的腳本—-xendomains的分析說明:

????????????#注:?此腳本存在一個(gè)小Bug,需要小小的修改下.#?????下面分析僅僅對start?和?stop函數(shù)做簡略說明,其它部分可自行參看:?/etc/init.d/xendomains#??????xendomains:?會讀取/etc/sysconfig/xendomains這個(gè)默認(rèn)參數(shù)配置文件.parseln(){if?[[?"$1"?=~?'(domain'?]]?||?[[?"$1"?=?"{"?]];?thenname=;id=elif?[[?"$1"?=~?'(name'?]];?thenname=$(echo?$1?|?sed?-e?'s/^.*(name?\(.*\))$/\1/')elif?[[?"$1"?=~?'(domid'?]];?thenid=$(echo?$1?|?sed?-e?'s/^.*(domid?\(.*\))$/\1/')elif?[[?"$1"?=~?'"name":'?]];?thenname=$(echo?$1?|?sed?-e?'s/^.*"name":?"\(.*\)",$/\1/')elif?[[?"$1"?=~?'"domid":'?]];?thenid=$(echo?$1?|?sed?-e?'s/^.*"domid":?\(.*\),$/\1/')fi#?此處即上上面所說的小Bug:#此處是手動添加的,因?yàn)?parseln函數(shù)是用來統(tǒng)一獲取DomU的name、id的,#但從腳本中看,作者是希望從這里獲取DomU的運(yùn)行狀態(tài)的,但似乎忘記寫了.state=$(xl?list?|awk?-v?DomUname=$name?'$1==DomUname{print?$5}')[?-n?"$name"?-a?-n?"$id"?]?&&?return?0?||?return?1}stop(){exec?3>&2?2>?/dev/null#此句是將當(dāng)前進(jìn)程的文件描述符?綁定到系統(tǒng)標(biāo)準(zhǔn)錯(cuò)誤輸出.#?Collect?list?of?domains?to?shut?downif?test?"$XENDOMAINS_AUTO_ONLY"?=?"true";?then??rdnames;?fiecho?-n?"Shutting?down?Xen?domains:"name=;id=while?read?LN;?doparseln?"$LN"?||?continueif?test?$id?=?0;?then?continue;?fiecho?-n?"?$name"#?XENDOMAINS_AUTO=/etc/xen/auto/#?XENDOMAINS_AUTO_ONLY='true'?此為默認(rèn)值.#?自動關(guān)閉/etc/xen/auto/目錄下所有的DomU.?此目錄下放置DomU的配置文件.#?但此處的并沒有真正實(shí)現(xiàn)自動關(guān)閉。#?NAMES:?是rdnames函數(shù)定義的變量.它保存了/etc/xen/auto中所有DomU的名字,#?NAMES="DomU1|DomU2|DomU3|...."if?test?"$XENDOMAINS_AUTO_ONLY"?=?"true";?then#這里原本是關(guān)閉:/etc/xen/auto/目錄下所有打算自動啟動的DomU.#但stop函數(shù)中并沒有實(shí)際去關(guān)閉,而是留空了.fi#?XENDOMAINS_SYSRQ?chould?be?something?like?just?"s"?#?or?"s?e?i?u"?or?even?"s?e?s?i?u?o"#?for?the?latter,?you?should?set?XENDOMAINS_USLEEP?to?1200000?or?so#?/etc/sysconfig/xendomains中對XENDOMAINS_SYSRQ的注解:#?The?xendomains?script?can?send?SysRq?requests?to?domains?on?shutdown.#?If?you?don't?want?to?MIGRATE,?SAVE,?or?SHUTDOWN,?this?may?be?a?possibility#?to?do?a?quick?and?dirty?shutdown?("s?e?i?u?o")?or?at?least?sync?the?disks#?of?the?domains?("s").#?SysRq:的含義我沒有弄明白.若有知情著,還望賜教.if?test?-n?"$XENDOMAINS_SYSRQ";?thenfor?sysrq?in?$XENDOMAINS_SYSRQ;?doecho?-n?"(SR-$sysrq)"#?CMD=/usr/sbin/xlXMR=`$CMD?sysrq?$id?$sysrq?2>&1?1>/dev/null`if?test?$??-ne?0;?thenecho?-e?"\nAn?error?occurred?while?doing?sysrq?on?domain:\n$XMR\n"rc_failed?$?echo?-n?'!'fi#?usleep?just?ignores?empty?argusleep?$XENDOMAINS_USLEEPdonefi#?這里是判斷是否存在僵尸DomU,?需要注意:?state變量并未定義,此可能是個(gè)Bug.#?可自行修復(fù)下,在parseln函數(shù)中添加"state=$($CMD?list?|awk?-v?DomUName=$name?'$1==DomUName{print?$5}')"if?test?"$state"?=?"-b---d"?-o?"$state"?=?"-----d";?thenecho?-n?"(zomb)"continuefi#這里是用來判斷MigrateServer是否指定了,若指定了,則開始批量遷移DomU到指定的XenHypervisor.#指定XENDOMAINS_MIGRATE,可直接修改/etc/sysconfig/xendomains。if?test?-n?"$XENDOMAINS_MIGRATE";?thenecho?-n?"(migr)"#啟動一個(gè)監(jiān)視遷移的線程.默認(rèn)若在300秒內(nèi)沒有遷移完成,則監(jiān)控線程將認(rèn)為遷移超時(shí),#而強(qiáng)制kill掉遷移線程.watchdog_xencmd?migrate?&#獲取監(jiān)視遷移線程的PID,若在300秒內(nèi)遷移完成,則kill掉監(jiān)視遷移的線程.WDOG_PID=$!#?CMD=/usr/sbin/xl#啟動DomU遷移.XMR=`$CMD?migrate?$id?$XENDOMAINS_MIGRATE?2>&1?1>/dev/null`if?test?$??-ne?0;?thenecho?-e?"\nAn?error?occurred?while?migrating?domain:\n$XMR\n"rc_failed?$?echo?-e?'!'kill?$WDOG_PID?>/dev/null?2>&1elsekill?$WDOG_PID?>/dev/null?2>&1echo?-e?.usleep?1000#若遷移被設(shè)置了,則所有即將被關(guān)閉的DomU都將被遷移到指定Xen?Hypervisor上.#下面的save?和?shutdown就不會被執(zhí)行了。continuefifiif?test?-n?"$XENDOMAINS_SAVE";?thenecho?-n?"(save)"#?將Shell函數(shù)放到后臺運(yùn)行.watchdog_xencmd?save?&#?獲取這個(gè)后臺執(zhí)行的函數(shù)線程的PID.WDOG_PID=$!#?Default:XENDOMAINS_SAVE=/var/lib/xen/savemkdir?-p?"$XENDOMAINS_SAVE"#?這里開始對DomU進(jìn)行掛起,掛起操作的默認(rèn)超時(shí)時(shí)間是300秒,watchdog_xencmd負(fù)責(zé)監(jiān)控下面命令執(zhí)行是否超時(shí).#?若超時(shí),watchdog_xencmd會將其自動強(qiáng)制結(jié)束.XMR=`$CMD?save?$id?$XENDOMAINS_SAVE/$name?2>&1?1>/dev/null`#?若以上命令執(zhí)行成功,則強(qiáng)制將watchdog_xencmd線程結(jié)束掉.if?test?$??-ne?0;?thenecho?-e?"\nAn?error?occurred?while?saving?domain:\n$XMR\n"rc_failed?$?echo?-e?'!'kill?$WDOG_PID?>/dev/null?2>&1elsekill?$WDOG_PID?>/dev/null?2>&1echo?-e?.usleep?1000continuefifi#?XENDOMAINS_SHUTDOWN=--waitif?test?-n?"$XENDOMAINS_SHUTDOWN";?then#?XENDOMAINS_SHUTDOWN?should?be?"--wait"echo?-n?"(shut)"watchdog_xencmd?shutdown?&WDOG_PID=$!XMR=`$CMD?shutdown?$XENDOMAINS_SHUTDOWN?$id?2>&1?1>/dev/null`if?test?$??-ne?0;?thenecho?-e?"\nAn?error?occurred?while?shutting?down?domain:\n$XMR\n"rc_failed?$?echo?-e?'!'fikill?$WDOG_PID?>/dev/null?2>&1fidone?<?<($CMD?list?-l?|?grep?"$LIST_GREP")#?NB.?this?shuts?down?ALL?Xen?domains?(politely),?not?just?the?ones?in#?AUTODIR/*#?This?is?because?it's?easier?to?do?";-)"?but?arguably?if?this?script?is?run#?on?system?shutdown?then?it's?also?the?right?thing?to?do.#?all_zombies返回0,表示沒有找到僵尸DomU,返回1,表示找到僵尸DomU.if?!?all_zombies?&&?test?-n?"$XENDOMAINS_SHUTDOWN_ALL";?then#?XENDOMAINS_SHUTDOWN_ALL="--all?--wait"echo?-n?"?SHUTDOWN_ALL?"watchdog_xencmd?shutdown?1?false?&WDOG_PID=$!XMR=`$CMD?shutdown?$XENDOMAINS_SHUTDOWN_ALL?2>&1?1>/dev/null`if?test?$??-ne?0;?thenecho?-e?"\nAn?error?occurred?while?shutting?down?all?domains:?$XMR\n"rc_failed?$?echo?-e?'!'fikill?$WDOG_PID?>/dev/null?2>&1fi#?Unconditionally?delete?lock?filerm?-f?$LOCKFILE}start()?{#?LOCKFILE=/var/lock/subsys/xendomainsif?[?-f?$LOCKFILE?];?then?echo?-e?"xendomains?already?running?(lockfile?exists)"return;?fisaved_domains="?"#?XENDOMAINS_RESTORE=true#?XENDOMAINS_SAVE=/var/lib/xen/save#?contains_something?:檢查指定目錄下是否有文件,有則返回0,無則返回1if?[?"$XENDOMAINS_RESTORE"?=?"true"?]?&&contains_something?"$XENDOMAINS_SAVE"then#?$(dirname?"$LOCKFILE")?=?/var/lock/subsysmkdir?-p?$(dirname?"$LOCKFILE")touch?$LOCKFILEecho?-n?"Restoring?Xen?domains:"saved_domains=`ls?$XENDOMAINS_SAVE`#這里是用來恢復(fù)所有調(diào)用stop函數(shù)被掛起(save)的DomU。for?dom?in?$XENDOMAINS_SAVE/*;?doif?[?-f?$dom?]?;?thenHEADER=`head?-c?16?$dom?|?head?-n?1?2>?/dev/null`#HEADCOMP="LinuxGuestRecord"?:?這是xm?save?DomU后,其保存文件中頭部16個(gè)字符.#HEADCOMP="Xen?saved?domain"?:?這是xl?save?DomU后,其保存文件中頭部16個(gè)字符.if?[?"$HEADER"?=?"$HEADCOMP"?];?thenecho?-n?"?${dom##*/}"#?CMD=/usr/sbin/xlXMR=`$CMD?restore?$dom?2>&1?1>/dev/null`#$CMD?restore?$domif?[?$??-ne?0?];?thenecho?-e?"\nAn?error?occurred?while?restoring?domain?${dom##*/}:\n$XMR"rc_failed?$?echo?-e?'!'else#?mv?$dom?${dom%/*}/.${dom##*/}#?若恢復(fù)成功則刪除XENDOMAINS_SAVE中相應(yīng)的DomU保存的鏡像.rm?$domfififidoneecho?-efi#?contains_something?:檢查指定目錄下是否有文件,有則返回0,無則返回1if?contains_something?"$XENDOMAINS_AUTO"thentouch?$LOCKFILEecho?-n?"Starting?auto?Xen?domains:"#?We?expect?config?scripts?for?auto?starting?domains?to?be?in#?XENDOMAINS_AUTO?-?they?could?just?be?symlinks?to?files?elsewhere#?Create?all?domains?with?config?files?in?XENDOMAINS_AUTO.#?TODO:?We?should?record?which?domain?name?belongs?#?so?we?have?the?option?to?selectively?shut?down?/?migrate?later#?If?a?domain?statefile?from?$XENDOMAINS_SAVE?matches?a?domain?name#?in?$XENDOMAINS_AUTO,?do?not?try?to?start?that?domain;?if?it?didn't?#?restore?correctly?it?requires?administrative?attention.#?XENDOMAINS_AUTO=/etc/xen/auto#?這是自動列出/etc/xen/auto/下所有DomU的配置文件,并啟動.for?dom?in?$XENDOMAINS_AUTO/*;?do#?dom=/etc/xen/auto/busybox-001#?${dom##*/}?=?busybox-001?echo?-n?"?${dom##*/}"#?$(echo?$dom?|?sed?-n?'s/^.*\/\(.*\)$/\1/p')?=?busybox-001shortdom=$(echo?$dom?|?sed?-n?'s/^.*\/\(.*\)$/\1/p')#?grep?-w?:表示單詞匹配模式echo?$saved_domains?|?grep?-w?$shortdom?>?/dev/null#is_running:判斷提供的DomU是否正在運(yùn)行.0表示正在運(yùn)行.if?[?$??-eq?0?]?||?is_running?$dom;?thenecho?-n?"(skip)"elseXMC=`$CMD?create?--quiet?--defconfig?$dom`if?[?$??-ne?0?];?thenecho?-e?"\nAn?error?occurred?while?creating?domain?${dom##*/}:?$XMC\n"rc_failed?$?echo?-e?'!'else#?usleep函數(shù)是延時(shí)函數(shù).#?XENDOMAINS_CREATE_USLEEP=5000000#?usleep延時(shí)計(jì)算方法:sleep?$1/1000000?usleep?$XENDOMAINS_CREATE_USLEEPfifidonefi}

? ?(15) Xenstore的簡單說明:
? ? ? ?列目錄

???????????xenstore-ls?:遞歸方式列出xenstored中所有的鍵值對.xenstore-list?:僅顯示當(dāng)前目錄中內(nèi)容.如:[root@node1?xen]#?xenstore-list?-s?/???#列出xenstored根目錄樹中的內(nèi)容.tool???????:?暫時(shí)沒有數(shù)據(jù).local?????:存放了活動虛擬機(jī)配置和驅(qū)動信息vm????????:存放虛擬機(jī)管理信息libxl???????:這是一個(gè)空文件。用途不詳.

? ? ? 讀寫

???????????xenstore-read?:?可用來讀取xenstored中文件的內(nèi)容.xenstore-write?:?可用來修改xenstored中的內(nèi)容。

? ? ? 建立/刪除目錄

???????????xenstore-mkdir?xenstore-rm

? ? ?監(jiān)視

???????????xenstore-watch

?

?

附件1:
Xen已解決的安全問題【原文:http://www.51ou.com/browse/xen/50466.html】
? ?(1)Xen的訪問控制
? ? ? ? ? ?Xen通過自己的訪問控制模塊ACM。能有效解決諸多訪問不當(dāng)造成的安全問題。
? ? ? ? ? ?ACM實(shí)現(xiàn)了兩種策略機(jī)制,分別是中國墻(Chinesewall)策略和簡單類型強(qiáng)制(simple type enforcement:STE)策略。其中,中圍墻策略定義了一組中國墻類型,并因此定義沖突集,然后根據(jù)類型定義標(biāo)簽。該策略根據(jù)標(biāo)簽來進(jìn)行判斷,若兩個(gè)虛擬機(jī)的標(biāo)簽處在同一個(gè)沖突集中。則不能同時(shí)在相同的系統(tǒng)上運(yùn)行。因此該機(jī)制主要用于虛擬機(jī)之間的信息流控制。STE策略亦定義了一組類型(該類型針對的是域所擁有的資源),然后根據(jù)類型定義標(biāo)簽,要求當(dāng)上體擁有客體標(biāo)簽時(shí)。主體才能訪問客體。以此來控制資源共享。除此以外,Xen的Domain 0用戶可以根據(jù)自己的需求制定安全策略。當(dāng)虛擬機(jī)請求與別的虛擬機(jī)進(jìn)行通信或訪問資源時(shí)。ACM模塊能根據(jù)用戶定義的策略判斷,以此達(dá)到對虛擬機(jī)的資源進(jìn)行控制以及對虛擬機(jī)之間的信息流進(jìn)行控制的目的。

  (2)Xen的可信計(jì)算
   ? ? ?可信計(jì)算技術(shù)是一種新興的信息安全手段,其安全措施是通過構(gòu)建信任鏈來防御攻擊。通過傳遞機(jī)制,在系統(tǒng)啟動時(shí)可將B10S中最先啟動的代碼BIOS boot loader作為整個(gè)信任鏈的起點(diǎn),依次逐級向上傳遞系統(tǒng)控制權(quán)并構(gòu)建信任鏈,直到應(yīng)用層。可信計(jì)算可以有效彌補(bǔ)傳統(tǒng)安全防議無法提供的有關(guān)通信終點(diǎn)節(jié)點(diǎn)完整性與可信性差的問題。
   ? ? ?可信計(jì)算平臺是能夠提供可信計(jì)算服務(wù)的計(jì)算機(jī)軟硬件實(shí)體。它能夠提供系統(tǒng)的可靠性、可用性以及信息和行為的安全性。因此,建立可信平臺是應(yīng)對云計(jì)算安全的一種重要手段。而可信平臺模塊(TPM)是可信計(jì)算的基石。
   ? ? ?TPM實(shí)際上是一個(gè)含有密碼運(yùn)算部件和存儲部件的系統(tǒng)級芯片,是云計(jì)算平臺重要的防篡改組件,這能有效保證平臺的安全。相對于傳統(tǒng)物理平臺,可信平臺在Xen等虛擬化平臺上實(shí)現(xiàn)TPM,有一定的優(yōu)越性。平時(shí)計(jì)算機(jī)裝了太多軟件,這使得構(gòu)建信任鏈變得很復(fù)雜。相對而言,使用虛擬機(jī)(VM)配合虛擬可信平臺模塊(vTPM)組成虛擬終端可信平臺要方便得多。這是因?yàn)樘摂M終端可信平臺通常只為處理某種特定任務(wù)而產(chǎn)生,可由用戶自定義其所需功能,所以功能相對簡單,更容易構(gòu)建信任鏈。此平臺可以來處理需要安全保障的在線服務(wù)或敏感數(shù)據(jù)的訪問。
   ? ? ?現(xiàn)在,Xen 3.0以上的版本都能支持vTPM的實(shí)現(xiàn)。vTPM能實(shí)現(xiàn)虛擬計(jì)算系統(tǒng)中虛擬機(jī)的安全可靠。vTPM可以使平臺上的每個(gè)虛擬機(jī)利用其功能。讓每個(gè)需要TPM功能的虛擬機(jī)都感覺是在訪問自己私有的TPM一樣。在平臺搭建中,可以創(chuàng)建多個(gè)虛擬TPM,這樣每一個(gè)如實(shí)地效仿硬件TPM的功能,可有效維護(hù)各個(gè)虛擬機(jī)的安全。從而使Xen搭建的云計(jì)算平臺處于較穩(wěn)定狀態(tài)。

  Xen的現(xiàn)有問題及解決策略
  目前的Xen的安全性還有較多的安全問題。比如,Domain 0是一個(gè)安全瓶頸,其功能較其他域強(qiáng),所以容易被敵手發(fā)起蠕蟲、病毒、DoS等各種攻擊,如果Domain 0癱瘓或者被敵手攻破,那么將破壞整個(gè)虛擬機(jī)系統(tǒng)。Xen的隱通道問題沒有解決。在Xen上就不可能運(yùn)行高安全等級的操作系統(tǒng)。虛擬機(jī)共享同一套硬件設(shè)備,一些網(wǎng)絡(luò)安全協(xié)議可能更加容易遭到惡意破壞和惡意實(shí)施。Xen提供了方便的保存和恢復(fù)機(jī)制。使得操作系統(tǒng)數(shù)據(jù)的回滾和重放非常容易,但這些將影響操作本身的密碼特性。除此之外,在Xen中,由于安全機(jī)制做在Guest OS中,所以不能保證VMM的安全。Xen只能限制頁表一級的內(nèi)存I/O地址空間。而中斷和I/0端口地址空間的粒度要比頁表小得多。如果不同虛擬機(jī)中的驅(qū)動不幸被分配到同一個(gè)頁表空間,那么它們就可以訪問對方的內(nèi)存地址空間,造成安全問題。
  針對Domain 0的問題。可削弱它的功能。將其功能分解到其他域。這將會適當(dāng)減少Domain 0的瓶頸作用。對于敏感數(shù)據(jù)要進(jìn)行多次擦除防止再恢復(fù)。另外,Xen的ACM模塊不能完全解決設(shè)備隔離和資源隔離問題,將Xen和LaGrande技術(shù)結(jié)合是一個(gè)不錯(cuò)的選擇。LaGrande是lnfel將要實(shí)施的一種硬件技術(shù),它是一組通用的硬件安全增強(qiáng)組件。用來防止敏感的信息被惡意軟件攻擊。其安全功能將被整合到處理器和芯片集中。能有效增強(qiáng)設(shè)備隔離,實(shí)現(xiàn)I/O保護(hù)、內(nèi)存越界保護(hù)、鍵盤、顯示的隔離保護(hù)等。

  業(yè)界對虛擬化安全的努力
  針對傳統(tǒng)安全防火墻技術(shù)不能有效監(jiān)控虛擬機(jī)流量的問題,mtor Networks公司使用VMware的API來開發(fā)虛擬安全分析器,以檢測虛擬交換機(jī)流量——在虛擬層之上的網(wǎng)絡(luò)層流量。該公司也開發(fā)了虛擬網(wǎng)絡(luò)防火墻,該防火墻基于虛擬機(jī)管理器,可認(rèn)證有狀態(tài)的虛擬防火墻,檢查所有通過虛擬機(jī)的數(shù)據(jù)分組,組織所有未經(jīng)批準(zhǔn)的連接和允許對數(shù)據(jù)分組進(jìn)行更深層次的檢查,確保了虛擬機(jī)間通信的安全。針對虛擬環(huán)境的安全問題,目前Resolution Enterprise公司提出要對虛擬化環(huán)境采取深層防護(hù)戰(zhàn)略。
  除此以外。開源Xen管理程序社區(qū)Xen.org已經(jīng)開始實(shí)施Xen云平臺(XCP)計(jì)劃。目的是在云環(huán)境中利用領(lǐng)先的Xen管理程序。為未來的云服務(wù)提供安全的、經(jīng)過驗(yàn)證的開源基礎(chǔ)設(shè)施乎臺。目前。已經(jīng)發(fā)布了XCPl.0及其修正版,并將慢慢發(fā)布更加穩(wěn)定的版本。
? ? ? ? Citrix
Citrix系統(tǒng)公司是全球領(lǐng)先的應(yīng)用服務(wù)器軟件方案供應(yīng)商。Citrix憑借其卓越的技術(shù)方案和業(yè)務(wù)成就,贏得了業(yè)界與用戶的廣泛贊譽(yù)。收購XenSource之后,Ctrix在虛擬化領(lǐng)域的能力進(jìn)一步提高,具有了足夠的技術(shù)儲備應(yīng)對云計(jì)算挑戰(zhàn)。Citrix與其它云端服務(wù)供貨商的最大不同在于,提供端對端的產(chǎn)品服務(wù):包含Dazzle、XenDesktop、XenApp、NetScaler、XenServer與即將推出的XenClient,以及透過遵循開放標(biāo)準(zhǔn)等方式,與儲存設(shè)備、服務(wù)器業(yè)者結(jié)盟、推廣云端服務(wù)產(chǎn)品?? ? ? ?

附件2:
qemu-img是qemu用來實(shí)現(xiàn)磁盤映像管理的工具組件,其有許多子命令,分別用于實(shí)現(xiàn)不同的管理功能,而每一個(gè)子命令也都有一系列不同的選項(xiàng)。其使用語法格式為“qemu-img ?subcommand ?[options]”,支持的子命令如下。

◇ create:創(chuàng)建一個(gè)新的磁盤映像文件;
? ? ? ?格式: qemu-img ?-f ?DISK_FORMAT ?-o ?? ? /tmp/test.img ? ? ? ?#查看指定的DISK_FORMAT所支持的額外特性參數(shù).
? ?????注: ?如果“-o”選項(xiàng)中使用了backing_file這個(gè)選項(xiàng)來指定其后端鏡像文件,那么這個(gè)創(chuàng)建的鏡像文件僅記錄與后端鏡像文件的差異部分,后端鏡像文件不會被修改,除非在QEMU monitor中使用“commit”命令或者使用“qemu-img commit”命令去手動提交這些改動;?這種情況下,size參數(shù)不是必須需的,其值默認(rèn)為后端鏡像文件的大小。另外,直接使用“-b?backfile”參數(shù)也與“-o backing_file=backfile”效果相同。

??????????qemu-img?create?-f?qcow2?-b?/tmp/rhel6u3.img???/tmp/rhel6u3.qcow2#?或qemu-img?create?-f?qcow2?-o?backing_file=/tmp/rhel6u3.img??/tmp/rhel6u3.qcow2#?注:?rhel6u3.qcow2?可以作為鏡像文件啟動,?有點(diǎn)類似VMware的連接克隆VM,#???????但需要注意:?這并非是VMware的連接克隆,因?yàn)?當(dāng)你啟動rhel6u3.qcow2的VM后,#???????你在該VM中創(chuàng)建的文件、目錄等會在關(guān)閉該VM后,自動同步到rhel6u3.img中.#???????若你啟動了rhel6u3.img這個(gè)VM,可能會造成rhel6u3.qcow2鏡像出現(xiàn)錯(cuò)誤.

◇ check:檢查磁盤映像文件中的錯(cuò)誤;
? ?對磁盤鏡像文件進(jìn)行一致性檢查,查找鏡像文件中的錯(cuò)誤,目前僅支持對“qcow2”、“qed”、“vdi”格式文件的檢查。
? ?(1) qcow2: QEMU 0.8.3版本引入的鏡像文件格式,也是目前使用最廣泛的格式。
? ?(2) qed(QEMU enhanced disk): 從QEMU 0.14版開始加入的增強(qiáng)磁盤文件格式,
? ? ? ? ?它是為了避免qcow2格式的一些缺點(diǎn),同時(shí)提高性能而引入,目前還不夠成熟。
? ?(3) vdi(Virtual Disk Image): Oracle的VirtualBox虛擬機(jī)中的存儲格式。
? ? ? ?-f?fmt: 指定文件的格式,如果不指定格式qemu-img會自動檢測,filename是磁盤鏡像文件的名稱(包括路徑)。

????????qemu-img??check??-f?qcow2??/tmp/rhel6u3.qcow2

?

◇ convert:轉(zhuǎn)換磁盤映像的格式;
? ?格式:qemu-img ?convert [-c] [-f?fmt] [-O?output_fmt] [-o?options]?filename?[filename2?[…]]?output_filename
? ? ? ?-c :對輸出的鏡像文件進(jìn)行壓縮,僅支持qcow2和qcow格式,且此壓縮是只讀的,若壓縮的扇區(qū)被重寫,則會被重寫為未壓縮的數(shù)據(jù)。
? ? ? ?-f : 指定源磁盤映像文件的格式.
? ? ? ?-O : 指定輸出磁盤映像文件的格式.
? ? ? ?-o : 指定輸出磁盤映像文件的其它選項(xiàng):如:后端鏡像、文件大小、是否加密等等
? ? ? ? ? ? ?注: 使用backing_file選項(xiàng)來指定后端鏡像,讓生成的文件是copy-on-write的增量文件,
? ? ? ? ? ? ? ? ? 這時(shí)必須讓轉(zhuǎn)換命令中指定的后端鏡像與輸入文件的后端鏡像的內(nèi)容是相同的,
? ? ? ? ? ? ? ? ? 盡管它們各自后端鏡像的目錄、格式可能不同。
? ? ? ?注: 一般來說,輸入文件格式fmt由qemu-img工具自動檢測到,而輸出文件格式output_fmt根據(jù)自己需要來指定,默認(rèn)會被轉(zhuǎn)換為raw文件格式(且默認(rèn)使用稀疏文件的方式存儲以節(jié)省存儲空間)。另外如果使用qcow2、qcow、cow等作為輸出文件格式來轉(zhuǎn)換raw格式的鏡像文件(非稀疏文件格式),鏡像轉(zhuǎn)換還可以起到將鏡像文件轉(zhuǎn)化為更小的鏡像,因?yàn)樗梢詫⒖盏纳葏^(qū)刪除使之在生成的輸出文件中并不存在。

???????qemu-img???convert???/tmp/my-vmware.vmdk????/tmp/my-kvm.img

◇ info:顯示指定磁盤映像的信息;
? ?注:?如果文件是使用稀疏文件的存儲方式,也會顯示出它的本來分配的大小以及實(shí)際已占用的磁盤空間大小。如果文件中存放有客戶機(jī)快照,快照的信息也會被顯示出來。

???qemu-img???info???/tmp/rhel6u3.img

?

◇ snapshot:管理磁盤映像的快照;
? ?格式: qemu-img ?snapshot [-l | -a?snapshot?| -c?snapshot?| -d?snapshot]?filename
? ? ? ? ? ? ? ? ? ?-l: 選項(xiàng)是查詢并列出鏡像文件中的所有快照
? ? ? ? ? ? ? ? ? ?-a ?snapshot ?: 是讓鏡像文件使用某個(gè)快照
? ? ? ? ? ? ? ? ? ?-c ?snapshot ?: 是創(chuàng)建一個(gè)快照
? ? ? ? ? ? ? ? ? ?-d ?snapshot ?: 是刪除一個(gè)快照。

◇ commit:提交filename文件中的更改到后端支持鏡像文件(創(chuàng)建時(shí)通過backing_file指定的)中去;
? ?格式: qemu-img ?commit [-f?fmt]?filename

◇ rbase:改變鏡像文件的后端鏡像文件,只有qcow2和qed格式支持rebase命令;
? ?格式: qemu-img ?rebase [-f?fmt] [-t?cache] [-p] [-u] -b?backing_file?[-F?backing_fmt]?filename
? ? ? ? ? ? ? ? ? ?-b?backing_file:指定作為后端磁盤映像的文件
? ? ? ? ? ? ? ? ? ?-F?backing_fmt:指定將后端映像文件轉(zhuǎn)換為何種磁盤映像格式。
? ? ? ? ? ? ? ?注:rbase操作可工作于兩種模式下,安全模式(Safe Mode)【默認(rèn)模式】和 非安全模式【Unsafe Mode】
? ? ? ? ? ? ? ? ? ?在安全模式下qemu-img會去比較原來的后端鏡像與現(xiàn)在的后端鏡像的不同進(jìn)行合并處理;
? ? ? ? ? ? ? ? ? ?-u 可指定非安全模式(Unsafe Mode),此模式主要用于將后端鏡像進(jìn)行了重命名或移動位置之后對前端鏡像文件的修復(fù)處理,由用戶去保證后端鏡像的一致性。

◇ resize:增大或縮減磁盤映像文件的大小;
? ?格式: qemu-img ?resize?filename?[+ | -]size
? ? ? ?+ : 增加
? ? ? ?– :減少
? ? ? ?size: 單位支持:K/M/G/T
? ? ? ?縮小鏡像的大小前,需保證客戶機(jī)里面的文件系統(tǒng)有空余空間,否則會數(shù)據(jù)丟失,
?另外,qcow2格式文件不支持縮小鏡像的操作。在增加了鏡像文件大小后,也需啟動客戶機(jī)到
?里面去使用“fdisk”、“parted”等分區(qū)工具進(jìn)行相應(yīng)的操作才能真正讓客戶機(jī)使用到增加后的鏡像空間。
?不過使用resize命令時(shí)需要小心(最好做好備份),如果失敗的話,可能會導(dǎo)致鏡像文件無法正常使用而造成數(shù)據(jù)丟失。

?????????qemu-img??resize??/tmp/rhel6u3-a.img??+2G

附件3:
? ?1.1 創(chuàng)建一個(gè)Busybox虛擬機(jī)示例:
? ? ? ?(1) 創(chuàng)建一個(gè)虛擬磁盤映像文件:

???????????????qemu-img??create??-f??raw??-o??size=2G???/images/xen/busybox.img

? ? ? ?(2) 將其格式化并掛載:

???????????????cd??/images/xenmkfs.ext2??busybox.imgmount??-o??loop???/images/xen/busybox.img???/mnt

? ? ? ?(3) 編譯busybox

????????????????#?下載busybox:?????????????????tar??xvjf??busybox-*.tar.bz2cd??busybox*make??menuconfig#?注:若busybox需要進(jìn)行靜態(tài)編譯則需要安裝:?yum??install??glibc-static?;#??此RPM包可以支持靜態(tài)編譯,使編譯的應(yīng)用程序可直接包含所需要的外部庫,而非連接載入外部庫.?????busybox?Settings-->Build?Optons-->Build?BusyBox?as?a?static?binary(no?shared?libs)|-->Installation?Options(”make?install"?behavior)makemake??install????#注:安裝后,busybox會文件安裝到當(dāng)前編譯目錄下的_install目錄中.cd??_installcp??-a??*??/mnt??#將busybox的所有文件copy到busybox.img中,作為一個(gè)模擬的根文件系統(tǒng).??#?提供以下目錄,也是十分重要的:mkdir??-pv??/mnt/{proc,?var,?sys,?etc,?dev,?usr,?tmp,?home,?root,?opt}

? ? ?(4) chroot測試:

???????????????chroot???/mnt

? ? ?(5) 在Dom0上創(chuàng)建橋設(shè)備

??????#?注:?添加橋,并配置DomU啟動時(shí),自動橋接到Dom0上創(chuàng)建的橋設(shè)備.#??這里存在一個(gè)Kernel-Bug:?若使用kernel-3.6.10-68、3.6.18都存在將物理網(wǎng)卡橋到橋設(shè)備后,Kernel無響應(yīng)的問題.#??建議:?做橋?qū)嶒?yàn)時(shí),采用kernel-3.6.7版本的。yum??install??bridge-utilsvim??/etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0NM_CONTROLLED=noTYPE=EthernetBOOTPROTO=noneONBOOT=yesUSERCTL=noBRIDGE=xenbr0vim??/etc/sysconfig/network-scripts/ifcfg-xenbr0DEVICE=xenbr0NM_CONTROLLED=noTYPE=BridgeBOOTPROTO=noneIPADDR=192.168.1.10NETMASK=255.255.255.0GATEWAY=192.168.1.1DNS1=8.8.8.8ONBOOT=yesUSERCTL=noDELAY=0service??NetworkManager??stopchkconfig??NetworkManager??off??????#NetworkManager會導(dǎo)致橋創(chuàng)建失敗.service??network??restart

?(6) 為busybox測試系統(tǒng)提供網(wǎng)卡驅(qū)動

??????cd??/mnt/lib/modules/`uname?-r`/kernel/drivers/net/modinfo???xen-netfront.ko???????#PV模式下,DomU應(yīng)該使用網(wǎng)卡的前半段;因此這個(gè)驅(qū)動需要.#?查看xen-netfront.ko?有沒有依賴其他模塊,即"depends"段是否有依賴模塊.modinfo??8139too.ko?modinfo??mii.ko??????????????????????#8139依賴與mii模塊.mkdir??-pv??/mnt/lib/modulescp??xen-netfront.ko??8139too.ko??mii.ko???/mnt/lib/modules/umount??/mnt?????????????????????????#卸載busybox的映像文件.

? ? ?(7) 創(chuàng)建啟動DomU的配置文件:

????????ls??/etc/xenxl.conf?????????????#此配置文件為xl命令的全局通用配置文件.xlexample.hvm???????#這是一個(gè)HVM模式運(yùn)行的DomU的示例配置文件.xlexample.pvlinux???#這是PV模式運(yùn)行的DomU配置文件示例.cp???xlexample.pvlinux???busyboxvim??busybox【name="busybox-001"kernel="/boot/vmlinuz"?????#注:這是Dom0的/boot下的vmlinuz,此為DomU啟動時(shí)的Kernel文件.ramdisk="/boot/initramfs.img"??????#它也是Dom0上的initramfs.img.extra="selinux=0??init=/bin/sh"????#指定傳遞給kernel的額外參數(shù),關(guān)閉selinux,系統(tǒng)啟動后第一個(gè)執(zhí)行的程序?yàn)?bin/shroot="/dev/xvda??ro"??#指定根文件系統(tǒng)的位置;?這里需要注意:?因?yàn)閎usybox.img創(chuàng)建后,并沒有分區(qū),就直接被格式化了.#????因此就一個(gè)分區(qū),不存在其它分區(qū),所以這里直接寫成/dev/xvda而不是/dev/xvda1.#????另外?系統(tǒng)在啟動初期是以只讀方式掛載的.這樣需要注意.memory=256??????#指定內(nèi)存大小為256M#maxmem?=?512???#若啟用最大內(nèi)存參數(shù),則可以在DomU運(yùn)行時(shí),通過以下命令來動態(tài)調(diào)整DomU的內(nèi)存.#???xl??mem-max???和??xl??mem-setvcpus=2disk=['/images/xen/busybox.img,raw,xvda,rw']vif=[?'mac=00:16:3e:00:00:01,bridge=xenbr0'?]??????#?bridge:是關(guān)鍵參數(shù),其它參數(shù)都是可選參數(shù)。】

? ?(8) 啟動busybox虛擬機(jī)登錄后:

????????????????ifconfig??-a????????????????????????????????#是看不到任何接口的.insmod??/lib/modules/xen-netfront.ko????????#安裝網(wǎng)卡接口驅(qū)動模塊ifconfig??-a?ifconfig??eth0??192.168.1.20??upctrl?+?]?????????????#?回到到Dom0,查看網(wǎng)絡(luò)接口狀態(tài).Dom0:??ifconfig??-a??#將可以看到一個(gè)新接口.vif#.@?#?"#":?表示DomU的ID?;??@:表示Dom0上創(chuàng)建的橋ID.Dom0:??brctl??show???#將看到新接口已經(jīng)被橋接到Dom0的橋設(shè)備上了。

? 1.2 創(chuàng)建自有Kernel和initramfs文件的busybox ?DomU
? ? ? ?(1) 提供磁盤映像文件【注: Xen的VM對qcow2格式的磁盤可能無法識別,因此,這里建議自行測試,raw格式是沒有問題的.】

???????????qemu-img??create??-f??qcow2??-o??size=5G,preallocation=metadata??/images/xen/busybox3.img

? ? ? ?(2) 對該映像文件進(jìn)行分區(qū)

???????????????#?losetup??:這是一個(gè)將loop設(shè)備文件關(guān)聯(lián)到/dev/loop*的命令,只有關(guān)聯(lián)到/dev/loop設(shè)備后,才能對loop設(shè)備文件分區(qū)格式化.losetup??-a?????#查看當(dāng)前已經(jīng)被關(guān)聯(lián)的loop設(shè)備情況.losetup??-f?????#列出當(dāng)前可用的第一個(gè)空閑loop設(shè)備.?#?注:ls??/dev/loop*??可用看到系統(tǒng)中已經(jīng)存在的loop設(shè)備.losetup??/dev/loop0????/images/xen/busybox3.img????#將busybox3.img關(guān)聯(lián)到loop0設(shè)備,接著就可以對其做分區(qū)格式化了.#mount?-o?loop是先做關(guān)聯(lián),然后就直接掛載loop設(shè)備到掛載點(diǎn)了。fdisk??/dev/loop0kpartx??-av??/dev/loop0???????#刷新loop0的分區(qū)信息,并創(chuàng)建分區(qū)映射到/dev/mapper中.ls??/dev/mapper???????????????#分區(qū)刷新完成后,可在這里看到loop0的分區(qū)文件mkfs.ext3???/dev/mapper/loop0p1mkfs.ext3???/dev/mapper/loop0p2?????#對loop0p2進(jìn)行格式化.

? ? ? ?(3)向 /images/xen/busybox3.img 中boot分區(qū)和root分區(qū)提供數(shù)據(jù)文件.:

??????????????#?<1>?掛載分區(qū)到/mntmkdir??/mnt/{boot,?sysroot}mount??/dev/mapper/loop0p1??/mnt/bootmount??/dev/mapper/loop0p2??/mnt/sysroot#?<2>提供boot分區(qū)文件cp??/boot/vmlinuz-2.6.*????/mnt/boot/cp??/boot/initramfs-2.6.*???/mnt/boot/initramfs.img#安裝bootloader到/dev/loop0,復(fù)制啟動文件到/mnt/boot/grub。grub-install??--root-directory=/mnt???/dev/loop0?????vim??/mnt/boot/grub/grub.conf【default=0timeout=3title??Busybox?(Linux-2.6.32)root??(hd0,0)kernel??/vmlinuz???root=/dev/xvda1??ro??selinux=0??init=/bin/bashinitrd???/initramfs.img】#?<3>提供root分區(qū)文件cp??-a??$BUSYBOX/_install/*???/mnt/sysroot/mkdir??-pv??/mnt/sysroot/{proc,?var,?dev,?lib/modules,?tmp,?etc,?home,?root}cp??/lib/modules/`uname?-r`/kernel/drivers/net/xen-netfront.ko??/mnt/sysroot/lib/modules/#?<4>手動拆除loop設(shè)備losetup??-a?????????????????#查看當(dāng)前已經(jīng)關(guān)聯(lián)的loop設(shè)備umount??/mnt/bootumount?/mnt/sysrootkpartx??-d??/dev/loop0??????#刪除loop0中分區(qū)的映射.

? ? ?(4) 提供busybox3的啟動配置文件

?????????????vim??/etc/xen/busybox3【name="busybox-003"#?下面參數(shù)都去掉,因?yàn)閎usybox3已經(jīng)有自己的grub.conf和kernel、initramfs了.#kernel="/boot/vmlinuz"?????#注:這是Dom0的/boot下的vmlinuz,此為DomU啟動時(shí)的Kernel文件.#ramdisk="/boot/initramfs.img"??????#它也是Dom0上的initramfs.img.#extra="selinux=0??init=/bin/sh"????#指定傳遞給kernel的額外參數(shù),關(guān)閉selinux,系統(tǒng)啟動后第一個(gè)執(zhí)行的程序?yàn)?bin/sh#root="/dev/xvda??ro"?????#指定根文件系統(tǒng)的位置;?這里需要注意:?因?yàn)閎usybox.img創(chuàng)建后,并沒有分區(qū),就直接被格式化了.#????因此就一個(gè)分區(qū),不存在其它分區(qū),所以這里直接寫成/dev/xvda而不是/dev/xvda1.#????另外?系統(tǒng)在啟動初期是以只讀方式掛載的.這樣需要注意.memory=256?????????#指定內(nèi)存大小為256M#maxmem?=?512??????vcpus=2disk=['/images/xen/busybox3.img,qcow2,xvda,rw']????vif=[?'mac=00:16:3e:00:00:02,bridge=xenbr0'?]?#?bridge:是關(guān)鍵參數(shù),其它參數(shù)都是可選參數(shù)。bootloader="/usr/bin/pygrub"??????#此pygrub是用python研發(fā)的工具,它可以向DomU提供啟動引導(dǎo),#并自動找到busybox3.img中第一個(gè)分區(qū)并啟動kernel.#?注:?關(guān)于根文件系統(tǒng)(Root?Filesystem):它包含了應(yīng)用程序、系統(tǒng)組件及配置文件等運(yùn)行DomU的各種所需文件的#?????文件系統(tǒng),其并非必須包含Kernel及initramfs.img,它們完全可以放在Dom0中;?事實(shí)上,用于DomU的內(nèi)核文件必須#?????要能夠允許Dom0訪問到,因?yàn)槠溥\(yùn)行時(shí)需要與Xen?Hypervisor通信,因此這些組件必須位于Dom0能夠訪問到的#?????任何文件系統(tǒng)上;?然而目前基于pygrub的方式,允許DomU的內(nèi)核文件直接放置于DomU的虛擬磁盤映像文件中,#?????但pygrub實(shí)際上只是一種讓Dom0可以訪問到DomU虛擬磁盤映像文件中的kernel文件的工具.】

?

附件4:

虛擬化面臨的重要問題:CPU、RAM、I/O的模擬。
? ?CPU模擬:
? ? ? ?(1) 所有OS設(shè)計(jì)時(shí)都認(rèn)為Kernel是可以控制所有硬件,并可運(yùn)行CPU的特權(quán)指令,即Kernel運(yùn)行于CPU的Ring0上。
? ? ? ?(2) 多個(gè)OS無法同時(shí)直接運(yùn)行于硬件層之上,它們必須運(yùn)行在Hypervisor層(下文稱:Host)上;就如同不安裝操作系統(tǒng),就不能安裝VMware,沒有VMware就無法讓虛擬機(jī)(下文稱:Guest)運(yùn)行起來一樣。那問題來了,若Guest必須運(yùn)行在CPU的Ring0上,Host運(yùn)行在哪里?
? ? ? ?(3) OS設(shè)計(jì)時(shí)它認(rèn)為自己是可以控制所有硬件資源的,那GuestOS之間不就可以相互影響了嗎?Guest1要關(guān)機(jī),若
? ? ? ? ? ? ?它直接執(zhí)行CPU的特權(quán)指令關(guān)機(jī),那它應(yīng)該可以關(guān)閉整個(gè)物理機(jī)器,這不是虛擬化所希望的。

? ? ? ?這些問題給CPU虛擬化帶來了諸多問題, 但實(shí)際上Host一定是真正能執(zhí)行CPU的特權(quán)指令的,Guest運(yùn)行起來后,它實(shí)際控制的CPU是通過軟件模擬的CPU,實(shí)際上任何物理硬件都是通過集成電路進(jìn)行運(yùn)算,通過微代碼向外提供輸出結(jié)果的接口,只有通過軟件模擬出這些接口就可以模擬硬件.
? ? ? ?BT技術(shù): BinaryTranslation(二進(jìn)制翻譯)技術(shù),它可以讓Guest在發(fā)起特權(quán)指令時(shí),直接將其翻譯為Host的系統(tǒng)調(diào)用,以便加速Guest的執(zhí)行性能.BT技術(shù)出現(xiàn)是因?yàn)镚uest用戶空間的APP要進(jìn)行特權(quán)操作時(shí),Guest上的APP需要先將請求發(fā)給Guest的Kernel,Guest的Kernel經(jīng)翻譯轉(zhuǎn)換發(fā)給模擬CPU,模擬CPU在將其轉(zhuǎn)換為Host的系統(tǒng)調(diào)用,再發(fā)給Host的Kernel再進(jìn)行翻譯轉(zhuǎn)換后給物理CPU執(zhí)行.最后返回,這使得GuestOS的執(zhí)行性能不高.
? ? ? ?<> 模擬CPU 和 虛擬CPU
? ? ? ? 》模擬CPU:是完整虛擬,即模擬出CPU的環(huán)0,環(huán)1,環(huán)2,環(huán)3;這通常在底層硬件與虛擬環(huán)境的硬件不同時(shí)采用模擬CPU的方式。
? ? ? ? 》虛擬CPU:僅模擬CPU的環(huán)0, Guest的用戶空間中的APP可直接運(yùn)行在物理CPU的環(huán)3上,僅環(huán)0上的特權(quán)指令進(jìn)行翻譯.這是Guest的硬件環(huán)境與底層硬件環(huán)境一致時(shí)用。
? ? ? <> 完全虛擬化 和 半虛擬化
? ? ? ? 》完全虛擬化(Full-Virtulization): 即Guest不知道自己是運(yùn)行在虛擬化環(huán)境中,它一直都認(rèn)為自己是可以控制全部的硬件資源.
???????????????????因此需要將GuestOS對特權(quán)指令的操作都進(jìn)行翻譯后,由Host帶為執(zhí)行。
? ? ? ? ? ? ? ? ? ?VMware的BT技術(shù) 和 AMD CPU的AMD-v、Intel的VT-x這兩種HVM(硬件虛擬化)技術(shù)實(shí)際上都是完全虛擬化,
? ? ? ? ? ? ? ? ? ?因?yàn)樗鼈兌际菐椭鶫ost高效完成特權(quán)指令翻譯的技術(shù)。
? ? ? ? ? ? ? ? ? ?注:AMD-v 和 VT-x實(shí)現(xiàn)了將原先只有4環(huán)的CPU擴(kuò)展為5環(huán),并讓Host運(yùn)行在-1環(huán)上,騰出環(huán)0給Guest用,這樣Guest就
? ? ? ? ? ? ? ? ? ? ? 認(rèn)為自己是運(yùn)行在環(huán)0上,并且可直接執(zhí)行特權(quán)指令,但實(shí)際上,Guest調(diào)用環(huán)0上的特權(quán)指令時(shí),CPU會直接將其翻譯為
? ? ? ? ? ? ? ? ? ? ? 真實(shí)的特權(quán)指令并激活Host的內(nèi)核來調(diào)用環(huán)-1來執(zhí)行特權(quán)指令,這進(jìn)一步縮短了翻譯流程。
? ?Memory虛擬化:
? ? ? ?(1) 在物理機(jī)中,內(nèi)存的使用經(jīng)過虛擬化后,提供給物理機(jī)上運(yùn)行的APP的。
? ? ? ?(2) 在物理機(jī)中,APP看到的內(nèi)存是:虛擬線性地址空間,即APP認(rèn)為自己使用的是全部的物理內(nèi)存,從0-1024(假設(shè)內(nèi)存為1G)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?內(nèi)核看到的內(nèi)存是:真實(shí)物理地址空間
? ? ? ?(3) 由于物理機(jī)的內(nèi)存已經(jīng)被虛擬化過了, Guest訪問物理內(nèi)存就需要再次被虛擬一層。
? ? ? ? ? ? ? ?注:TLB: 轉(zhuǎn)換后頁面緩存?
? ? ? ? ? ?Host上的APP訪問內(nèi)存的流程:
? ? ? ? ? ? ? ?APP–>發(fā)送訪問線性地址:10page的數(shù)據(jù)–>CPU–>將10page的線性地址轉(zhuǎn)給MMU–>
? ? ? ? ? ? ? ? ? ? ? ? ?查詢線性與物理地址映射表–>緩存映射關(guān)系到TLB,并讀取物理地址中的數(shù)據(jù)–>返回。
? ? ? ? ? ? Guest上的APP訪問內(nèi)存的流程:
? ? ? ? ? ? ? ??Shadow Page Table的方式:
? ? ? ? ? ? ? ? ? ? ? ?注: 假設(shè)將Guest的APP訪問的虛擬線程地址稱為:GVA.
? ? ? ? ? ? ? ? ? ? ? ? ? ?將Guest虛擬機(jī)所獲得的虛擬物理內(nèi)存地址稱為:GPA
? ? ? ? ? ? ? ? ? ? ? ?Guest-APP–>發(fā)送訪問線性地址(GVA):10page的數(shù)據(jù)–>虛擬CPU–>將其轉(zhuǎn)給虛擬MMU–>
???????????????????????????????????查詢并緩存映射到虛擬TLB–>GPA的訪問請求被發(fā)給Host–>
???????????????????????????????????但GPA并非Host的虛擬線性地址,又非真實(shí)物理地址,因此無法由真實(shí)CPU處理–>
???????????????????????????????????Host上不得不采用軟件模擬來完成將GPA轉(zhuǎn)換為真實(shí)物理內(nèi)存的物理地址,
????????????????????????????????? ?此方式叫 Shadow page table(影子頁表),并最終獲得物理內(nèi)存中的數(shù)據(jù),返回給Guest.
? ? ? ? ? ? ? ??Intel的EPT(Extended Page Table:擴(kuò)展頁表) 和 AMD的NPT(Nested Page Table:嵌入頁表)技術(shù)
? ? ? ? ? ? ? ? ? ? 》MMU虛擬化 和 TLB虛擬化
? ? ? ? ? ? ? ? ? ? ? ? 注: TLB虛擬化: 由于GuestA和GuestB都被分配了1G的內(nèi)存,GuestA和GuestB將具有相同的內(nèi)存地址,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 但GuestA和GuestB它們實(shí)際映射到Host上的物理內(nèi)存的地址段肯定是不同的。但GuestA
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 訪問它的10page的數(shù)據(jù)若被緩存在TLB中,GuestB到CPU執(zhí)行時(shí),它恰巧也要訪問它的10page的數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 那TLB中緩存的條目肯定會對GuestB造成干擾,導(dǎo)致訪問錯(cuò)誤,因此只能將TLB清空,即GuestB到CPU
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 上執(zhí)行時(shí),TLB是空的,因此CPU只能再通過MMU查映射關(guān)系,緩存TLB再訪問數(shù)據(jù)。這導(dǎo)致TLB成了擺設(shè)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 沒有起到提高訪問物理內(nèi)存效率的作用。這才出現(xiàn)了TLB的虛擬化, 而TLB的虛擬化將原先的只有兩個(gè)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 字段緩存的TLB改成緩存三個(gè)字段: 一個(gè)GuestOS標(biāo)識, 一個(gè)GVA,一個(gè)HPA(Host中真實(shí)物理地址)。
? ? ? ? ? ? ? ?Guest-APP–>發(fā)生訪問線性地址(GVA): 10page的數(shù)據(jù)—>
????????????????????????????這時(shí)訪問請求被同時(shí)發(fā)送了兩份,并同時(shí)分別走了以下路線
??????????????????????????????路線1–>虛擬CPU–>虛擬MMU–>虛擬TLB–>完成.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 路線2–>EPT/NPT硬件實(shí)現(xiàn)的MMU–>EPT/NPT實(shí)現(xiàn)的TLB–>獲取真實(shí)物理地址中的數(shù)據(jù)–>返回給Guest.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這樣做后,即沒有改變GuestOS訪問內(nèi)存的過程,同時(shí)提高了GuestOS訪問內(nèi)存的效率。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?I/O虛擬化:
? ? (1) 外存設(shè)備虛擬化
? ? ? ? ? ? ? ?磁盤、光驅(qū)、U盤
? ? (2) 網(wǎng)絡(luò)設(shè)備虛擬化
? ? ? ? ? ? ? ?網(wǎng)卡
? ? (3) 輸入設(shè)備 : 它的虛擬化采用角點(diǎn)當(dāng)前被誰捕獲來模擬的,若當(dāng)前被虛擬機(jī)捕獲,則會動態(tài)將模擬鍵盤或鼠標(biāo)與物理設(shè)備關(guān)聯(lián).
? ? ? ? ? ? ? ?ps/2、USB
? ? (4) 顯示設(shè)備 : 它不能被模擬。
? ? ? ? ? ? ? ?VGA
? ? ? ? ? ? ? ?
I/O虛擬化的三種技術(shù):【注: 這三種技術(shù)只針對存儲和網(wǎng)絡(luò),其I/O設(shè)備的模擬不采用這些技術(shù)。】
? ? ? ? ? 》模擬 : 如VMware那一個(gè)文件做為VM的磁盤,這就是模擬。
? ? ? ? ? 》半虛擬化:
? ? ? ? ? ? ? 模擬的過程:Guest-APP去訪問I/O設(shè)備,如網(wǎng)卡,Guest-Kernel需要先調(diào)用虛擬網(wǎng)卡的驅(qū)動–>虛擬網(wǎng)卡驅(qū)動將數(shù)據(jù)
? ? ? ? ? ? ? ? ? ?轉(zhuǎn)發(fā)給虛擬網(wǎng)卡–>虛擬網(wǎng)卡再轉(zhuǎn)給Hypervisor上模擬的網(wǎng)卡進(jìn)程–>該網(wǎng)卡進(jìn)程再將數(shù)據(jù)放入IO Stack(IO棧)中
? ? ? ? ? ? ? ? ? ?等待真實(shí)網(wǎng)卡驅(qū)動將其轉(zhuǎn)給物理網(wǎng)卡并由其將數(shù)據(jù)轉(zhuǎn)發(fā)出去。
? ? ? ? ? ? ? 半虛擬化的過程:Guest-APP去訪問I/O設(shè)備,如網(wǎng)卡,但此時(shí)GuestOS明確知道自己不能直接訪問到物理網(wǎng)卡,因此,
? ? ? ? ? ? ? ? ? ?直接將數(shù)據(jù)轉(zhuǎn)給前端設(shè)備(它類似一個(gè)轉(zhuǎn)發(fā)器,但對GuestOS中的用戶看來它是一個(gè)網(wǎng)卡設(shè)備)–>前端設(shè)備直接與
? ? ? ? ? ? ? ? ? ?Hypervisor上的網(wǎng)卡進(jìn)程通信–>網(wǎng)卡進(jìn)程將數(shù)據(jù)轉(zhuǎn)到IO Stack中–>物理機(jī)驅(qū)動將其轉(zhuǎn)發(fā)給物理網(wǎng)卡。
? ? ? ? ? ? ? ? ? ?注: 前端設(shè)備(IO frontend):在Guest端省去了Guest虛擬網(wǎng)卡驅(qū)動的步驟。
? ? ? ? ? ? ? ? ? ? ? ?后端設(shè)備(IO backend):在Hypervisor端從虛擬網(wǎng)卡進(jìn)程到物理網(wǎng)卡稱為后端設(shè)備。
? ? ? ? ? 》I/O透傳:
? ? ? ? ? ? ? ? ? ?假如規(guī)劃中該主機(jī)上需要運(yùn)行4臺虛擬機(jī),該主機(jī)上安裝了6塊盤,6塊網(wǎng)卡,物理機(jī)磁盤和網(wǎng)卡都使用兩個(gè),
? ? ? ? ? ? ? 剩余的都給虛擬機(jī)使用,那完全可以給每個(gè)虛擬機(jī)分一個(gè)物理磁盤和一個(gè)物理網(wǎng)卡,這樣其性能可幾乎接近于硬件
? ? ? ? ? ? ? 訪問,但這需要Hypervisor來中的設(shè)備管理器來分配。
? ? ? ? ? ? ??
? ? ? ? ? ? ? x86平臺上DMA(直接內(nèi)存訪問)是集中共享式管理的
? ? ? ? ? ? ? ? ? ?假如當(dāng)前Hypervisor管理著4塊網(wǎng)卡,現(xiàn)在GuestA和GuestB要發(fā)生數(shù)據(jù)到網(wǎng)卡上,
? ? ? ? ? ? ? GuestA和GuestB都需要借助DMA來代其完成,但DMA是共享式管理,它僅僅負(fù)責(zé)接收
? ? ? ? ? ? ? Kernel發(fā)來的命令然后,根據(jù)指示將指定內(nèi)存地址中的數(shù)據(jù)發(fā)送到指定IO設(shè)備,如網(wǎng)卡,
? ? ? ? ? ? ? 或?qū)⒕W(wǎng)卡上收到的數(shù)據(jù)存入到指定的內(nèi)存地址中。問題是Guest通過復(fù)雜的kernel調(diào)用
? ? ? ? ? ? ? 過程完成了DMA代其發(fā)送數(shù)據(jù)包到網(wǎng)卡,但GuestOS并不知道DMA將數(shù)據(jù)包發(fā)到那個(gè)網(wǎng)卡
? ? ? ? ? ? ? 上了,更沒有人知道回應(yīng)的包到網(wǎng)卡后,應(yīng)該轉(zhuǎn)發(fā)給那個(gè)GuestOS.
? ? ? ? ? ? ? ? ? ?注: DMA:它的作用是幫助Kernel完成一些需要長時(shí)間等待的任務(wù),如:寫數(shù)據(jù)到磁盤,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 從磁盤中讀數(shù)據(jù)到內(nèi)存,將網(wǎng)卡上收到的數(shù)據(jù)讀到內(nèi)存等; 這對提高Kernel的執(zhí)行
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 效率是非常有幫助的。
? ? ? ? ? ? ??
? ? ? ? ? ? ?IO設(shè)備:
? ? ? ? ? ? ? ? ? ?每個(gè)IO設(shè)備上都有控制器,并且每個(gè)IO設(shè)備的控制器上都有寄存器且都有相應(yīng)的端口地址。
? ? ? ? ? ? ?IOMMU: IO內(nèi)存地址管理單元
? ? ? ? ? ? ? ? ? ?它的作用是自動將IO總線與相應(yīng)的IO端口關(guān)聯(lián)的設(shè)備。
? ? ? ? ? ? ? ? ? ?若需要將某塊網(wǎng)卡綁定給某GuestOS單獨(dú)使用,就需要在Hypervisor級別來控制對I/O端口的調(diào)用
? ? ? ? ? ? ?就只能接受該GuestOS的調(diào)用了,而它的實(shí)現(xiàn)就需要借助DMA中實(shí)現(xiàn)IOMMU來完成。而Intel的VT-d
? ? ? ? ? ? ?就是這樣一種技術(shù),它在DMA中實(shí)現(xiàn)了IOMMU,并自動來完成IO總線與IO端口的映射關(guān)聯(lián)。
? ? ? ? ? ? ? ? ? ?IOMMU的映射是完成將物理IO設(shè)備綁定給GuestOS的第一步,接著還需完成將物理IO設(shè)備的中斷信號
? ? ? ? ? ? ?也要映射給該GuestOS,要知道物理設(shè)備在實(shí)現(xiàn)中斷映射通常采用中斷控制器 或 DMA等方式實(shí)現(xiàn),而采用DMA方式
? ? ? ? ? ? ?則需要DMA必須能夠訪問全部的物理內(nèi)存,因?yàn)镈MA需要將IO設(shè)備的寄存器中的數(shù)據(jù)搬到指定的內(nèi)存地址空間
? ? ? ? ? ? ?或反過來;而若將物理硬件綁定給GuestOS,則DMA就需要訪問GuestOS的全部物理內(nèi)存,但實(shí)際上GuestOS
? ? ? ? ? ? ?的內(nèi)存是虛擬的,這就需要經(jīng)過復(fù)雜的轉(zhuǎn)換后才能訪問到其對應(yīng)的物理內(nèi)存地址空間,這也進(jìn)一步加大了
? ? ? ? ? ? ?中斷信號與GuestOS的映射;而這還是完成虛擬機(jī)綁定硬件的第二步。最后一步是完成IO設(shè)備緩沖區(qū)與GuestOS
? ? ? ? ? ? ?的映射,這里必須知道緩沖區(qū)一定是物理內(nèi)存中的一段空間,如何讓虛擬機(jī)的內(nèi)核知道這是自己所管理的物理IO設(shè)備的
? ? ? ? ? ? ?IO緩沖區(qū)?;而這一切Intel的VT-d都幫我們實(shí)現(xiàn)了。
? ? ? ? ? ? ?
? ? ? ? ? ? ?Intel的VT-d
? ? ? ? ? ? ? ? ? ?簡單來說 VT-d 是一種基于北橋的硬件輔助虛擬化技術(shù)。
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ?
? ?Intel的硬件輔助虛擬化技術(shù):
? ? ? ? ? CPU: vt-x, EPT, tagged-TLB
? ? ? ? ? IO: vt-d,SR-IOV:單根設(shè)備虛擬化協(xié)議, VMDq
? ? ? ? ? 這些技術(shù)詳細(xì)分為三類:
? ? ? ? ? ? ? ?第一類: 跟處理器相關(guān): VT-x, EPT, tagged-TLB
? ? ? ? ? ? ? ?第二類: 跟芯片相關(guān): vt-d
? ? ? ? ? ? ? ?第三類: 跟IO輸入輸出相關(guān): VMDq 和 SR-IOV
? ? ? ? ??
? ? ? ? ? IO虛擬化技術(shù): QEMU(法國天才程序員開發(fā)) 、virtio(澳大利亞天才程序員開發(fā))
? ? ? ? ? KVM和Xen都需要借助以上兩種虛擬化技術(shù)實(shí)現(xiàn)IO虛擬化。
? ? ? ? ??
? ?虛擬化技術(shù)分類:
? ? ? ?(1) 模擬:【特點(diǎn):虛擬硬件環(huán)境與底層硬件環(huán)境無關(guān).】
? ? ? ? ? ? ? ?著名的模擬器: PearPC, ?Bochs, QEMU
? ? ? ?(2) 完全虛擬化: 【特點(diǎn): 虛擬硬件環(huán)境與底層硬件環(huán)境必須一致。】
? ? ? ? ? ? ? ?在完全虛擬化中通常采用兩種加速技術(shù):
? ? ? ? ? ? ? ? ? ? ? ?BT : 二進(jìn)制翻譯加速技術(shù)
? ? ? ? ? ? ? ? ? ? ? ?HVM: 基于硬件的虛擬化
? ? ? ? ? ? ? ?知名的產(chǎn)品:VMware Workstation, VMware Server, Parallels Disktop(iMac上用), KVM, Xen(HVM)
? ? ? ?(3) 半虛擬化:【同樣要求虛擬硬件環(huán)境與底層硬件環(huán)境必須保持一致】
? ? ? ? ? ? ? ?知名的開源產(chǎn)品: xen, uml(user-mode ?linux)
? ? ? ?(4) OS級別的虛擬化:
? ? ? ? ? ? ? ?OpenVZ, ?LXC(LinuX Container), libcontainer, Virtuozzo, Linux V Servers
? ? ? ? ? ? ? ?Solaris ?Containers
? ? ? ? ? ? ? ?FressBSD ?jails
? ? ? ?(5) 庫虛擬化:
? ? ? ? ? ? ? ?wine

轉(zhuǎn)載于:https://www.cnblogs.com/root-wang/p/8023776.html

總結(jié)

以上是生活随笔為你收集整理的Xen安装部署和基本原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。