什麼是初始 RAM 磁盤?
初始 RAM 磁盤(initrd)是在實際根文件系統可用之前掛載到系統中的一個初始根文件系統。initrd與內核綁定在一起,並作為內核引導過程的一部分進行加載。內核然後會將這個 initrd 文件作為其兩階段引導過程的一部分來加載模塊,這樣才能稍後使用真正的文件系統,並掛載實際的根文件系統。
initrd 中包含了實現這個目標所需要的目錄和可執行程序的最小集合,例如將內核模塊加載到內核中所使用的 insmod 工具。
在桌面或服務器 Linux 系統中,initrd 是一個臨時的文件系統。其生存周期很短,只會用作到真實文件系統的一個橋梁。在沒有存儲設備的嵌入式系統中,initrd 是永久的根文件系統。
initrd的作用
目的在於提供開機過程中所需要的最重要核心模塊,以使系統開機過程可以順利完成。
查看initrd-xx-xx.img虛擬文件系統內容:
[root@localhost boot]# ll initrd-2.6.18-194.el5.img
-rw------- 1 root root 2629986 02-09 09:52 initrd-2.6.18-194.el5.img
[root@localhost boot]# cp initrd-2.6.18-194.el5.img /tmp/
[root@localhost boot]# pwd
/boot
[root@localhost boot]# cd /tmp/
[root@localhost tmp]# ls
initrd-2.6.18-194.el5.img
[root@localhost tmp]# file initrd-2.6.18-194.el5.img
initrd-2.6.18-194.el5.img: gzip compressed data, from Unix, last modified: Thu Feb 9 09:52:35 2012, max compression
[root@localhost tmp]# mv initrd-2.6.18-194.el5.img initrd-2.6.18-194.el5.img.gz
[root@localhost tmp]# gunzip initrd-2.6.18-194.el5.img.gz
[root@localhost tmp]# file initrd-2.6.18-194.el5.img
initrd-2.6.18-194.el5.img: ASCII cpio archive (SVR4 with no CRC)
[root@localhost tmp]# mkdir initrd
[root@localhost tmp]# cd initrd
[root@localhost initrd]# cpio -i <../initrd-2.6.18-194.el5.img
11762 blocks
[root@localhost initrd]# ls
bin dev etc init lib proc sbin sys sysroot
[root@localhost initrd]# tree ../
../
|-- initrd
| |-- bin
| | |-- dmraid
| | |-- insmod
| | |-- kpartx
| | |-- modprobe -> /sbin/nash
| | `-- nash
| |-- dev
| | |-- console
| | |-- mapper
或者直接使用命令zcat initrd-2.6.18-194.el5.img | cpio -i
制作initrd文件
[root@localhost test]# ls
[root@localhost test]# mkinitrd initrd_$(uname -r) $(uname -r)
//mkinitrd [-v] [--with=模塊名稱] initrd 文件名 核心版本
[root@localhost test]# ls
initrd_2.6.18-194.el5
[root@localhost test]# file initrd_2.6.18-194.el5
initrd_2.6.18-194.el5: gzip compressed data, from Unix, last modified: Sun Mar 25 19:49:36 2012, max compression
[root@localhost test]# mkinitrd -v --with=8139too initrd_$(uname -r)_test $(uname -r) | grep 8139too
//加入8139模塊,生成initrd文件之後即可移入boot中使用了
Looking for deps of module 8139too: mii
Using modules: /lib/modules/2.6.18-194.el5/kernel/drivers/usb/host/ehci-hcd.ko /lib/modules/2.6.18-194.el5/kernel/drivers/usb/host/ohci-hcd.ko /lib/modules/2.6.18-194.el5/kernel/drivers/usb/host/uhci-hcd.ko /lib/modules/2.6.18-194.el5/kernel/fs/jbd/jbd.ko /lib/modules/2.6.18-194.el5/kernel/fs/ext3/ext3.ko /lib/modules/2.6.18-194.el5/kernel/drivers/scsi/scsi_mod.ko /lib/modules/2.6.18-194.el5/kernel/drivers/scsi/sd_mod.ko /lib/modules/2.6.18-194.el5/kernel/drivers/scsi/scsi_transport_spi.ko /lib/modules/2.6.18-194.el5/kernel/drivers/message/fusion/mptbase.ko /lib/modules/2.6.18-194.el5/kernel/drivers/message/fusion/mptscsih.ko /lib/modules/2.6.18-194.el5/kernel/drivers/message/fusion/mptspi.ko /lib/modules/2.6.18-194.el5/kernel/drivers/ata/libata.ko /lib/modules/2.6.18-194.el5/kernel/drivers/ata/ata_piix.ko /lib/modules/2.6.18-194.el5/kernel/drivers/md/dm-mem-cache.ko /lib/modules/2.6.18-194.el5/kernel/drivers/md/dm-mod.ko /lib/modules/2.6.18-194.el5/kernel/drivers/md/dm-log.ko /lib/modules/2.6.18-194.el5/kernel/drivers/md/dm-region_hash.ko /lib/modules/2.6.18-194.el5/kernel/drivers/md/dm-message.ko /lib/modules/2.6.18-194.el5/kernel/drivers/md/dm-raid45.ko /lib/modules/2.6.18-194.el5/kernel/drivers/net/mii.ko /lib/modules/2.6.18-194.el5/kernel/drivers/net/8139too.ko
copy from `/lib/modules/2.6.18-194.el5/kernel/drivers/net/8139too.ko' [elf32-i386] to `/tmp/initrd.mD7411/lib/8139too.ko' [elf32-i386]
Adding module 8139too