vm


虛擬機簡介

首先來看一下整個虛擬機在物理機上的結構圖

 

每台虛擬機的組成要素:虛擬機的os,應用程序需要的各種包,應用程序。而每一台虛擬機都是在Hypervisor的基礎上建立起來的。下面來看一下什么是Hypervisor

Hypervisor

Hypervisor是一種運行在物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享一套基礎物理硬件,因此也可以看作是虛擬環境中的“元”操作系統,它可以協調訪問服務器上的所有物理設備和虛擬機,也叫虛擬機監視器(Virtual Machine Monitor)。Hypervisor是所有虛擬化技術的核心。非中斷地支持多工作負載遷移的能力是Hypervisor的基本功能。當服務器啟動並執行Hypervisor時,它會給每一台虛擬機分配適量的內存、CPU、網絡和磁盤,並加載所有虛擬機的客戶操作系統。

綜上所述,Hypervisor是運行在物理機之上,為多台虛擬機提供能夠宿主在物理主機之上的基礎環境。

其實Hypervisor可以分為兩種類型:

I型–裸機型,直接運行在物理設備之上,是一種基於內核的虛擬機(其中包括 Oracle 虛擬機、VMware ESX Server、Microsoft Hyper-V 和 Citrix XenServer)。這種類型的Hypervisor所扮演的角色是一種抽象概念的OS。

II型–宿主機型,運行在宿主機器的操作系統上(如上圖)(VMware Workstation、Microsoft Virtual PC 和 Parallels Workstation ) 創建硬件全仿真實例。Hypervisor構建出一整套虛擬硬件平台(CPU/Memory/Storage/Adapter),上面需要你再去安裝新的操作系統和需要的應用軟件,這樣底層和上層的OS就可以完全無關化。

兩者對比如下:

因素 裸機型 主機型
性能 性能高,資源開銷小,高級的資源控制。 性能較差,資源開銷大有限的資源控制,虛擬機競爭資源。
硬件兼容性 沒有太多要求,因為虛擬化平台運行在傳統操作系統之上,有操作系統硬件的驅動程序支持。 運行在經過認證的有限的硬件集合內,如VMware ESX和ESXi。
易用性 安裝容易,但配置很復雜。 安裝、使用和維護都很簡單,不需要專門的技能。
高可用性 高可用性,主機發生故障時能夠提供持續的可用性 缺少高可用特性,主機發生故障時,故障解決前虛擬機將處於停機狀態。
可靠性 可靠性高,Hypervisor經過很多QA(quality-assurance)測試和嚴格的硬件認證。

 

直接運行在硬件上,而不是主機操作系統,減少了一個可能發生故障的組件。

主機型Hypervisor使用通用的硬件並沒有對虛擬化進行專門的測試。
虛擬化Hypervisor管理 提供了幾種控制台,能夠容易的管理數量巨大的主機及虛擬機;

 

市場上具有很多用於裸機虛擬化Hypervisor的第三方管理和自動化產品可以使用。

 

管理員必須單獨管理每個虛擬機,在大型虛擬化基礎設施中將非常繁瑣,也很耗時。
成本 裸機Hypervisor成本卻很昂貴,尤其是當你想擴大規模並使用高級特性時。多數裸機虛擬化Hypervisor宣稱是免費的,但是僅限於核心Hypervisor. 成本較低,許多基於主機的Hypervisor是免費的或者僅僅花費數百美元。
可擴展性 能夠擴展到相當大的規模,使用裸機Hypervisor,如果你的主機具有足夠的硬件資源,那么你能夠輕松地在一台主機上運行數百個虛擬機。

 

在vSphere 5中單個虛擬機能夠配置高達1TB的內存以及32個虛擬CPU。

 

非常有限的可擴展性,VMware基於主機的虛擬化Hypervisor VMware Workstation,僅能夠支持32GB的內存以及8個虛擬CPU。
產品 VMware ESX和ESXi,微軟的Hyper-V,Citrix的XenServer,orcal虛擬機,linux KVM。 VMware Server(GSX)、Workstation和Microsoft Virtual PC、Microsoft Virtual Server等

Hypervisor的構成

Hypervisor僅是一個從其虛擬操作系統抽象機器硬件的分層應用程序。通過這種方式,每個虛擬操作系統看到的僅是一個VM而不是真實的硬件機器。

在較高級別上,Hypervisor需要少量設施啟動虛擬操作系統:一個需要驅動的內核映像、一個配置(比如 IP 地址和所需的內存量)、一個磁盤和一個網絡設備。磁盤和網絡設備通常映射到機器的物理磁盤和網絡設備(如圖所示)。最后,需要使用一組虛擬操作系統工具啟動和管理虛擬操作系統。

然后,一個簡化的 Hypervisor 架構實現最后的關鍵功能,從而使來賓操作系統可以和宿主操作系統同時運行。實現這個功能需要一些特定的要素,如下圖所示。首先,類似於將用戶空間應用程序和內核函數連接起來的系統調用,一個通常可用的虛擬化調用(hypercall,Hypervisor 對操作系統進行的系統調用)層允許來賓系統向宿主操作系統發出請求。可以在內核中虛擬化 I/O,或通過來賓操作系統的代碼支持它。故障必須由 Hypervisor 親自處理,從而解決實際的故障,或將虛擬設備故障發送給來賓操作系統。Hypervisor 還必須處理在來賓操作系統內部發生的異常。(畢竟,來賓操作系統發生的錯誤僅會停止該系統,而不會影響 Hypervisor 或其他來賓操作系統)。Hypervisor 的核心要素之一是頁映射器,它將硬件指向特定操作系統(來賓或 Hypervisor)的頁。最后,需要使用一個高級別的調度器在Hypervisor和來賓操作系統之間傳輸控制。

