init的初始化过程 –by quner

当grub的stage2载入内存运行后,它将读取硬盘上的kernel和initrd并载入内存。

我们可以使用下列命令来解出initrd的内容:
[root@dhcp-0-170 initrd]# zcat /boot/initrd-2.6.18-8.el5.img | cpio -i
10261 blocks
[root@dhcp-0-170 initrd]# ls
bin  dev  etc init lib  proc sbin sys  sysroot
各目录的内容如下:
[root@dhcp-0-170 bin]# ls
insmod  lvm  modprobe  nash
[root@dhcp-0-170 dev]# ls
console  null  ram   ram1  systty  tty0  tty10  tty12  tty3  tty5  tty7  tty9   ttyS1  ttyS3
mapper   ptmx  ram0  rtc   tty     tty1  tty11  tty2   tty4  tty6  tty8  ttyS0  ttyS2  zero
[root@dhcp-0-170 etc]# ls
lvm
[root@dhcp-0-170 etc]# cd lvm/
[root@dhcp-0-170 lvm]# ls
lvm.conf
[root@dhcp-0-170 lib]# ls
ata_piix.ko   dm-mod.ko       dm-zero.ko   ext3.ko  libata.ko    scsi_mod.ko  uhci-hcd.ko
dm-mirror.ko  dm-snapshot.ko  ehci-hcd.ko  jbd.ko   ohci-hcd.ko  sd_mod.ko

另外三个proc, sys, sysroot是三个挂载点,里面为空。实际经历了一个mount (执行该目录下的init脚本开始) –> umount (init脚本的最后执行switchroot,这时卸载掉这三部分,并启动/sbin/init进程) 的过程。

内核解压initrd并执行init脚本,该脚本的主要作用:
1) 加载proc, sysfs等文件系统
2)创建设备节点
3)加载必需的设备驱动
4)以只读方式挂载根文件系统(这是根文件系统的第一次挂载,只读挂载可能是处于安全考虑)
5)切换到根下面并执行根下面的init程序(/sbin/init) (switchroot的工作)

/sbin/init进程是所有进程的父进程,当init起来之后,它首先会读取配置文件/etc/inittab,进行以下工作:
1)执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,具体作用见后面说明。到这一步系统基本算运行起来了,后面需要进行运行级别的确定及相应服务的启动。
2)确定启动后进入的运行级别
3) 执行/etc/rc.d/rc, 该文件定义了服务启动的顺序是先K后S,而具体的每个运行级别的服务状态是放在/etc/rc.d/rcn.d(n=0~6)目录下,所有的文件均链接至/etc/init.d下的相应文件。
4)有关key sequence的设置
5) 有关UPS的脚本定义
6)启动虚拟终端/sbin/mingetty
7)在运行级别5上运行X
这时呈现给用户的就是最终的登录界面。

说明:
1) /etc/rc.d/rc.sysint — System Initialization Tasks
它的主要工作有:
配置selinux,
系统时钟,
内核参数(/etc/sysctl.conf),
hostname,
使能swap分区,
根文件系统的检查和二次挂载(读写),
激活RAID和LVM设备
使能磁盘quota
检查并挂载其它文件系统
等等。
2) 两次执行init(两次执行的是不同的文件,只是名字相同而已)
a. 在initrd装载入内存后,会首先执行其中的init脚本,主要的作用如开头所述。
b. 在第一次只读方式挂载根文件系统后,转换至系统真正的根目录下并执行/sbin/init程序,读取/etc/inittab信息并根据配置启动系统。
3)两次挂载根文件系统(同一个根文件系统)
a. initrd载入内存后,执行init脚本,以只读方式挂载根文件系统(可能处于安全考虑,挂载的目的就是执行/sbin/init)
b. 执行/sbin/init进程,读取/ etc/inittab文件内容,确定运行级别,执行/etc/rc.sysint,读写方式挂载根文件系统以及其它本地文件系统。

发表于: 2007-11-07,修改于: 2007-11-08 11:08
from http://blog.chinaunix.net/u1/48373/showart_416908.html




coded by nessus
发表评论?

0 条评论。

发表评论