本頁使用了標題或全文手工轉換

initrd

維基百科,自由的百科全書
跳至導覽 跳至搜尋

Initrd ramdisk或者initrd是指一個臨時檔案系統,它在啟動階段被Linux核心呼叫。initrd主要用於當「根」檔案系統被掛載之前,進行準備工作。[1]

基本原理[編輯]

同其他Unix系統一樣,Linux作業系統首先要將核心載入到記憶體。核心駐留於作業系統與應用程式的整個活動周期,其中應用程式(軟體)在「使用者空間」內執行,位於核心控制之下。

為了使載入記憶體最小化,一些核心Linux程式轉化成可載入核心模組形式,可以動態載入系統中。

initrd系統中的檔案在啟動階段可以被核心存取,裡面的內容會被掛載成一個loop型態的檔案。initrd通常被壓縮成gzip類型,在啟動的時候由bootloaderLILOGRUB)來告知核心initrd的位置。在2.6版本核心之後出現了initramfs,它的功能類似initrd,但是它基於CPIO格式,無須掛載就可以展開成一個檔案系統。

initramfs 與 initrd[編輯]

initramfs是initrd的替代品。initrd是一個被載入的塊裝置,內部有ext2一類檔案系統的存在,於是由於Linux核心的快取機制,其中的內容還會被快取到記憶體上,造成一定的記憶體空間浪費。而initramfs本身就是一個tmpfsRAM disk,擁有最小化的設計,繞過了快取機制,也消除了多餘的記憶體占用。[2]

initramfs的生成方式也遠比initrd簡單。對於initramfs,只需 geninitramfs() { cd "$1"; find . -depth| cpio -o -H newc | ${3-cat}> "$2"; } 就可以利用cpio生成這樣一個檔案,同時使用一些程式進行壓縮(通過額外的管道實現,其中使用cat僅用於無壓縮時轉發輸出,可省去)。對於initrd,則涉及生成一定大小的空檔案,然後建立檔案系統,掛載並添加檔案等等諸多步驟。

實現[編輯]

Linux核心 與 initrd/initramfs 必須儲存在 bootloader 可以存取的位置,通常是在:

  • root 檔案系統內
  • 一個小的ext4FAT檔案系統的分割區(通常掛載到 /boot)
  • TFTP server內

bootloader 會將核心與 initrd 載入到記憶體中並將 initrd 的位址傳給核心。initrd會被掛載當成 initial root file system。

現在的 Linux 發行版會建立客製化只包含必要元件的 initrd 映像檔,例如只包含 IDESCSISATASAS 以及檔案系統核心模組。

參考[編輯]

  1. ^ Almesberger, Werner, Booting linux: the history and the future, Proceedings of the Ottawa Linux Symposium, 2000 [2012-12-26], (原始內容存檔於2008-07-24) 
  2. ^ The difference between initrd and initramfs?. Stack Overflow. [2014-04-24]. (原始內容存檔於2021-01-26). 

更多連結[編輯]