虛擬化技術

什么是虛擬化

虛擬化(Virtualization)技術最早出現在 20 世紀 60 年代的 IBM 大型機系統,在70年代的 System 370 系列中逐漸流行起來,這些機器通過一種叫虛擬機監控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成許多可以運行獨立操作系統軟件的虛擬機(Virtual Machine)實例。隨着近年多核系統、集群、網格甚至雲計算的廣泛部署,虛擬化技術在商業應用上的優勢日益體現,不僅降低了 IT 成本,而且還增強了系統安全性和可靠性,虛擬化的概念也逐漸深入到人們日常的工作與生活中。

虛擬化是一個廣義的術語,對於不同的人來說可能意味着不同的東西,這要取決他們所處的環境。在計算機科學領域中,虛擬化代表着對計算資源的抽象,而不僅僅局限於虛擬機的概念。例如對物理內存的抽象,產生了虛擬內存技術,使得應用程序認為其自身擁有連續可用的地址空間(Address Space),而實際上,應用程序的代碼和數據可能是被分隔成多個碎片頁或段),甚至被交換到磁盤、閃存等外部存儲器上,即使物理內存不足,應用程序也能順利執行。

為什么要用虛擬化

  • 基礎架構的利用率,通過將基礎架構資源池化並打破一個應用一台物理機的限制,虛擬化大幅提升了資源利用率。通過減少額外硬件的采購,企業可以節約大幅成本。
  • 虛擬機比真實的機器可以被更容易從外部被控制和檢查,並且可以配置更靈活,比如動態分配CPU資源、內存、磁盤等。
  • 創建一個新的虛擬機不需要預先購買硬件,只需要在有資源空閑的設備上用簡單的命令創建一台即可,大大簡化了服務器的供應問題。
  • 同時,一個新的虛擬機可以容易地從一台計算機轉移到另一台上,這點還可以被用於遠距離災難恢復方案。
  • 節約能耗、制冷和機房空間。通過減少數據中心里服務器和相關硬件的數量,企業可以從減少機房空間、能耗與制冷需求中獲益,從而降低IT成本。

CPU指令的特權級

要徹底弄明白什么是虛擬化,我們得先講講CPU的特權級。

CPU的特權級(Ring)也叫hierarchical protection domains(等級保護域)。它是CPU設計的一種機制,用來保護數據和阻止惡意行為,確保計算機安全。特權級共分為4級:0、1、2、3。特權級是針對CPU指令的,並非操作系統,操作系統僅提供不同權限訪問級別的資源。

操作系統一般只使用特權級0和3。特權最高的是0,可以直接操作硬件,如CPU和內存。一般操作系統和驅動運行在此級別下。特權級3是給一般的程序使用的,可以調用基本的CPU指令。特權級3是無法調用特權級0的指令的,如果非要調用則會顯示為非法指令。

引用特權級的概念是為了保護計算機,一些危險指令只有操作系統可以執行,防止普通程序濫用其他程序的資源。如間諜軟件要想開啟攝像頭就必須向特權級0的驅動程序請求開啟,否則就不允許。

虛擬化基本類型

全虛擬化(FullVirtulization)

在完全虛擬化技術中,不再對底層的硬件資源進行划分,而是部署一個統一的主機系統,並在其上加裝了Virtual Machine Monitor虛擬層作為應用級別的軟件而存在,不涉及操作系統內核,虛擬層會給每個虛擬機模擬一套獨立的硬件設備,包含CPU,內存,主板,顯卡,網卡等硬件資源,在其上安裝客戶操作系統,最終用戶的應用程序運行在客戶操作系統中。它區別於其他虛擬化技術最大的特點就是允許操作系統完全不需修改的運行在虛擬平台上。

VMware Workstation采用了將常用的PC硬件進行虛擬化的方法,允許多個操作系統在用一台主機上運行。Hypervisor(虛擬機管理程序)是客戶操作系統和硬件之間的抽象層。該抽象層允許任何其他客戶操作系統運行在主機操作系統之上。它采用了二進制翻譯技術,在被虛擬的操作系統運行時監聽二進制指令動態捕捉特權操作,以相應的代碼替換這些特權操作,從而完成虛擬化工作。VMware Workstation也能虛擬IO硬件,增加了高性能設備驅動到Hypervisor中,整個虛擬環境實際上是一個單獨的文件,這意味整個系統(包括客戶操作系統,虛擬機和虛擬硬件)可以簡單快速的整合到一個新的主機,從而實現負載均衡。

完全虛擬化技術最大的好處就是可以無需修改操作系統,直接移植到虛擬環境中,支持多個Guest OS。但是完全虛擬化的缺點就是虛擬機的Guest OS的系統性能會受到影響,而且往往比原有的系統性能下降不少,尤其是在IA32等常見體系結構上。因為它們運行於用戶空間,頻繁的由用戶空間向內核空間進行切換嚴重的影響了它的性能。

虛擬化是其他軟件運行的軟件和/或硬件的仿真,這種虛擬環境稱作virtual machine(VM)。虛擬化的形式有很多,主要通過計算架構層來進行區別。例如,應用程序虛擬化提供了運行應用程序期望使用的應用程序編程接口(API)的虛擬實現,允許為一個平台開發的應用程序在另一個平台上運行,而無需修改應用本身。Java虛擬機(JVM)是應用程序虛擬化的一個例子; 它作為Java應用程序代碼和操作系統(OS)之間的中介。虛擬化的另一種形式,被稱為操作系統虛擬化,提供了操作系統界面的虛擬實現,可用於運行為與主機相同的操作系統編寫的應用程序,每個應用程序都在單獨的VM容器,

