initrd镜像文件的作用与制作
生活随笔
收集整理的這篇文章主要介紹了
initrd镜像文件的作用与制作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉 http://joecen.yourblog.org/logs/188655.html
????????? 我 們在安裝新內核的時候,通常都會編輯lilo.conf 和grub.conf 文件。
?????
?????? 里面有一段“initrd=/boot/initrd-***.img”(其中的***表示內核的版本號)的我們都很少會注意到,有時候還會發現這 一行不要也可以正常開機。那這個initrd***.img究竟是用來干什么的呢?
???????? 其實initrd***.img是一個鏡像文件,類似ramdisk,把一段程序打包到img里,然后在開機的時候在內存里開辟一段區域,一般是2m,釋 放到那里運行,都是一些初始化的程序,比如sisc_mod、ext3、sd_mod等模塊和insmod、nash等命令。不同內核,初始化的img可 以相同,也可以不同,如果沒有,可以在grub.conf里加上no initrd,它就跳過initrd的檢測和執行了,以前好像就沒有,后來才有的。 它的作用是在沒有mount /分區以前,系統要執行一些操作,比如掛載scsi驅動,它就把initrd釋放到內存里,作一個虛擬的/,然后執行其根目錄下的一個腳 本"linuxrc",運行insmod和nash命令掛裝模塊。
?????????? 為什么有的時候我們在lilo或grub的配置文件中不加入該行都可以正常開機呢?這是 因為我們一般的PC機都沒有使用scsi硬盤等需要先加載其驅動的設備,所以就算沒有initrd***.img也可以正常開機。但是如果我們要在服務器 上為其編譯新內核那就一定不要忘記也為其新建一個initrd文件呀!
??????????? 好,下面來看看如何查看initrd***.img里面的內容和如何為你的新內核創建一個新的initrd.img文件。
??????????? 查看initrd.img: initrd***.img雖然后綴是“img”,但其實它是一個gz格式的文件,我們可以先把它解壓,然后載掛裝到目錄下:
??????????? 1、cp initrd.img initrd.gz
??????????? 2、gunzip initrd.gz
? ? ? ? ? ? 3、mount -o loop initrd /mnt/floppy 進入/mnt/floppy目錄,
?????????? 我們就可以看到initrd***.img文件的廬山真面目了。
??
? ? ? ? ? ? 制作initrd文件 當我們編譯了一個新的內核,也不要忘了為我們的scsi設備做一個新的initrd鏡像:
???????? 語法: mkinitrd 文件名 內核的目錄名
????????? 示例: mkinitrd initrd-2.4.19.img 2.4.19 initrd-2.4.19.img
??????? 文件名是自己任意取的,但最好對應自己的內核版本號。
? ? ? ? 2.4.19是在/lib/modules中的目錄名,對應內核的版本。 當然,我們也可以在掛裝了initrd***.img文件后直接添加模塊到/lib目錄中,然后修改linuxrc腳本讓其開機進行掛裝。但必須具備一定 的shell腳本的能力才行。
????????? 我 們在安裝新內核的時候,通常都會編輯lilo.conf 和grub.conf 文件。
?????
?????? 里面有一段“initrd=/boot/initrd-***.img”(其中的***表示內核的版本號)的我們都很少會注意到,有時候還會發現這 一行不要也可以正常開機。那這個initrd***.img究竟是用來干什么的呢?
???????? 其實initrd***.img是一個鏡像文件,類似ramdisk,把一段程序打包到img里,然后在開機的時候在內存里開辟一段區域,一般是2m,釋 放到那里運行,都是一些初始化的程序,比如sisc_mod、ext3、sd_mod等模塊和insmod、nash等命令。不同內核,初始化的img可 以相同,也可以不同,如果沒有,可以在grub.conf里加上no initrd,它就跳過initrd的檢測和執行了,以前好像就沒有,后來才有的。 它的作用是在沒有mount /分區以前,系統要執行一些操作,比如掛載scsi驅動,它就把initrd釋放到內存里,作一個虛擬的/,然后執行其根目錄下的一個腳 本"linuxrc",運行insmod和nash命令掛裝模塊。
?????????? 為什么有的時候我們在lilo或grub的配置文件中不加入該行都可以正常開機呢?這是 因為我們一般的PC機都沒有使用scsi硬盤等需要先加載其驅動的設備,所以就算沒有initrd***.img也可以正常開機。但是如果我們要在服務器 上為其編譯新內核那就一定不要忘記也為其新建一個initrd文件呀!
??????????? 好,下面來看看如何查看initrd***.img里面的內容和如何為你的新內核創建一個新的initrd.img文件。
??????????? 查看initrd.img: initrd***.img雖然后綴是“img”,但其實它是一個gz格式的文件,我們可以先把它解壓,然后載掛裝到目錄下:
??????????? 1、cp initrd.img initrd.gz
??????????? 2、gunzip initrd.gz
? ? ? ? ? ? 3、mount -o loop initrd /mnt/floppy 進入/mnt/floppy目錄,
?????????? 我們就可以看到initrd***.img文件的廬山真面目了。
??
? ? ? ? ? ? 制作initrd文件 當我們編譯了一個新的內核,也不要忘了為我們的scsi設備做一個新的initrd鏡像:
???????? 語法: mkinitrd 文件名 內核的目錄名
????????? 示例: mkinitrd initrd-2.4.19.img 2.4.19 initrd-2.4.19.img
??????? 文件名是自己任意取的,但最好對應自己的內核版本號。
? ? ? ? 2.4.19是在/lib/modules中的目錄名,對應內核的版本。 當然,我們也可以在掛裝了initrd***.img文件后直接添加模塊到/lib目錄中,然后修改linuxrc腳本讓其開機進行掛裝。但必須具備一定 的shell腳本的能力才行。
總結
以上是生活随笔為你收集整理的initrd镜像文件的作用与制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]/boot/grub/grub.c
- 下一篇: Gentoo 安装日记 21 (第一次重