Linux initrd啟動跟系統的硬件相關
Linux initrd啟動還是比較常用的,于是我研究了一下Linux initrd啟動,在這里拿出來和大家分享一下,希望對大家有用。initrd = init ramdisk,是一個啟動時存在于內存的文件系統。
Linux initrd啟動的最初的目的是為了把kernel的啟動分成兩個階段:在kernel中保留最少最基本的啟動代碼,然后把對各種各樣硬件設備的支持以模塊的方式放在Linux initrd啟動中。
這樣就在啟動過程中可以從Linux initrd啟動所mount的根文件系統中裝載需要的模塊。這樣的一個好處就是在保持kernel不變的情況下,通過修改Linux initrd啟動中的內容就可以靈活的支持不同的硬件。在啟動完成的***階段,根文件系統可以重新mount到其他設備上。
Linux啟動一定要用initrd么?
不必,如果把需要的功能全都編譯到內核中(非模塊方式),只需要一個內核文件即可,Linux initrd啟動能夠減小啟動內核的體積并增加靈活性。如果你的內核以模塊方式支持某種文件系統(例如ext3, UFS)。
而啟動階段的驅動模塊(如jbd)放在這些文件系統上,內核是無法讀取文件系統的,從而只能通過Linux initrd啟動的虛擬文件系統來裝載這些模塊。這里有些人會問: 既然內核此時不能讀取文件系統,那內核的文件是怎么裝入內存中的呢?答案很簡單,Grub是file-system sensitive的,能夠識別常見的文件系統。
Linux initrd啟動文件是怎么生成的? 使用mkinitrd命令,這個命令其實是一個Bash腳本 #file `which mkinitrd` /sbin/mkinitrd: Bourne-Again shell script text executable 該腳本先建立一個8M的空文件,并在此上建立一個文件系統,并拷貝相應的的文件。
一個默認RedHat Fedora Core 2, 它的Linux initrd啟動是什么內容 (跟系統的硬件相關)?
# file initrd-2.6.5-1.358.img
initrd-2.6.5-1.358.img: gzip compressed data, from Unix, max compression
# mv initrd-2.6.5-1.358.img initrd-2.6.5-1.358.gz
# gzip -d initrd-2.6.5-1.358.gz
# ll
-rw-r--r-- 1 root root 8192000 Jan 14 11:32 initrd-2.6.5-1.358
# mkdir /mnt/loop
# mount -o loop initrd-2.6.5-1.356 /mnt/loop
………… 中間修改此文件系統,等等…………
# umount loop
# cd /boot
# gzip -9 initrd-2.6.5-1.356
# mv initrd-2.6.5-1.356.gz initrd-2.6.5-1.356.img
【編輯推薦】