在完全虛擬化中,一個或多個操作系統及其包含的應用程序在虛擬硬件之上運行。操作系統及其應用程序的每個實例都在名為客戶機操作系統的單獨VM中運行。主機上的Guest OS由Hypervisor管理,也稱為虛擬機監視器(VMM),它控制Guest OS和物理硬件之間的指令流,如CPU,磁盤存儲,內存和網絡接口卡。Hypervisor可以對系統的資源進行分區,並隔離Guest OS,以便每個用戶只能訪問其自己的資源,以及可能訪問共享資源(如主機操作系統上的文件)。此外,每一個Guest OS可以被完全封裝,使其可移植。

在完全虛擬化中,Hypervisor提供的大多數硬件接口與硬件物理平台提供的硬件接口相同。這意味着,如果操作系統和應用程序與底層硬件兼容,則完全虛擬化中運行的操作系統和應用程序不需要修改,以使虛擬化工作。完全虛擬化的一個有趣的轉折是半虛擬化,這是Hypervisor為Guest OS提供接口的方法,Guest OS可以使用它,而不是使用普通的硬件接口。如果Guest OS可以使用半虛擬化接口,則它們可以顯著加快對硬盤和網絡等資源的訪問。 不同類型的半虛擬化由不同的Hypervisor提供。

完全虛擬化的動機

最近全面虛擬化產品和服務的使用增加受到許多好處的推動。采用完全虛擬化的最常見原因之一是運營效率:公司可以通過在每台計算機上放置更多的負載來更有效地使用他們現有的硬件。通常,使用完全虛擬化的服務器可以比運行單個操作系統實例和單個服務集的服務器更多地使用計算機的處理和內存資源。CPU架構的最新進展使虛擬化的速度比幾年前還快,而CPU供應商和虛擬化軟件供應商也將繼續推進類似的進步。此外,CPU體系結構的改變已經使完全虛擬化更加安全,通過加強Hypervisor限制資源。

完全虛擬化的第二個常見用途是桌面虛擬化,其中單個PC運行多個OS實例。 部署桌面虛擬化有如下幾個原因。它可以為僅在特定操作系統上運行的應用程序提供支持。它允許對操作系統進行更改,並隨后在需要時恢復為原始狀態,例如消除對安全性產生負面影響的更改。桌面虛擬化還支持更好地控制操作系統,以確保其符合組織的安全要求。 可以通過創建一個不間斷更新Guest OS以確保其授權的程序的確切版本的高保證平台,而不需要其他程序,來實現此控制。要實現此控制,可以通過創建一個高保證平台不斷的更新Guest OS,使程序的確切版本被授權而不需要其他程序。

最常用的桌面虛擬化使用方式是當用戶桌面運行在較新版本時,使那些只能運行在老版本系統上的程序可以運行。在這種情況下,桌面虛擬化對應用程序的連續性很有用,因為操作系統的運行速度要比運行它們的應用程序快。隨着越來越多的應用程序成為基於Web的,桌面虛擬化將變得更加重要:只有在特定瀏覽器的舊版本上運行的Web應用程序可以在具有該瀏覽器的較舊版本的虛擬化系統中運行,而用戶的主要環境正在運行較新版本(通常更安全)的瀏覽器版本。對於諸如此類的用例,許多公司使用應用程序虛擬化而不是桌面虛擬化。

完全虛擬化對安全性有一定的影響。虛擬化增加了技術層次,額外安全控制來增加安全管理負擔。而且,如果發生安全性損害,將許多系統組合到單個物理計算機上可能會產生更大的影響。此外,一些虛擬化系統可以輕松地在系統之間共享信息;如果沒有小心控制,這種方便會稱為攻擊載體。在某些情況下,虛擬化環境是非常動態的,這使得創建和維護必要的安全邊界變得更加復雜。

完全虛擬化的類型

有兩種類型的完全虛擬化,下圖比較了它們的高級架構。在bare metal virtualization(也稱為native virtualization)中,Hypervisor直接在底層硬件上運行,而無需主機操作系統;Hypervisor甚至可以內置到計算機的固件中。完全虛擬化的另一種形式,稱為hosted virtualization,Hypervisor運行在主機操作系統之上; 主機操作系統幾乎可以是任何常見的操作系統,如Windows,Linux或MacOS。Hosted virtualization體系結構通常還具有在Guest OS中運行的額外的軟件層(虛擬化應用程序),它提供實用程序來控制客戶操作系統中的虛擬化,例如與主機操作系統共享文件的功能。Hosted virtualization架構還允許用戶與hosted virtualization應用程序一起運行諸如Web瀏覽器和電子郵件客戶端的應用程序,而不像只能在虛擬化系統中運行應用程序的裸機架構。

服務器通常在使用metal virtualization的計算機上進行虛擬化。台式機通常在具有hosted virtualization的計算機上進行虛擬化。在bare metal和hosted virtualization中,每個guest OS似乎都有自己的硬件,如普通計算機。 這包括:

  • CPU
  • Memory
  • Storage
  • Storage controllers
  • Ethernet controllers
  • Dispaly and sound devices
  • Keyboard and mouse

許多虛擬化環境提供了額外的虛擬硬件,如USB控制器,用於打印的並行端口和串行端口。 一些Hypervisor允許一些硬件接口的半虛擬化,最常見的是存儲控制器和以太網控制器。如果Hypervisor正在運行的硬件CPU中支持這些功能,某些Hypervisor還可向高速存儲控制器和以太網控制器提供直接內存訪問(DMA)。來自guest OSs的DMA訪問可以顯着提高磁盤和網絡訪問的速度,盡管這種類型的加速可以防止一些有用的虛擬化功能,如快照和移動的guest OSs。

