KVM、QEMU與libvirt區別
一 .KVM 簡介
KVM (名稱來自英語: Kernel-basedVirtual Machine 的縮寫,即基於核心的虛擬機器) , 是一種用於Linux核心中的虛擬化基礎環境設施,是linux核心中的一個功能模組,預設被安裝。可以將Linux核心轉化為一個hypervisor。KVM在2007年2月被匯入Linux 2.6.20核心中,以可載入核心模組的方式被移植到FreeBSD及illumos上。
KVM在具備Intel VT或AMD-V功能的x86平臺上執行。它也被移植到S/390,PowerPC與IA-64平臺上。在Linux核心3.9版中,加入ARM架構的支援。對於是否支援也可以透過命令列檢視:egrep '(vmx|svm)' --color=always /proc/cpuinfo。如果有任何內容則說明當期硬體架構是支援kvm的,否則就不支援。另外,就算支援,但是在bios中是預設設定不開啟該功能的,所以你還要去bios設定其為enable。
二 . Q EMU
全稱 Quick Emulator 。 其實它也是一款虛擬化技術,就算不使用kvm,單版的qemu也可以完全實現一個虛擬機器。那為何還會有qemu-kvm這個名詞那。是因為雖然kvm的技術已經相當成熟而且可以對很多東西進行隔離,但是在某些方面還是無法虛擬出真實的機器。比如對網路卡的虛擬,那這個時候就需要另外的技術來做補充,而qemu-kvm則是這樣一種技術。它補充了kvm技術的不足,而且在效能上對kvm進行了最佳化。
KVM和QEMU的關係
QEMU是個獨立的虛擬化解決方案,從這個角度它並不依賴KVM。而KVM是另一套虛擬化解決方案,不過因為這個方案實際上只實現了核心中對處理器(Intel VT) , AMD SVM)虛擬化特性的支援,換言之,它缺乏裝置虛擬化以及相應的使用者空間管理虛擬機器的工具,所以它借用了QEMU的程式碼並加以精簡,連同KVM一起構成了 另一個獨立的虛擬化解決方案:KVM+QEMU
KVM 是 linux 核心包含的東西,使用 qemu 作為上層管理(命令列)。qemu 是獨立虛擬軟體,能獨立執行虛擬機器(根本不需要 kvm )。 kqemu 是該軟體的加速軟體。 kvm 並不需要 qemu 進行虛擬處理,只是需要它的上層管理介面進行虛擬機器控制。虛擬機器依舊是由 kvm 驅動。
三 .libvirt
libvirt又是個什麼東東。它是一系列提供出來的庫函式,用以其他技術呼叫,來管理機器上的虛擬機器。包括各種虛擬機器技術,kvm、xen與lxc等,都可以呼叫libvirt提供的api對虛擬機器進行管理。有這麼多的虛擬機器技術,它為何能提供這麼多的管理功能那。是因為它的設計理念,它是面向驅動的架構設計。對任何一種虛擬機器技術都開發設計相對於該技術的驅動。這樣不同虛擬機器技術就可以使用不同驅動,而且相互直接不會影響,方便擴充套件。而且libvirt提供了多種語言的程式設計介面,可以直接透過程式設計,呼叫libvirt提供的對外介面實現對虛擬機器的操作。
一般虛擬機器虛擬網路的設定主要包括三種方式。主要如下:
1.NAT模式
也有人稱此種模式為host模式。在這種模式下虛擬機器可以理解成沒有自己的獨立網路卡。所有訪問虛擬機器的請求其實是直接傳送給宿主機,然後透過訪問宿主機轉發到虛擬機器上的。相應的虛擬機器訪問其他網路,也是先轉發到宿主機然後在轉發出去。對於宿主機之外的網路,是不知道該虛擬機器存在的。
如果主機的網路卡崩潰,那麼虛擬機器是不能對外通訊的。
2.Bridge模式
橋接模式就是將主機網路卡與虛擬機器虛擬的網路卡利用虛擬網橋進行通訊。在橋接的作用下,類似於把物理主機虛擬為一個交換機,所有橋接設定的虛擬機器連線到這個交換機的一個介面上,物理主機也同樣插在這個交換機當中,所以所有橋接下的網路卡與網路卡都是交換模式的,相互可以訪問而不干擾。在橋接模式下,虛擬機器ip地址需要與主機在同一個網段,如果需要聯網,則閘道器與DNS需要與主機網路卡一致。
單網路卡的情況下, 如果主機的網路卡崩潰,那麼虛擬機器是不能對外通訊的。生產中可以使用bond來預防。
3.Internal模式
這個是把虛擬機器之間的網路和主機的網路隔離開來。虛擬機器是一片網路,主機也是一片網路,彼此之間不能相互 訪問 。
基於上文,虛擬機器實現建立和管理有如下兩種方式:
1.KVM虛擬化技術 - 使用Qemu-kvm建立和管理虛擬機器
2.KVM虛擬化技術 - 使用 virt-install和virsh及virt-manager
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27785870/viewspace-2215391/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- KVM&Libvirt基本概念及開發雜談
- 虛擬化技術之kvm虛擬機器建立工具qemu-kvm虛擬機
- 【原創】Linux虛擬化KVM-Qemu分析(三)之KVM原始碼(1)Linux原始碼
- 【原創】Linux虛擬化KVM-Qemu分析(一)Linux
- qemu-kvm安裝and配置橋接和SR-IOV橋接
- 【原創】Linux虛擬化KVM-Qemu分析(十一)之virtqueueLinux
- 【原創】Linux虛擬化KVM-Qemu分析(八)之virtio初探Linux
- 虛擬化技術之kvm磁碟管理工具qemu-img
- QEMU-KVM中的多執行緒壓縮遷移技術執行緒
- 【原創】Linux虛擬化KVM-Qemu分析(九)之virtio裝置Linux
- 【原創】Linux虛擬化KVM-Qemu分析(十)之virtio驅動Linux
- 【原創】Linux虛擬化KVM-Qemu分析(六)之中斷虛擬化Linux
- 【原創】Linux虛擬化KVM-Qemu分析(七)之timer虛擬化Linux
- 【原創】Linux虛擬化KVM-Qemu分析(四)之CPU虛擬化(2)Linux
- 【原創】Linux虛擬化KVM-Qemu分析(二)之ARMv8虛擬化Linux
- 【原創】Linux虛擬化KVM-Qemu分析(五)之記憶體虛擬化Linux記憶體
- ??與?:的區別
- qemu
- mouseenter與mouseover區別
- currentTarget與target區別
- mouseout與mouseleave區別
- classList與className區別
- innerText與textContent區別
- GET與POST區別
- let與const區別
- NIO與IO區別
- 區別mouseover與mouseenter?
- ApplicationContext 與 BeanFactory 區別APPContextBean
- setInterval()與setTimeout()區別
- match()與exec()區別
- localStorage與sessionStorage 區別Session
- showModal()與show() 區別
- <section>與<article> 區別
- onmouseover與onmouseenter區別
- offset與style區別
- cellpadding與cellspacing 區別padding
- animation與transition 區別
- encodeURI與encodeURIComponent區別