RedHat 开机起动流程

2008-02-23 07:21:24来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

# 版权宣告: 1999 Copyright OLS3 All rights reserved.

# 作者: OLS3 (卧龙小三)
# 本讲义仅供台南县 87 学年度网路管理进阶研习班上课之用.
# 学员可保存一份自用, 供日後网管时参考备查.
# 作者保有一切形式的着作权.
# 欲作其它用途者, 需经作者授权同意.
# 未经作者授权同意之前, 请勿转载刊登.

RedHat 开机起动流程 :

1. LILO 取得控制权.

PC 起动时, 会读取开机磁碟第一条 cylinder 的第一个 sector(此即 MBR), 然後它会试着将读取到的程式码载入记忆体中并且予以执行. 这些程式码, 就是 LILO. 记不记得, 当初我们安装时, 曾选择将 LILO 放入MBR 呢?!

2. 载入 kernel

Red Hat 的 kernel 放在 /boot 中, 通常档名类似 vmlinuz-2.0.34-0.6, vmlinuz-2.2.5-15

3. kernel 执行第一支程式 /sbin/init

init 会根据 /etc/inittab 这个 initialization table 来决定不同的 run-level 应该如何设定系统.

Red Hat 的 run-level 有以下 7 层: (定义在 /etc/inittab 中)

0 --- halt : 关机 level
1 --- Single user mode : 单人模式, 如果你忘记 root 密码, 这是补救的方式之一.
2 --- Multiuser, without NFS : 多人使用模式, 但没有 NFS 功能, 如果安装时没有使用网路功能, 那麽 level 3 是一样的.
3 --- Full multiuser mode : 这是预定的 run-level
4 --- unused : 这个 run-level 目前尚未定义使用
5 --- X11 : X Windows 使用的 level
6 --- reboot : 重新开机时使用的 level
Linux 系统开机时, 最重要的观念便是这个 run-level , run-level 可以说是 Linux 的系统状态(system states of Linux), 根据不同的情况进入不同的系统状态, 以执行不同的初始化动作.

另外一点, Linux 虽然融合了 System V 及 BSD 的特色, 但在开机起动的部份, 比较接近 System V 的作法, 并且这种方式几乎已成为 Linux 世界的一项标准. 因为它具有容易使用, 功能强大以及富有弹性的特色.

其目录档案结构如下:

/etc/rc.d 中包含:

目录 script 档案
/etc/rc.d/init.d
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc/rc.d/rc6.d
rc
rc.local
rc.sysinit


rc0.d 便是 run-level 0 起动 script 存放的目录, rc3.d 是 run-level 3, 其它依此类推

不过, rc0.d ~ rc6.d 中的 script 并不是各自独立的, 其实它们都是 symbolic file, 连结到 /etc/rc.d/init.d 中的 script.

比如 rc3.d 目录中的档案列表如下:

total 0
lrwxrwxrwx 1 root root 20 May 23 15:56 K15postgresql -> ../init.d/postgresql
lrwxrwxrwx 1 root root 17 May 23 15:56 K20rusersd -> ../init.d/rusersd
lrwxrwxrwx 1 root root 15 May 23 15:56 K20rwhod -> ../init.d/rwhod
lrwxrwxrwx 1 root root 16 May 23 15:56 K55routed -> ../init.d/routed
lrwxrwxrwx 1 root root 17 May 23 15:56 S01kerneld -> ../init.d/kerneld
lrwxrwxrwx 1 root root 17 May 23 15:56 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 15 May 23 15:56 S15nfsfs -> ../init.d/nfsfs
lrwxrwxrwx 1 root root 16 May 23 15:56 S20random -> ../init.d/random
lrwxrwxrwx 1 root root 16 May 23 15:56 S30syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root 13 May 23 15:56 S40atd -> ../init.d/atd
lrwxrwxrwx 1 root root 15 May 23 15:56 S40crond -> ../init.d/crond
lrwxrwxrwx 1 root root 17 May 23 15:56 S40portmap -> ../init.d/portmap
lrwxrwxrwx 1 root root 15 May 23 15:56 S40snmpd -> ../init.d/snmpd
lrwxrwxrwx 1 root root 16 May 23 15:56 S45pcmcia -> ../init.d/pcmcia
lrwxrwxrwx 1 root root 14 May 23 15:56 S50inet -> ../init.d/inet
lrwxrwxrwx 1 root root 15 May 23 15:56 S55named -> ../init.d/named
lrwxrwxrwx 1 root root 13 May 23 15:56 S60lpd -> ../init.d/lpd
lrwxrwxrwx 1 root root 18 May 23 15:56 S75keytable -> ../init.d/keytable
lrwxrwxrwx 1 root root 18 May 23 15:56 S80sendmail -> ../init.d/sendmail
lrwxrwxrwx 1 root root 13 May 23 15:56 S85gpm -> ../init.d/gpm
lrwxrwxrwx 1 root root 15 May 23 15:56 S85httpd -> ../init.d/httpd
lrwxrwxrwx 1 root root 15 May 23 15:56 S85sound -> ../init.d/sound
lrwxrwxrwx 1 root root 13 May 23 15:56 S91smb -> ../init.d/smb
lrwxrwxrwx 1 root root 11 May 23 15:48 S99local -> ../rc.local

各位可以发现: 这些 script 档不是以 S 开头, 就是以 K 开头, 其後再接上二位数字, 并且皆连结到 init.d 目录中的相关 scripts 档.

以 S 开头的, 表示 Start 起动之意, 而 K 开头的, 则是 Kill 杀除之意.

4. init 执行第一支 script : /etc/rc.d/rc.sysinit

rc.sysinit 会设定许多系统变数, 如:

设定 PATH
设定网路: 读取 /etc/sysconfig/network, 以设定 NETWORKING, FORWARD_IPV4, HOSTNAME, DOMAINNAME, GATEWARY, GATEWAYDEV(eth0)
设定 NIS domain name
并且执行 run-level 启动之前所需的许多准备动作, 如:

起动 swapping
checking root filesystems : 检查 root 档案系统
检查系统参数 (/proc), 设定 PNP
清除 /etc/mtab
mount root 及 /proc 档案系统
决定是否使用模组, 载入模组
检查档案系统 (使用 fsck)
挂上其它档案系统
设定 console 字型
打开 quota
清除不必要的档案, 如 lock, pid
设定 clock
serial port 初始化
将开机讯息经由 dmesg 放入 /var/log/dmesg 中

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:设定环境变数

下一篇:在Linux上自动建立帐号