決定bare metal和hosted virtualization(無論是否擁有主機操作系統)都是重要的操作和安全決策。在主機操作系統之上添加虛擬機管理程序會給主機增加更多的復雜性和更多的漏洞。然而,Hypervisor比主機操作系統要簡單得多,因此它提供了較小的目標。通過使用Hypervisor替換主機操作系統來選擇metal virtualization可以提高安全性,這取決於Hypervisor的良好安全性,而在主機操作系統之上添加Hypervisor時往往會增加風險。在決定是否在服務器或桌面虛擬化解決方案下使用主機操作系統時,組織應平衡安全性和功能性。他們還應該考慮到bare metal Hypervisors運行在比hosted Hypervisors更有限的硬件范圍上; 例如,bare metal Hypervisors通常僅在有限數量的以太網控制器和顯卡上工作。

硬件仿真(有時稱為硬件翻譯)是一種托管虛擬化。主要區別在於,在硬件仿真中,Hypervisor提供與物理硬件提供的不同的硬件接口。因為硬件仿真中的Hypervisor可以模擬guest OS所需的所有硬件,所以它可以運行不同於主機平台的平台設計的未修改的操作系統。例如,早期版本的Virtual PC允許用戶在Apple MacOS平台支持的PowerPC處理器上運行Microsoft Windows操作系統。同樣,蘋果公司也為其提供了英特爾Mac OS X平台的Rosetta軟件,允許為Mac OS X PowerPC版本設計的程序在Intel Mac平台上運行。

虛擬化硬件

為了使完全虛擬化有效,呈現給guest OS的虛擬化硬件必須非常接近於物理硬件。此外,虛擬化系統必須為虛擬化硬件提供附加功能,以幫助其與組織網絡中的物理硬件集成。本節討論虛擬化網絡和存儲,以及如何封裝guest OS。

虛擬化網絡

完全虛擬化管理程序可以提供網絡功能,允許各個guest OSs彼此通信,同時限制對外部物理網絡的訪問。Guest OSs所看到的網絡接口可以是虛擬的,物理的或兩者都是。 典型的Hypervisors提供三種主要形式的網絡訪問:

  • Network Bridging。 客戶操作系統可以獨立於主機操作系統直接訪問主機的網絡接口卡(NIC)。
  • Network Address Translation(NAT)。 Guest OS被提供一個虛擬NIC,連接到Hypervisor內的模擬NAT。 與傳統NAT一樣,所有出站網絡流量都通過虛擬網卡發送到主機操作系統進行轉發,通常是主機系統上的物理網卡。
  • Host Only Networking。 客戶操作系統被給予一個不直接路由到物理網卡的虛擬網卡。 在這種情況下,客戶操作系統可以配置為彼此通信,並且可能與主機操作系統進行通信

當單個主機上存在多個guest OSs時,Hypervisor可以為這些客戶機提供虛擬網絡。Hypervisor可以實現虛擬交換機,集線器和其他網絡設備。使用Hypervisor的網絡在單個主機上的客戶端之間進行通信具有大大提高速度的優勢,因為數據包不會觸及物理網絡設備。Hypervisor可以通過多種方式完成內部host-only networking。在某些系統中,內部網絡看起來像虛擬交換機。其他用戶使用虛擬LAN(VLAN)標准來更好地控制客戶端系統的連接方式。 大多數Hypervisors程序還提供內部網絡地址和端口轉換(NAPT),就像是NAT一樣的虛擬路由器。

然而,虛擬機管理程序的網絡結構內部的網絡可能會造成操作上的缺點。許多網絡依賴於在流經路由器和交換機時監視流量的工具; 這些工具在管理程序的網絡中移動時無法查看流量。有一些Hypervisor允許網絡監控,但是這種功能通常不如許多公司期望對物理網絡進行重大監控的工具那么強大。一些Hypervisors提供了允許特權虛擬機對網絡流量具有完全可見性的API。不幸的是,這些API還可以為攻擊者嘗試監控網絡通信提供其他方法。通過Hypervisor進行網絡監控的另一個問題是由於流量大而導致Hypervisor發生性能下降或拒絕服務條件的可能性

Hypervisor內部網絡的安全隱患不應該最小化。例如,這里有兩台計算機,一台充當面向公眾的Web服務器,另一台是內部數據庫服務器。公司還監視連接兩台計算機的交換機,觀察表示數據庫發生攻擊的流量。如果這兩個服務器都移動到單個Hypervisor,並且Hypervisor的虛擬網絡用於服務器之間的通信以提高效率,則監視兩個系統之間的所有流量的能力將丟失,除非管理程序本身可以執行此監視符合公司的安全政策。

為了避免這種可見性的損失,一些公司有意將虛擬主機之間的網絡流量暴露給組織中已經存在的物理網絡。這需要Hypervisors運行的系統具有多個網絡接口,與虛擬網絡相比,這可能會顯着減慢網絡通信,但優點在於公司不需要更改其安全策略來獲得虛擬化的成本優勢。公司應該考慮在Hypervisors中隱藏的流量之間的折衷以及暴露流量的額外開銷和風險,但是可以使用已經用於控制其他網絡流量的相同工具來控制流量。

虛擬化存儲

Hypervisor系統具有許多方式來模擬客戶操作系統的磁盤存儲。 所有Hypervisors至少具有虛擬硬盤驅動器,而其中一些虛擬機也具有更高級的虛擬存儲選項. 此外,一些Hypervisors可以使用主機系統上的高級存儲接口,例如網絡連接存儲(NAS)和存儲區域網絡(SAN),以向guest OSs提供不同的存儲選項。

