Boot Gear: 5 秒鐘快速開機
在所有最佳化途徑當中, 快速開機總是最具吸引力的一項.
大約四個月以前, 我開始著手進行 Boot Gear 計畫, 目標之一就是使 Ubuntu Linux 盡可能的快速開機, 並且依然保有完整功能的圖形介面.
最近的結果: 5 秒鐘
Boot Gear 組成元件
Boot Gear 包括這幾層架構:
- 精簡的初始磁盤
- 快速的 init 程序
- 圖形介面的啟動
- bootchart 紀錄 (非必要)
精簡的初始磁盤
初始磁盤 (initial ramdisk) 的工作越少越好, 最近的嘗試是將開機必要功能編入核心當中, 如此一來 initrd 就可以完全拿掉了.
核心要能初始化我的硬碟需載入這些模組:
sd_mod (CONFIG_BLK_DEV_SD)另外還要加入 ext3 檔案系統 (CONFIG_EXT3_FS) 等的支援. 以 make bzImage 指令編譯完成後, 將 arch/x86/boot/bzImage 這個檔案複製到 /vmlinuz-fast, 這就是能夠快速開機的核心.
scsi_mod (CONFIG_SCSI)
libata (CONFIG_ATA)
sata_nv (CONFIG_SATA_NV)
快速的 init 程序
原先這個角色是由 InitNG 來擔任, 因 finit 發展漸趨成熟, 所以改由這套 fastinit 的同質專案來取代.
首先取出原始碼:
# git clone http://helllabs.org/git/eeepc.git修改編譯完成後, 將 finit-mdv 複製到 /sbin/finit-mdv, 就有了最極簡的開機程序.
圖形介面的啟動
要啟動 Xorg 需要 dbus, udev 和 hal 等常駐程式.
因此新增 /usr/sbin/services.sh 如下:
#!/bin/shfinit 會在執行 startx 之後一併執行以上的程式.
/etc/init.d/dbus start 2&>1 > /var/log/service.log
/etc/init.d/udev start 2&>1 >> /var/log/service.log &
/etc/init.d/hal start 2&>1 >> /var/log/service.log &
bootchart 紀錄
紀錄開機時間這種需求中, 最稱手的工具非 bootchart 莫屬.
下載程式 bootchart-0.9.tar.bz2 後解開執行 ./install.sh 安裝.
修改 /sbin/bootchartd 將 init 變數改為我們的開機程序:
init="/sbin/finit-mdv"並在 /usr/sbin/services.sh 當中新增一行:
/sbin/bootchartd stop最後在 bootloader 中建立開機選項 (以我的 GRUB 為例):
title PUD Fast booting (bootchartd)
root (hd0,6)
kernel /vmlinuz-fast root=/dev/sda7 ro init=/sbin/bootchartd
需注意其中 root 參數無法再使用 UUID 的格式.
結果
所有工作完成後, 就有了能夠快速開機的系統. :-)
讓我們把停止紀錄的時間往後拉長, 看看 Boot Gear 執行的細節:
可以發現 X 在第三秒就已經啟動, 之後 services.sh 才開始執行.
接下來還能繼續進行最佳化的地方大概有:
- BIOS 設定的調校
- startx 程序的精簡
Boot Gear 專案的修改成果沒問題的話會以 GPL 釋出, 所有相關的文件都是 CC: BY-NC-SA 授權.
敬請指教, 謝謝!
8 則留言:
感謝您提供這樣的資訊,期待進一步的成果。
^_^
非常需要!
但是,小弟我資質愚鈍,您所說的這些,整個的步驟是要如何下指令呢?
還是……
請指導!
勝仔
hinet.johnlin@msa.hinet.net
真期待。請問要如何開始?
那root的分辨還能用LABEL嗎?(剛那篇打錯刪了XD)
首先,謝謝您提供的方法。
我按您的方法試驗過,可以啟動ubuntu,
但我遇到一個重要問題,啟動後只有console, 沒有圖形桌面,如果將finit-alt.c中的”xinit” 改為 “startx”, 則啟動後會有圖形桌面,但會顯示 “failed to initialize HAL”.
不知道您有沒有遇到此問題,有無解決方法?
Hi請問文章中的圖是怎麼做出來的?
我也想要詳細的步驟thanks!!!
no.1dany@yahoo.com.tw
張貼留言