Linux 開機時間較長是常見痛點。本文介紹如何在不犧牲功能前提下,透過分析服務依賴關係、實現平行啟動,大幅縮短開機時間。
以 Red Hat 為例,常見 runlevel:
核心載入後執行 /sbin/init,讀取 /etc/inittab 決定預設 runlevel,再呼叫 /etc/rc.d/rc 處理對應 rc 目錄下的符號連結。
rc*.d/ 目錄包含兩類連結:
K##name:關閉服務(傳遞 stop 參數),數字越小越早執行S##name:啟動服務(傳遞 start 參數),數字越小越早執行所有連結實際指向 /etc/init.d/ 下的服務腳本。chkconfig 工具可簡化連結管理(chkconfig --list 查看各 runlevel 服務狀態)。
傳統循序啟動浪費時間。實際上許多服務無相依關係,可同時啟動。範例:
ntpd : network
netfs : network
autofs: network
表示 network 啟動完成後,ntpd、netfs、autofs 可並行啟動。若各需 10 秒,循序需 40 秒,並行僅需 20 秒。
亦需根據實際用途調整:家用列印機不需等網路、crond 若無遠端任務可提前啟動。
make 原為編譯工具,擅長處理依賴圖與平行執行。只需撰寫 Makefile 描述服務依賴,執行 make -j 即可自動平行啟動獨立服務,按依賴順序串聯其餘服務,完美解決開機加速問題。