通常使用的所有Hypervisor通過使用磁盤映像來呈現具有虛擬硬盤驅動器的客戶機操作系統。磁盤映像是主機上看起來像guest OS的文件,就像整個磁盤驅動器一樣。無論guest OS向虛擬硬盤驅動器寫入什么,都將進入磁盤映像。通過hosted virtualization,磁盤映像作為文件或文件夾顯示在主機操作系統中,可以像其他文件和文件夾一樣處理。

大多數虛擬化系統還允許guest OS直接訪問物理硬盤驅動器,就像它們直接連接到guest OS一樣。 這與使用磁盤映像不同,因為磁盤映像是實際驅動器的虛擬表示。對於連接到主機操作系統的軟驅和CD-ROM驅動器,直接訪問是常見的,這樣的話,guest OS就可以從插入主機的CD-ROM安裝新軟件。一些Hypervisor還允許guest OS連接到整個物理硬盤驅動器。使用物理硬盤驅動器的主要優點是訪問速度比訪問磁盤映像要快得多。

許多計算機可以訪問NAS和SAN系統。 一些Hypervisor可以將這些系統作為NAS或SAN呈現給guest OS,而其他管理程序可以使這些系統顯示為虛擬驅動器。這是虛擬化市場的一個積極的發展領域,並且新型存儲虛擬化正在頻繁地被添加到Hypervisors中

使用虛擬存儲的安全隱患基本上與使用真實存儲相同。Guest OS可以訪問的各種類型的存儲的訪問應該被控制,就像在完整計算機上使用存儲時一樣。當然,使用磁盤備份作為安全策略的一部分與虛擬計算機一樣重要,因此,公司應將虛擬化存儲的備份合並到其備份策略中。另外,可以在host和VM級別上控制對虛擬存儲的訪問。利用現有的認證和授權機制來根據公司策略限制用戶對文件和對象資源的訪問。

Guest OS Images

完全虛擬化Hypervisor將Guest OS的所有組件(包括其應用程序及其使用的虛擬資源)封裝到單個邏輯實體中。鏡像是至少包含該封裝信息的文件或目錄。鏡像存儲在硬盤驅動器上,可以以與任何文件相同的方式傳輸到其他系統(請注意,鏡像的大小通常為千兆字節)。一些虛擬化系統使用稱為Open Virtualization Format(OVF)的虛擬化圖像元數據標准,該虛擬化圖像元數據標准支持跨虛擬化解決方案的圖像元數據和組件的互操作性。

快照是運行圖像的狀態的記錄,通常被捕獲為圖像和當前狀態之間的差異。例如,快照將記錄虛擬存儲,虛擬內存,網絡連接和其他狀態相關數據中的更改。快照允許客戶機操作系統被掛起,隨后恢復,而不必關閉或重新啟動客戶機操作系統。 許多但並非全部的虛擬化系統都可以拍攝快照。

在某些Hypervisor中,甚至可以在不同的主機上恢復guest OS的快照。雖然可能會引入許多問題來處理實時遷移,包括傳輸延遲和兩個物理服務器之間可能存在的任何差異(例如,IP地址,處理器數量或硬盤空間),但大多數實時遷移解決方案 提供解決這些問題的機制。如果目標系統使用相同的虛擬化產品,則不會出現其中的許多問題。但是,跨異構管理程序的實時遷移可能會引入可能影響Guest OS安全性的潛在配置錯誤。

完全虛擬化使用案例

完全虛擬化有兩個主要用例:服務器虛擬化和桌面虛擬化。

服務器虛擬化

虛擬化服務器可以提供一些安全的好處。 在Hypervisor中運行服務器提供了一個沙箱,可以限制妥協的影響,Hypervisor可能會提供比guest OS更小的攻擊面,從而減少在客戶機外部擴展成功的妥協的可能性。然而,服務器虛擬化並不能防止攻擊者通過服務器應用程序或客戶機操作系統中的漏洞來破壞服務器,也不會阻止攻擊者直接破壞主機操作系統(如果存在),例如在同一個子網內,從另一個主機攻擊主機操作系統的網絡服務。最重要的是,虛擬化同一主機上的多個服務器往往會對安全性產生負面影響,因為服務器的邏輯接近以及影響主機上所有服務器的單一折中的潛在影響。

下面的討論解決了使用單服務器和多服務器虛擬化的常見原因。

單服務器虛擬化

單一服務器虛擬化的常見用例是支持僅在遺留的操作系統上運行的服務,該服務不能自行正確保護。例如,常規安全控制可能不適用於舊版操作系統。如果服務和legacy OS作為guest OS運行,則Hypervisor或主機操作系統可能能夠使用legacy OS本身不能使用的各種安全控制來監視客戶操作系統的操作。此外,可以添加一個額外的身份驗證和審核層,例如在主機操作系統級別。 這種監控可以建立在組織的安全策略中。

多服務器虛擬化

多年來,公司通常將每個重要服務部署到自己的專用主機上,以便更好地將每個服務器與其他服務器隔離開來,並防止一台服務器或主機受到危及其他服務器的控制。然而,由於擁有許多主機的是昂貴的(空間,功耗,維護,硬件等),所以組織已經采用了服務器虛擬化,以便它們可以在單個主機上托管多個服務,每個服務都在單獨的客戶操作系統中執行 安全要求。當某個服務超負荷使用時,Hypervisor可以協調guest OS和其他Hypervisor之間的請求,以確保資源正確分配。很少使用的服務可以由guest OS保存在保存狀態,並由guest OS根據需要加載。 這樣可以釋放其他guest OSs的資源。 此外,可以部署新的服務器,而無需配置和部署新的專用硬件。

數據中心的另一個優點是Hypervisor可以將資源作為單個實體呈現給guest OS,例如將多個硬盤驅動器顯示為單個存儲實體。這允許從系統中透明地添加或刪除個別資源,而無需修改單個guest OS。單個只讀映像可以在許多服務器之間共享。 另外,配置管理有好處,因為每個客戶機操作系統都可以從父客戶操作系統導出,提供一致的安全基准,並減少配置和修補單個服務器所需的時間和精力。利用虛擬化的公司可以從改進的事件處理中獲益; 服務器可以快速恢復到未感染的狀態,而受感染的guest OS的完整狀態(包括RAM)可以保存在快照中供以后檢查。

然而,在單個管理程序中整合多個服務可能存在重大的安全風險。 例如,關鍵服務通常放置在自己的專用主機上,以便主機可以專門為該服務進行安全保護,從而使任何其他服務的妥協不會影響關鍵服務。通過將主要服務放在其他服務的主機上,這兩個目標都受到影響。 如果主機具有明顯不同的安全需求,則將多個服務放置在主機上是特別危險的。例如,假設一個服務被認為是關鍵的,並且被非常強大地保護,而同一個主機上的另一個服務被認為是低影響的並且被相對弱化。希望破壞關鍵服務的攻擊者可能會影響低影響的服務,並且使用虛擬網絡本地來嘗試訪問關鍵服務或破壞虛擬機管理程序,從而獲得對關鍵服務的訪問這一事實。具有與計算機資源分配有關的政策的公司應在這些政策中考慮虛擬化。

當多台服務器虛擬化用於在許多主機上運行服務器,並根據不斷變化的資源需求將服務器從主機移動到主機時,可稱之為雲計算。完全虛擬化是雲基礎設施作為服務架構的核心支持技術。

桌面虛擬化

使用桌面虛擬化的最常見原因之一是允許用戶在單個主機上為不同的操作系統運行應用程序。 沒有虛擬化,這將通過使用多個設備(每個具有不同的操作系統)或通過將單個設備配置為使用多個操作系統進行引導並一次使用一個操作系統(和應用程序)來實現。 桌面虛擬化允許用戶在一台計算機上同時訪問這兩個操作系統。

桌面虛擬化的另一個常見用途是允許組織更緊密地控制其用戶的環境。 組織存儲包含操作系統和用戶所需的所有應用程序的已知良好映像。用戶使用托管虛擬化加載此映像,並且在此映像中執行所有操作,而不是在主機操作系統上,然后退出客戶機操作系統。 稍后,用戶重新啟動客戶機操作系統,導致客戶機操作系統的任何先前更改都將丟失。這種quit-and-restart策略的優點是已經引入到操作系統或應用程序的惡意更改被退出刪除。

通過桌面虛擬化,用戶的數據通常存儲在主機或網絡上; 否則,每次用戶退出虛擬化系統時都會丟失。桌面虛擬化的這個方面可能是用戶最為沮喪和復雜的問題; 將新文檔存儲在似乎是正確的地方是很容易的,只有稍后發現文檔丟失,因為它存儲在錯誤的地方。一些桌面虛擬化系統具有處理在退出之前確保用戶數據正確存儲的方法,但是這些程序並不是萬無一失的。例如,許多Windows程序在Windows注冊表中存儲有價值的信息,並且這些數據通常很難找到並正確備份。公司應測試其用於桌面用戶預期使用的所有軟件的任何桌面虛擬化系統的數據備份設施。

半虛擬化(Parairtulization)

為了改善完全虛擬化技術的性能,一種新的半虛擬化技術誕生了。它使用Hypervisor分享存取底層的硬件,但是它的客戶操作系統集成了虛擬化方面的代碼。該方法無需重新編譯或引起陷阱,因為操作系統自身能夠與虛擬進程進行很好的協作。與全虛擬化的動態監聽客戶操作系統的二進制代碼相比,半虛擬化是在源碼級別替換掉客戶操作系統中的特權級操作。通過對操作系統的內核做一定的修改,使得原本一些需要直接通過CPU執行的保護任務,可以在修改后的內核中直接執行,這樣就有效的提高了虛擬機的效率。客戶操作系統通過類似於系統調用的方式陷入完成其特權級操作的請求。

要實現虛擬化,需要滿足以下條件:

  1. 體系架構本身要至少存在兩種操作模式用戶模式和特權模式。
  2. 非特權模式下的應用程序可以通過函數調用或者其他方法來訪問特權模

式下的資源。

  1. 要有一個內存分配或者保護機制,例如分段,分頁機制。
  2. 要有一個異步的中斷機制來保證子系統可以和進行交互。

Intel的IA-32架構基本都符合這些要求。但是x86架構的設計並不支持完全的虛擬化,如果要正確實現x86架構虛擬化,VMM就必須能夠對某幾條特定的“超級指令”進行操作。這些超級指令是指只有特權級別的程序才有權限執行的命令。完全虛擬化的方式是動態地重寫這些超級指令,在其中有可能需要VMM干涉的地方插入陷阱操作。但是由於要動態地監聽所有指令,所以這種轉換要被應用於整個Guest OS的內核,這就導致了相關的轉換、執行和緩存等開銷。Xen采用的半虛擬化方式的實現,是在源碼級別替換掉這些會引起問題的指令,在運行期間處理流程會由Guest OS轉移到虛擬監視層Hypervisor,像應用程序使用系統調用一樣來完成特權級的轉換,這就避免了對二進制代碼的動態監聽,提高了效率。

