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脚本
设定主机名
打印文本欢迎信息
激活SELinux和udev
挂载/etc/fstab文件中定义的其它文件系统
激活swap
检测根文件系统,并以读写方式重新挂载
设置系统时钟
根据/etc/sysctl.conf设置内核参数
激活LVm和RAID设备
清理操作
3)启动指定的默认运行级别的默认启动的服务,停止指定的默认运行级别下默认为关闭的服务
/etc/rc.d/rc#.d下文件
S##:启动的服务
K##:停止的服务
4)定义一些组合键的功能
5)初始化字符终端
三、GRUB详细介绍
1.grub介绍:
多操作系统启动程序,可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数
2.grub程序组成:
Stage1:MBR(0柱面、0磁道、1扇区)
Stage1.5:MBR随后扇区
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配置的内核或系统,各title从0开始编号
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