天天看點

initrd.img相關

initrd 的英文含義是 boot loader initialized RAM disk,就是由 boot loader 初始化的記憶體盤。在 linux核心啟動前, bootloader 會将存儲媒體中的 initrd 檔案加載到記憶體,核心啟動時會在通路真正的根檔案系統前先通路該記憶體中的 initrd 檔案系統。第一階段啟動的目的是為第二階段的啟動掃清一切障愛,最主要的是加載根檔案系統存儲媒體的驅動子產品。我們知道根檔案系統可以存儲在包括IDE、SCSI、USB在内的多種媒體上,如果将這些裝置的驅動都編譯進核心,可以想象核心會多麼龐大、臃腫。

  

  initrd.img是Linux啟動過程中很重要的一個檔案,(如果你編譯核心時将一部分功能編譯為可加載子產品。如果系統的一些裝置的驅動編譯為可加載模,那麼啟動時如果沒有指定INITRD=/path_to_initrd.img,那麼系統啟動或者會失敗,或者啟動後會有裝置無法使用(像網卡或者其它裝置)。如果沒指定initrd.img或者指定的initrd.img中并沒有包含正确的驅動子產品,則系統啟動時會挂起,并報告"kernel panic: VFS: Unable to mount root fs on 08:06"的錯誤。)

  

    它把kernel的啟動分成兩個階段:在kernel中保留最少最基本的啟動代碼,然後把對各種各樣硬體裝置的支援以子產品的方式放在initrd中,這樣就在啟動過程中可以從initrd所mount的根檔案系統中裝載需要的子產品。這樣的一個好處就是在保持kernel不變的情況下,通過修改initrd中的内容就可以靈活的支援不同的硬體。在啟動完成的最後階段,根檔案系統可以重新mount到其他裝置上。

   initrd.img不像通常的以.img為擴充名的ramdisk cramfs檔案。它是經過用gzip -9進行壓縮過的ramdisk檔案。是以,需要先解壓縮然後在mount,否則會出錯。以下是操作過程。 

  首先将initrd.img拷貝到操作目錄下:

  cp initrd.img /work/initrd.gz

  然後解壓縮:

  gunzip initrd.gz

  解壓後可以看到一個沒有gz字尾的檔案initrd

  直接mount該檔案:

  mount -o loop initrd /mnt 

  mount成功後,/mnt目錄中将能看到initrd.img中的所有檔案及目錄

  在work下建一個目錄initrd

  将mnt下的檔案都拷貝到initrd下

  cp /mnt

 cd /lib/modules/kernel_version

  mkinitrd /tmp/initrd-kernel_version.img kernel_version

  cp /tmp/initrd-kernel_version.img /boot

  

  這是一個grub.conf的内容,可以修改一下!

    default=1 

    timeout=10 

    splashimage=(hd0,6)/grub/splash.xpm.gz 

    title Psyche (2.4.18-14 standard)//在啟動菜單裡顯示的名字 

    root (hd0,6) //在E盤

    kernel /vmlinuz-2.4.18-14.standard ro root=/dev/hda8  

    initrd /initrd-2.4.18-14.standard.img //改成initrd-kernel_version.img

    title Windows xp 

    rootnoverify (hd0,0) 

    chainloader +1  

-----------------------------------------------------------------------------------------------------------------------------------------

我想做一個U盤啟動的linux,照處面的步驟進行:

建立initrd.img檔案

# mkdir -p /mnt/initrd 

# cd /tmp 

# mkinitrd /tmp/initrd.gz 2.6.18 

2.解壓initrd.img檔案,修改啟動腳本linuxrc 

# gunzip initrd.gz 

# mount -o loop /tmp/initrd /mnt/initrd

到這步就出現:mount: you must specify the filesystem type

怎樣指定檔案系統都無法mount上去,

我也試過生成2.6.18.img檔案,

再mv 2.6.18.img 2.6.18.gz

然後再用gunzip解壓,也是不行。

到底要怎樣才行呢?

你的檔案是cpio檔案 不是影像檔案

你可以用 file initrd看下 檔案類型就可以了

從 Fedora Core 3 開始,預設的 initrd 映像變成了一個經過壓縮的 cpio 歸檔檔案。我們不用再使用 loop 裝置來将 initrd 作為壓縮映像進行挂載,而是可以将其作為 cpio 歸檔檔案來使用

------------------------------------------

cpio –idcmv < 檔案名解壓

制作cpio格式initrd

非常簡單:

1. find . | cpio -c -o > initrd.img

2. gzip initrd.img

3. mv initrd.img.gz initrd.img

要注意,cpio 的-c選項别忘了,否則initrd不能正确挂載。

繼續閱讀