半虛擬化總體架構

辦虛擬化架構如下圖所示,監控程序(Hypervisor)運行在最高優先級(Ring0)上,Guest OS內核運行在較低的優先級上(Ring1),運行在Guest OS中的應用程序還是運行在最低的優先級上(Ring3).每一個Guest OS都運行在一個虛擬域(Domain)中,其中有一個主控制域(Domain0),擁有對整個(或部分)物理系統資源的管理功能,並提供對整個系統的管理平台,負責創建和刪除其他的虛擬域(DomainU)。

下面對其中的管家部分進行說明:

虛擬抽象層(Hypervisor)

Hypervisor只是用來提供一些最基本的控制操作。設計與實現過程中,我們希望能夠盡可能把實現策略從機制當中剝離出來。一些比較底層和抽象的實現必須放在虛擬抽象層上,抽象層處在底層硬件和上層的Guest OS之間,各個虛擬化實例是彼此隔離的,所以數據傳遞必須通過抽象層來控制,例如在各個控制域(domain)之間調度CPU,掌控實際物理內存資源,或者在讀取數據塊的時候進行訪問控制等。

主控制域(Domain0)

Hypervisor只提供了最基本的控制操作,復雜的策略決策實現都放在一個特殊的主控制域上來實現。這個控制平台可以看作是在一個特殊的Guest OS上面運行管理軟件進行控制。這樣,Hypervisor只提供實現機制,而控制平台負責具體策略。主控制域是在系統啟動時第一個被加載的控制域,只有它有權限對物理系統資源進行操作,如塊設備、顯示和輸入輸出等,它具有對這些設備響應的原生驅動程序可以使用控制接口它還負責操控應用級的控制接口,這些控制接口具有創建和終止其它虛擬域的能力,還能控制創門相關的調度參數、物理存儲分配以及它們對給定的物理磁盤和網絡設備的訪問。

被控制域(DomainU)

除了主控制域外的其他的虛擬域都是由主控制域創建和管理的,它們有着更多的限制。在這些虛擬域中運行的Guest OS內核一般來說並不應該通過Hyper call來操作底層硬件資源,而是通過實現在其中的前端驅動來與主控制域中的后端驅動通信來完成對硬件資源的請求。但是VMM並沒有在機制上禁止Guest OS利用Hypercall,這只是一種出於安全的考慮。

設計方法概述
通信機制

有兩種機制用於Hypervisor和其上的各個虛擬域之間進行控制的交互:

  • 使用hypercall產生從domain到Hypervisor的同步調用。
  • 使用異步事件機制完成從Hypervisor到虛擬域的通告遞交。

hypercall接口允許虛擬域通過執行一個同步軟陷阱陷入到Hypervisor執行一個特權操作,這類似於在傳統的操作系統中對系統調用的使用。hypercall的機制是類似於Linux中的系統調用的,它使用的是int 82中斷,hypercall的調用號存在EAX寄存器中,然后根據調用號在hypercall_table中找到這個調用號對應的處理函數,調用這個函數。

從Hypervisor到虛擬域的通信是由一個異步事件機制提供的。這個機制取代了常用的利用設備中斷的遞交機制,它允許重要事件采用輕量級的通告形式。和傳統的Unix信號類似,這些重要事件的個數比較少,但每一個都用作針對某一特定類型事件的標記。未決的事件存放在每個虛擬域的bitmask(專門的數據結構,位圖掩碼)中。bitmask的更新要由Hypervisor在調用一個和Guest OS相應的事件回調處理程序(callback handler)之前完成(Hypervisor針對某類事件要向上發通告,如果Hypervisor調用了Guest OS相應的事件回調處理程序,就說明該事件完成了,下面要把控制交回給虛擬域,所以必然要在調用事件回調處理程序之前由Hypervisor將bitmask更新)。調用回調處理程序負責重新設置未決事件集合(調用仍舊是由Hypervisor操作,更新bitmask)同時以相應的行為和通告相呼應。一個虛擬域可以通過設置一個Hypervisor可讀的軟件標記來顯式地推遲對事件操作:這一點是與在真實的處理器中禁止中斷的過程類似的。

CPU虛擬化

虛擬化CPU對Guest OS提出了幾個要求。因為Hypervisor插在操作系統的下層違背了慣常的關於操作系統在整個系統中特權最高的假設。為了保護Hypervisor不會受到操作系統不正確行為的影響(即Domain不受另一個Domain的影響),Guest OS就必須被改造為能夠運行在較低的特權級上。做一些改動使操作系統改為運行在Ring1特權級上,這就防止了Guest OS會直接執行特權指令,也保證了操作系統與運行在Ring3上的應用程序之間相隔離的安全性。特權指令需要被Xen確認和執行以達到准虛擬化的目的,只有Xen有足夠高的特權級來執行這些指令,所以任何Guest OS試圖直接運行特權指令都會失敗。

對於異常的處理,每個vcpu都有自己的虛擬IDT表來記錄對每類異常進行描述的句柄,表中所列的異常都是在Xen中有記錄的,以用作確認。有兩類異常會經常發生而影響到系統的性能系統調用和頁面錯誤。因此,每個Guest OS都記錄一個“快速的”異常操作句柄來改進系統調用的性能。而缺頁異常需要從特權處理器寄存器(CR2)中讀出出錯的地址,所以頁面錯誤必須要經過Xen才能提交,Xen保存CR2的值供來自Ring1的訪問使用。中斷被輕量級的事件機制所取代,Xen來負責將硬件中斷以事件方式通告給相應的Guest OS。

