一、Linux的启动流程

 

1. 从BIOS到KERNEL

BIOS自检->MBR(GRUB)->KERNEL->KERNEL自解压->内核初始化->内核启动

2. 内核启动:创建1#进程并执行,由它创建若干内核线程(kernel thread),然后装入并执行程序/sbin/init(变成一个用户进程)。此后,init根据/etc/inittab配置文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等。

 

对于Redhat来说,执行的顺序为:

/etc/rc.d/rc.sysinit # 由init执行的第一脚本

/etc/rc.d/rc $RUNLEVEL # init执行指定运行级别($RUNLEVEL为缺省的运行模式)的各脚本;

/etc/rc.d/rc.local #运行模式2、3、5时会运行的脚本

/sbin/mingetty(或getty) # 等待用户登录

 

/etc/inittab中指定了系统的运行级别(RUNLEVEL),init根据运行级别启动相关的服务(一些后台进程),实现不同的功能。

 

RUNLEVEL值为:0-6

 

0:halt, 1:单用户,2:多用户,3:多用户并启动NFS服务

4:保留,5:运行xdm(X window)以图形界面方式登录

6:reboot

 

3./etc/inittab文件

 

/etc/inittab的文件内容如下:

 

# 设定系统开机预设的RUNLEVEL:

id:3:initdefault:

 

# 开始进行RUNLEVEL的服务启动前,使用来侦测与初始化系统环境的设定文件:

si::sysinit:/etc/rc.d/rc.sysinit

 

# 7 个不同 run level 的,需要启动的服务的 scripts 放置路径:

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

 

# 是否允许按下 [ctrl]+[alt]+[del] 就重新开机的设定项目:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

 

# 本机端终端机启动的个数:

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

 

# 在 X Window (RUNLEVEL 5) 环境下的启动 script 设定项目:

 

x:5:once:/etc/X11/prefdm -nodaemon

 

这个文件的语法是这样的:

 

标识符:级别:init 的动作行为:指令项目

 

1. 标识符:

最多四个字符,代表 init 的主要工作项目,只是一个简单的代表说明。

2. 级别:

该项目在哪些 run level 底下进行的意思。如果是 35 则代表 runlevel 3 与 5 都会执行。

3. init 的动作行为:

主要可以进行的动作项目意义有:

initdefault :代表预设的 run level 设定值;

sysinit :代表系统初始化的动作项目;

ctrlaltdel :代表 [ctrl]+[alt]+[del] 三个按键是否可以重新开机的设定;

wait :代表后面接的指令项目必须要执行完毕才能继续后面的动作;

respawn :代表后面接的, init 仍会主动的『重新』启动。

更多的设定项目请参考 man inittab 的说明。

4. 指令项目:

亦即应该可以进行的指令,通常是一些 script 啰。

 

说明:如根据上面的文件,init程序执行时根据/etc/inittab文件的内容,完成以下功能

(1)获取RUNLEVEL(文件中的这一行 id:3:initdefault:)为3

(2)执行rc.sysinit(文件中的这一行 si::sysinit:/etc/rc.d/rc.sysinit)

(3)执行/etc/rc.d/rc3.d目录中的脚本(文件中的这一行 l3:3:wait:/etc/rc.d/rc 3,且因为本例RUNLEVEL为3)

(4)然后设定是否允许按下 [ctrl]+[alt]+[del] 就重新开机(文件中的这一行 ca::ctrlaltdel:/sbin/shutdown -t3 -r now,当然如果不允许,可把此行注释掉)

(5)启动六个终端界面tty1-tty6

(6)最后如果我们使用的是 run level 5 ,那么除了这六个终端机之外, init 还会执行/etc/X11/prefdm -nodaemon 其主要的功能就是在启动 X Window !

 

 

二、GRUB及其配置

 

1.GRUB(启动引导器程,低版本的为lilo,其配置文件为:/etc/lilo.conf)简介

 

安装Linux后GRUB位于硬盘0柱面,0磁道,1扇区。是计算机启动过程中运行的第一个真正的软件,通常计算机启动时在通过BIOS自

 

检后读取并运行硬盘的主引导扇中的启动引导器程序,启动引导器再负责加载启动硬盘分区中的操作系统。

 

2.GRUB的配置文件—grub.conf

 

可通过/boot/grub/grub.conf配置GRUB,其文件内容大致如下:

 

default 0 ----设置GRUB的默认启动项

splashimage (hd0,0)/boot/grub/splash.xpm.gz ----用于指定某一个文件作为启动菜单的背景图象

timeout 30 ----设置菜单的启动延时

 

title=Boot Linux using initrd ----菜单项名称

root (hd0,0) ----设置GRUB的根设备(root)为linux内核所在的分区

kernel /boot/bzImage root=/dev/loop0 init=/initdisk.gz ----使用kernel命令后跟linux内核文件作为参数,加载。

 

linux的内核文件

initrd /initdisk.gz ----使用initrd命令加载镜像文件

title=Windows NT ----菜单项名称

root (hd0,1) ----设置Windows NT系统所在的分区

makeactive ----设置根设备为活动分区(针对windows不能从非活动分区启动)

chainloader +1 ----使用chainloader命令调用windows分区的启动引导器引导windows系统,+1表示第一个扇区

 

3.忘记根口令时的设置

启动计算机,在显示GRUB菜单时---按e键,进入编辑---选kernel项---按e键---输入空格+single 回车---按b键,重启系统进入单用户模式,输入以下命令更改口令:

#passwd root

#reboot

 

4.为grub设置口令

为防止用户在显示grub菜单时进入编辑,以单用户模式启动更改root用户口令,可给grub设置口令。

修改/boot/grub/grub.conf文件,加上:password 口令

(假设密码为123456)

(1)设置全局口令

password 123456

default=1

timeout=10

……

 

(2)可使用全局口令锁定启动菜单项

紧跟在title命令之后添加lock命令

password 123456

default=1

timeout=10

splashimage=(hd0,7)/grub/splash.xpm.gz

title Red Hat Linux (2.4.20-8)

lock

root (hd0,7)

kernel /vmlinuz-2.4.20-8 ro root=LABEL=/

initrd /initrd-2.4.20-8.img

 

(3)设置独立的口令锁定启动菜单项,在菜单项中使用password命令

可实现全局口令和菜单项口令的分级管理。

password 123456

default=1

timeout=10

splashimage=(hd0,7)/grub/splash.xpm.gz

title Red Hat Linux (2.4.20-8)

password 67890

root (hd0,7)

kernel /vmlinuz-2.4.20-8 ro root=LABEL=/

initrd /initrd-2.4.20-8.img

(4)可以使用MD5L加密口令

采用#grub-md5-crypt

或 #grub

grub>md5crypt

Password: