天天看點

一個統一的parallel bootloader efi設想:免PE,同時引導多個系統

本文關鍵字:Multi loader vs parallel booter

一直以來,我們都是使用各種bootloader來處理與不同OS的安裝和啟動任務的,如簡單的單OS單loader(比如ntldr這種),多OS的multi loader(比如grub這種),這些loader往往與OS和磁盤模式(mbr?gpt?fat32?ext4?)相對。

剛開始的bootloader作為BIOS到OS的bootstraper,而且僅負責磁盤部分。它們工作在實模式,在《在阿裡雲上安裝黑蘋果(2):虛拟機方案研究和可行性參考》中我們談到,由于BIOS是16位的,與目前32/64的硬體管理程式不搭,是以出現了新的固件規範EFI。後來在新的EFI規範中,EFI自帶磁盤BOOT,還負責其它功能比如還帶驅動作為OS為硬體認證。管理CMOS,etc…..

PS:其實EFI指的是固件本身,這些東西是硬體的,它們不可更改,而clover這些東西不是EFI,是EFI的軟體部分。EFI整個删掉并不會影響主機闆是不是EFI屬性,不會删掉内置在各硬體中的firmware。這些軟體部分的EFI可以驅動硬體(它們另有意義,如做硬體檢測),但并不是OS驅動層的驅動意義(實際驅動硬體),實際上EFI中的驅動運作在DEX中不運作在CPU中,而且EFI中的驅動跟OS中的驅動沒有承接關系,EFI規範隻是被設計用來啟動和引導期的特殊任務,并不影響OS的地位。。

無論如何,作為複雜的預處理系統。此時的loader是一個關于EFI的全部生态。完成更多的任務。實際上複雜的EFI也帶工具(efi shell,gui,etc..)。甚至可以浏覽網頁……俨然是一個小PE了。

而我們談到的PE其實更偏向指群晖webassist,winpe,蘋果 recovery這些。其實它們跟正常OS一樣,也包括完整由核心組成的系統,也是由上述各種loader啟動的。

parallel boot設想:同時引導多個系統

那麼既然有更複雜的EFI,而且存在可能将其發展得越來越多進階,那麼可以在loader中直接發展Preinstall PE,或當recovery(post install環境)嗎,不搭配核心和工具不組建一個OS,不走普通PE的路子,單loader本身可以複雜到如此嗎?—— 甚至,能在其中內建虛拟機管理系統嗎,這樣我們就可以parallel boot同時啟動多個OS了。那麼,還有沒有虛拟機和實體通用的這種loader呢。

這些設想從何而來呢,我們知道,一台OS是獨占整個機器的。在機器完成引導化之後。這個OS就獨占了機器的全部資源,安裝在硬碟上的多系統引導實際上隻是multi bootloader,而并非parallel bootloader,如果EFI可以從一套機器硬體組合中按配額來劃分它們組成2個/或多個子機器表示。那麼,這樣的parallel bootloader将不難于實作。因為我們可以在每一個子機器表示下安裝不同的OS,實作多個系統的同時啟動。

而這些做帶來的意義是很巨大的,我們知道,虛拟化從來都內建在系統引導之後,exsi等裸金屬虛拟化方案,是在HOST系統裡搭虛拟機管理軟體hypervisor。它是涉及到OS的。一些工具級的虛拟化軟體如virtualbox其實也本質上是這麼回事。在實機上,我們從來都是單個時刻隻運作一個OS。再在這個OS裡各種分裂化。不能以硬體本身作虛拟化,去掉HOST。

最基本的意義。上述方案的成功,可以使得在一個PC上安裝多個OS,按正常/而非虛拟化的方式,就能同時使它們運作變得可能。—— 而且不需要涉及到內建一個與OS同質化的PE或RECOVERY。使之變成通用計算機的标配EFI。

市面上有幾種特殊的接近這種多樣化用途的loader

在xhyve中有user space的grub2,在vmlite中有能在實機引導vhd的loader,在《在阿裡雲上安裝黑蘋果(2):虛拟機方案研究和可行性參考》中我們談到模拟層的OVMF。CLOVER本身也是模拟層的。

這些都可以成為parallel booter inside efi的實作參考。

(此處不設回複,掃碼到微信參與留言,或直接點選到原文)

一個統一的parallel bootloader efi設想:免PE,同時引導多個系統