什麼是 initial ram disk (縮寫 initrd)
它是由 bootloader 初始化的記憶體盤。在 linux 啟動之前,bootloader 會将它(通常是 initrd.img-xxx...xxx 檔案)加載到記憶體中。核心啟動的時候會将這個檔案解開,并作為根檔案系統使用。
設計 initrd 的主要目的是讓系統的啟動分為兩個階段。首先,帶有最少但是必要的驅動的核心啟動。然後,其它需要的子產品将從 initrd 中根據實際需要加載。這樣就可以不必将所有的驅動都編譯進核心,而根據實際情況有選擇地加載。對于啟動較慢的裝置如 usb 裝置等,如果将驅動編譯進核心,當核心通路其上的檔案系統時,通常裝置還沒有準備好,就會造成通路失敗。是以,通常在 initrd 中加載 usb 驅動,然後休眠幾秒鐘,帶裝置初始化完成後,再挂載其中的檔案系統。
initrd 的具體形式
目前有兩種形式:cpio-initrd 和 image-initrd。
image-initrd 的制作相對麻煩,處理流程相對複雜(核心空間->使用者空間->核心空間 與初始化越來越多的在使用者空間進行的趨勢不符),本文不對其進行介紹。
cpio-initrd 的處理流程(核心空間->使用者空間):
1. boot loader 把核心以及 initrd 檔案加載到記憶體的特定位置。
2. 核心判斷 initrd 的檔案格式,如果是 cpio 格式。
3. 将 initrd 的内容釋放到 rootfs 中。
4. 執行 initrd 中的 /init 檔案,執行到這一點,核心的工作全部結束,完全交給 /init 檔案處理。