Initrd ramdisk或者initrd是指在啟動階段被Linux核心呼叫的臨時檔案系統,用於根目錄掛載之前的準備工作。[1]

基本原理

同其他Unix系統,Linux首先要將核心載入到主記憶體。initrd通常被壓縮成gzip類型,開機時由bootloader(如LILOGRUB)來告知核心initrd的位置,使其被核心存取,掛載成一個loop型態的檔案。在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 以及檔案系統核心模組。

參考

更多連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.