Linux系统启动流程

本文主要以centos6说明系统启动流程

一、启动的整体过程如下

POST --> BIOS(引导次序)--> BootLoader(mbr) --> kernel+ramdisk(临时根)--> 切换根-->/sbin/init

二、针对以上过程做详细介绍

1.POST阶段:

加电自检

2.BIOS阶段:

加载BIOS的硬件信息并进行自我测试,并依据设定取得第一个可开机的装置

3.bootloader阶段:

选择要启动的内核(内核在当前磁盘的某或某些分区上)

这里涉及到GRUB

4.kernel阶段:

自身初始化,主要做以下工作:

探测所有能识别的硬件

装载驱动程序

装载根文件系统

调用/sbin/init

这里重点介绍下init执行过程

1)设定系统默认运行级别包含(0-6)七个级别

2)进一步初始化系统

运行 /etc/rc.d/rc.sysinit脚本

设定主机名

打印文本欢迎信息

激活SELinuxudev

挂载/etc/fstab文件中定义的其它文件系统

激活swap

检测根文件系统,并以读写方式重新挂载

设置系统时钟

根据/etc/sysctl.conf设置内核参数

激活LVmRAID设备

清理操作

3)启动指定的默认运行级别的默认启动的服务,停止指定的默认运行级别下默认为关闭的服务

/etc/rc.d/rc#.d下文件

S##:启动的服务

K##:停止的服务

4)定义一些组合键的功能

5)初始化字符终端

三、GRUB详细介绍

1.grub介绍:

多操作系统启动程序,可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数

2.grub程序组成:

Stage1MBR0柱面、0磁道、1扇区)

Stage1.5MBR随后扇区

Stage2:读取grup.conf配置文件,并实现引导功能的扩展

3.grub功能:

1.提供菜单,并提供交换接口

e:进入编辑模式

2.选择要启动的内核或系统

允许传递引导参数给内核

选择界面可隐藏

3.为编辑功能提供保护机制

密码保护

4.grub命令行接口:

root:指定哪个分区为接下来要启动的系统或内核文件所在的分区

root (DEVICE)root (hd0,0)第一个硬盘,第一个主分区

find (DEVICE)/path/tofile:查看内核文件位置

kernel:指定要运行的内核文件

initrd:为要运行的内核指定其可用的ramdisk文件

boot:启动以上配置好的内核或系统

以上命令都配置在/boot/grub/grup.conf文件中

5.grub.conf文件详解:

default=0:选择第几个title配置的内核或系统,各title0开始编号

timeout=5:菜单显示的超时时长,这里是5秒的意思

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz:指定菜单的背景图片

hiddenmenu:隐藏菜单

title CentOS 6 (2.6.32-504.el6.x86_64):显示菜单中的标题

root

kernel

initrd

6.grub保护机制:

1.生产密码

# grub-md5-crypt

2.保护编辑功能,在配置文件中的title之外添加

password  --md5  密码串

3.保护使用的内核,在内核对应的title下添加

password  --md5  密码串

7.安装grub的方式:

1.使用grub-install命令

grub-install   [--root-directory=/path/to/somwhere]  DEVICE

--root-directory=/path/to/somwhere

/path/to/somwhere:内核及initrd文件所在的分区挂载点的父目录,且此挂载点必需叫boot