kboot初探與模擬驗證
kboot本質上是個小型Linux作業系統,但功能卻是個boot loader,何解?kboot本身提供簡單的系統工具,支援檔案與網路操作,可自外界取得kernel image或其他檔案,進而kboot利用了kexec的機制,讓Linux kernel可快速重新啟動,於是具備boot loader的功能。
kexec是一組新的系統呼叫,包含在2.6 kernel中 (視支援架構而定),搭配其user-space的工具kexec-tools,則可在既有的Linux kernel (支援kexec系統呼叫) 中載入其他的kernel (不需要有kexec支援),並給予必要之參數或檔案,如kernel command line與initrd等,這方面的資訊可參考以下文章:
- 使用 kexec 快速重啟 Linux (DeveloperWorks)
- kexec (LWN)
kboot就是這樣的概念驗證實做品,使用的情境相當多元。舉例來說,kboot想進行遠端開機 (Diskless),但只有Wireless LAN或3G network可用,這時候就掛載對應的kernel module (包附在kboot中),然後透過user-space的應用程式進行設定,等待連線建立並確保檔案擷取成功,接著就在裝置上執行自遠端取得核心。另一種情境也很有趣,以往Linux distribution都得作通用性與最佳化的妥協,前者往往得將系統劃分諸多核心模組與大量的設定程式,後者往往得針對硬體作多次嘗試,那麼,透過kboot可先啟動generic kernel,然後進行硬體偵測,參考所需的硬體與最佳化組態,重新編譯核心,最後將該核心載入,而這個過程可透過一些設計得當的效能評估工具,一次又一次的重複自動微調,有別於以往的boot loader。關於kboot的應用,可參考以下簡報:
- kboot - A Boot Loader Based on Kexec (kboot作者提供的slides)
- 於Linux Conference AU的演講錄影
- HTTP-FUSE PS3 Linux : an internet boot framework with kboot (PS3 Linux hackers)
昨天做了一個小hack,將原本的kboot (Version 11) 進行調整,更動紀錄如下:
Enhancements:我們甚至不需要單獨的x86機器,就能測試kexec與kboot,只要有能夠運作Qemu的環境即可。首先,取得OrzLab修改的版本:kboot-11-orzlab.tar.bz2,解開後直接打 "make" 就會建構整個系統,包含下載必要的套件、工具,以及編譯與安裝等。搭載於kboot的Linux kernel是精簡的版本,只提供TCP/IP stack、procfs、initrd/initramfs、ne2k NIC driver、VESA VGA framebuffer console等,但足以讓我們作許多應用。
. Provided qemu specific configurations for verifying kboot
. Enable Visibility for gcc-3.4 (symbol hidden)
. Perform size optimizations against user-space packages.
Upgraded:
. kernel - 2.6.21
. binutils - 2.17.50.0.16
. uClibc - 0.9.29
Qemu提供DHCP與TFTP server的模擬,完全省下我們佈署的難度,所以在模擬環境中,所需的操作甚至大幅少於實體。筆者提供了簡單的script名為 "qemu-launcher.sh",直接執行即可,kboot啟動後的畫面如下:
依據Qemu的操作文件,預設透過模擬的DHCP server取得的IP是10.0.2.15,而server自己則是10.0.2.2,上面的畫面展示kboot已經載入一個小型的Linux kernel並出現提示訊息,等待命令操作,我們可打一些指令如下:
看到kernel version 2.6.21與ping連線的狀況,除此之外,還有ssh/sshd可用,所以大可連線到某台server,重新編譯核心程式碼,然後放到某個網路伺服器上。接著我們就要來驗證kexec/kboot的功能。Qemu內建的TFTP server相當好用,直接對應於host上的目錄架構,而就Debian/Ubuntu來說,host的核心會在根目錄建立symbolic link,而vmlinuz與initrd.img就指向目前運作的核心與initrd。
於是,我們在模擬的環境只要下簡單的一行指令即可載入並重新啟動: (鍵入粗體字部份)
kboot: tftp://10.0.2.2/vmlinuz然後我們會看到 "Start Kernel" 的字樣跳過,然後我們就在Qemu的模擬環境看到啟動目前host上的核心:
因為在之前提供的qemu啟動script中省略root file system的指派,所以會停在kernel panic的畫面,不過這也達到我們的目的,驗證kexec/kboot,有了這個便利的模擬測試環境,未來也可作不同的變化。
沒有留言:
張貼留言