initramfs機制


 1.什么是 Initramfs

    在2.6版本的linux內核中,都包含一個壓縮過的cpio格式的打包文件。當內核啟動時,會從這個打包文件中導出文件到內核的rootfs文件系統,然后內核檢查rootfs中是否包含有init文件,如果有則執行它,作為PID為1的第一個進程。這個init進程負責啟動系統后續的工作,包括定位、掛載“真正的”根文件系統設備(如果有的話)。然后執行 /sbin/init程序完成系統的后續初始化工作。

 2.Linux2.6 內核對 Initramfs 的處理流程

     (1. boot loader 把內核以及 Initramfs 文件加載到內存的特定位置。
     (2. 內核判斷Initramfs的文件格式,如果是cpio格式。
     (3. 將Initramfs的內容釋放到rootfs中。
     (4. 執行Initramfs中的sbin/init文件,執行到這一點,內核的工作全部結束,完全交給init文件處理。

 3.  cpio格式的Initramfs制作方法

    假設當前目錄位於准備好的Initramfs文件系統的根目錄下
         find . | cpio -o -Hnewc | gzip -9 > ../initrd.img.gz 

     解壓:
        假設當前目錄就是要解壓后的目錄   gunzip | cpio -idmv < ../initrd.img 

 4.  掛載rootfs文件系統

        rootfs是基於內存的文件系統,所有的操作都是在內存中完成,沒有實際的存儲設備,不需要設備驅動程序的參與。linux系統啟動階段使用rootfs文件系統,當磁盤驅動程序與磁盤文件系統成功加載后,linux系統會將系統根目錄從rootfs切換到磁盤文件系統。

        所有的2.6版本linux內核都有一個特殊的文件系統rootfs,是內核啟動的初始根文件系統,initramfs的文件會復制到rootfs。如果把initramfs比作種子,那么rootfs就是它生長的土壤。大部分linux系統正常運行后都會安裝另外的文件系統,然后忽略rootfs。
        rootfs是ramfs文件系統的一個特殊實例。ramfs是一種非常簡單的文件系統,是基於內存的文件系統。ramfs文件系統沒有容量大小的限制,它可以根據需要動態增加容量。
   ramfs直接利用了內核的磁盤高速緩存機制。所有的文件的讀寫數據都會在內存中做高速緩存(cache),當系統再次使用文件數據時,可以直接從內存中讀寫,以提供系統的I/O性能。高速緩存中的寫入數據會在適當的時候回寫到對應的文件系統設備(如磁盤等)中,這時它的狀態就標識為clean,這樣系統在必要時可以釋放掉這些內存。ramfs沒有對應文件系統設備,所以它的數據永遠都不會回寫回去,也就不會標識為clean,因此系統也永遠不會釋放 ramfs所占用的內存。
        因為ramfs直接使用了內核已有的磁盤高速緩存機制,所以它的實現代碼非常小。也由於這個原因,它可能不停的動態增長直到耗盡系統的全部內存。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM