初探虛擬機和虛擬化

這幾天小弟我開始接觸虛擬機了,但是許多產品讓人搞得有點頭昏腦脹
因此小弟開始爬文好好的釐清這些有關虛擬化的事情。

小弟目前看到大約有 Xen, KVM, VMware, Virtual Box, Hyper-V 這些產品,因此接下來的介紹會將這些產品慢慢的分類

原來虛擬化中有個東西叫做 Hypervisor 這個實在不知道怎麼翻譯的東西,這東西其實就像是 VM 的控制台,虛擬的作業系統裝在 hypervisor 上面,由 hypervisor 去控制硬體。而當中又依照 hypervisor 的安裝位置分成兩類。

  • type I : 又稱為 bare-metal hypervisor ,看這個詞大致上就是跟裸機裝虛擬機有點關係,直接裝一層 hypervisor 在空機上面,然後 VM 的系統在安裝在 hypervisor ,這樣的虛擬系統離硬體控制比較接近,VM 要控制的硬體資源直接透過 hypervisor 去操作。

  • type II : 又稱為 hosted hypervisor ,跟 type I 相反,就是我必須裝作業系統之後,再去安裝 hypervisor ,通常都附在虛擬機軟體了,這種 hypervisor 的控制硬體方式是透過原本的作業系統代為處理。

目前屬於 type I 的有 xen, kvm, VMware ESX/ESXi (後者為免費版本), Hyper-V
而屬於 type II 的則是有 Oracle Virtual Box, Microsoft Virtual PC, VMware Workstation/Fusion/Player

而一般使用者好比我,其實只有草草用過 Virtual Box 跟 VMware Player 來快速安裝第二個作業系統,而這種 type II 在國外的教學文章中會用兩個名詞來代表主機的作業系統和虛擬機內的作業系統

  • Host OS: 看 Host 這個字就知道是有人要寄宿在他身上,所以就是指你原本主機上裝的那個系統囉
  • Guest OS: 跟 Host 相反,就是指虛擬機中的那個作業系統囉。因此在 Virtual Box 有提供一個 Guest Addition 就是給你虛擬機裝的外掛,讓你虛擬機中可以模擬出一些驅動程式這樣。

再來細講一點 type I 的虛擬化,因為在 Linux 下使用 KVM 還是有點讓人霧煞煞,既然前面說 type I 是直接在裸機上裝一層 VM ,但是為啥麼 KVM 跟 Xen 都會先讓人裝個 OS 再去下載他們執行咧?

原來 type I 中又再分兩種 (怎麼每件事情都分兩種咧?)

  • monolithic hypervisor
  • microkernel hypervisor

其實這兩個字是從作業系統的分類法而來,其中 monolithic 指的就是包山包海,所有的驅動跟要用到的資源一開始就載入作業系統裡,而 microkernel 則是只載入核心的系統,其他資源等需要的時候在載入就好了

而這裡虛擬化的 monolithic hypervisor 則是指這套虛擬機的軟體已經包山包海把驅動這類的東西都已經塞進去了,其實換句話,也就是他們幾乎等於寫了自己的開機核心,而 VMware ESX/ESXi 就屬於這一類。

microkernel hypervisor 的虛擬化,就是因為他們專心寫虛擬化的部份,而載入驅動跟開機的部份則是靠作業系統核心提供,例如 KVM 和 Xen 是靠 Linux ,而 Hyper-V 是靠 windows 的系統核心

(附帶一提, windows 跟 Linux 並不是 Micro Kernel 類型的作業系統,而是他們虛擬化的方式跟作業系統的 Micro Kernel 類似才會被這樣分類取名)

因此 Hyper-V 在宣傳的時候將自己的核心宣傳的非常小,但實際上是透過 windows kernel 去載入其他的資源。


還有個名詞叫 半虛擬化/全虛擬化 這兩者的關係其實也並不是透過上面幾點去區分的

而我拿 Linux 來講好了,半虛擬化比較偏向透過 Linux 的核心去 run VM ,因此裝的其他 Linux 如果是同一個 Linux 核心跑起來就很棒,跑起來會蠻快的,畢竟原本就是 Linux 在下面了

但是如果要從頭到腳都要虛擬化一個硬體出來,像是要同時裝 Linux 及 windows 根本無法透過 Linux 核心去跑,所以就要透過全虛擬化了。

這次的初探大致上就到這裡了。