Xen為每個Guest OS提供了周期計數時間,系統時間,虛擬時間和掛鍾時間(wall-clock time)四個概念。系統時間是以納秒為單位給出的,是從機器引導起來開始計算的時間。Domain的虛擬時間只是在它運行的時候才會被記入這主要供Guest OS的調度器使用來確保Guest OS上的應用進程能夠正確地共享時間片。掛鍾時間是真實的時間。周期計數時間是用來推斷或校正其他時間。Xen還提供了定時器,使得能夠處理超時事件,超時事件將會使用事件機制來遞交。

Xen當前對Domain的默認調度采用的是Credit調度算法。Xen為每個Domain分配了一個vcpu,這是調度的基本單元。同時Xen也提供了其他的算法,並且由於Xen對調度算法進行了封裝,使得實現新的算法十分方便。

內存虛擬化

虛擬化存儲管理是虛擬化一個體系結構中最困難的部分,它包括Hypervisor本身所需的機制和移植Guest OS所需的改動。x86架構並沒有由軟件管理的TLB,在發生TLB失效的時候,處理器會自動通過遍歷硬件頁表結構來處理。因此為了獲得可能達到的最好性能,當前地址空間內所有的有效頁轉換都要在硬件可訪問的頁表中給出。TLB是沒有標記的,所以地址空間的切換需要整個TLB的刷新。在這些限制下,Xen有這樣的設計:(1)由Guest OS負責分配和管理硬件頁表,這么做最小化了底層Hypervisor對頁表操作的影響,確保了安全性和隔離;(2)Hypervisor處於每個地址空間的最頂部的64MB空間內,因此避免了在進入和離開Hypervisor沖時進行TLB刷新操作。Xen把所有進程的頁表最高64M都映射到這一段空間,避免了在內核與VMM切換時重新加載CR3,因此減少了TLB刷新的次數。

每當Guest OS需要一個新的頁表,例如創建了一個新進程,它就在自己保留的內存空間內分配和初始化一個頁面,並且將其在Hypervisor中記錄。此時操作系統必須放棄對頁表存儲空間直接寫的權限所有后續的更新操作都必須由Hypervisor進行確認。為了避免頻繁地進入虛擬機,Xen使用了一個隊列將寫操作分批進行確認以減小開銷, Guest OS可以成批地進行更新操作以減少每次更新都要進入Hypervisor帶來的代價(因為每次更新都要Hypervisor確認)。客戶操作系統可以被分配一段不連續的內存空間。

在內存虛擬化中,對段機制所需做的工作相對較少,並且和頁機制以類似的方式。對段描述的寫也是要通過超級調用陷入Xen來完成的。對於x86架構上段描述符的限制只有:(1)它們的特權級別必須比Hypervisor要低;(2)它們不能夠對地址空間中Hypervisor的保留部分進行訪問。

在虛擬模式下,Xen引入了“偽物理地址”(pseude physical address)。的概念。Xen通過偽物理地址給了Guest OS一個假象。偽物理地址是一段以0開頭的連續空間,大小在啟動其所在域時被確定。每個偽物理地址實際實際上對應的是一個真實的機器地址,Xen為每個域維持了一張對Guest OS只讀的表將這個域的空間映射到真實的機器物理空間中,在更新頁表時利用這張表來將真實的機器地址填充到頁表中,從而實現了Guest OS對物理內存讀的直接操作。

設備虛擬化

設備I/O的虛擬化是整個VMM系統里面比較復雜的部分。從系統軟件的角度來看,I/O設備其實就是特定資源的集合,即I/O端口、內存映射I/O和中斷等。當操作系統按照硬件手冊規定的方式操作資源,如讀寫I/O端口,接收中斷,I/O設備就會按照規定完成的操作(讀寫磁盤,收發網絡包等)。對設備I/O的管理,在某一時刻只有一個虛擬域對某個物理設備具有特權,其他虛擬域則共享這個設備。設備驅動分為前端和后端兩部分,前端和后端在沒有權限的虛擬機和擁有實際物理設備的虛擬機之間通過事件通告進行通信。另一個附加的好處就是前端可以為整個物理設備提供一個單一的接口,這個設備接口和我們的虛擬設備接口不依賴於底層的物理驅動,而且只需要一個新的前端驅動就可以連接現有的后端。Domain0運行后端驅動,控制真正的硬件操作同時DomainU運行前端驅動,前端驅動主要提供塊設備和網絡設備的I/O接口,前端驅動可以有多個。Hypervisor通過提供事件通道、授權表和環緩沖區來幫助前端與后端進行通信,許多消息在后端和前端驅動之間傳送。

Xen給出了一套清楚、簡單的設備抽象,可以設計一個接口以有效地滿足對保護性和隔離性的需求。為了做到這一點,I/O和各個Domain之間的數據傳遞都是要經過Hypervisor的,可以使用的方法有事件通道、環緩沖區以及授權表等。這些方法能夠在Hypervisor有效地執行確認檢查的同時,為在系統中的豎直方向上傳遞緩沖區信息提供了一個高性能的通信機制。和硬件中斷類似,Xen支持一個輕量級的事件遞交機制用於為一個Domain傳送異步通告。這些通告是在對未決事件類型的位圖進行更新的時候產生的,也可以通過調用一個Guest OS專有的事件句柄產生。

只有Domian0能夠不經檢查地直接訪問物理(IDE和SCSI)磁盤。所有其它的虛擬域訪問永久性存儲介質的時候,都要通過虛擬塊設備(VBD)抽象。這個抽象是由運行在Domain0中的管理軟件來創建和配置的。由Domain0管理VBD使得Xen中的機制比較簡單,不避使用更復雜的解決方案。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM