59.Linux启动流程
1)加载bios的硬件信息,并获取第一个启动设备的代号
2)读取第一个启动设备的MBR的引导加载程序(即lilo、grub、spfdisk等)的启动信息
3)加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有硬件设备
4)核心执行init程序并获取运行信息
5)init执行/etc/rc.d/rc.sysinit文件
6)启动核心的外挂模块(/etc/modprobe.conf)
7)init执行运行的各个批处理文件(Scripts)
8)init执行/etc/rc.d/rc.local文件
9)执行/bin/login程序,等待用户登陆
10)登录之后开始以shell控制主机
60.引导加载程序与核心载入
整个主机在启动的时候,第一个读取的地方,就是BIOS(Basic Input Output System,基本输入输出系统),BIOS里记录了主机板的芯片集与相关的设置,如CPU与接口设备的通信频率、启动设备的搜索顺序、硬盘的大小与类型、系统时间、中断等信息,系统要顺利启动,首先要读取BIOS的相关设置值,获得BIOS设置值之后,系统会根据BIOS的数据,进行加电自检(Power on Self Test POST),然后初始化硬件检测,并设置PnP设备,确定可启动的设备后,开始读取启动设备的数据(MBR相关的任务开始)
每个硬盘的第一个记录称为MBR
在加载核心的过程中,系统只会“载入根命令”,而且是以只读方式载入的
61.第一个程序init及设置文件/etc/inittab与runlevel
整个Linux系统中,第一个执行的程序就是/sbin/init,init程序所做的工作相当多,除了利用设置文件/etc/inittab来获取运行等级(Run level)之外,还会通过运行等级的设置值启动不同的服务项目
Linux的7个运行等级
0-halt(系统直接关机)
1-single user mode(单用户维护模式,用于系统出问题时进行维护)
2-Multi-user,without NFS
3-Full Multi-user mode(完整的含有网络功能的纯文本模式)
4-unused
5-X11
6-reboot
vi /etc/inittab
#设置系统启动默认的运行等级设置项目
id:3:initdefault:
#开始启动运行等级的服务前,使用检测与初始化系统环境的设置文件
si::sysinit:/etc/rc.d/rc.sysinit
#7个不同运行等级需要启动的服务的脚本放置路径
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rc.d/rc 6
62.init处理系统初始化流程(/etc/rc.d/rc.sysinit)
/etc/inittab中有si::sysinit:/etc/rc.d/rc.sysinit,表示开始加载各项系统服务之前,先做好整个系统环境,主要使用/etc/rc.d/rc.sysinit这个shell脚本来设置系统环境
/etc/rc.d/rc.sysinit的主要工作有:
1)获取网络环境与主机类型
读取网络设置文件/etc/sysconfig/network,获取主机名称与默认网关(gateway)等网络环境
2)测试与载入内存设备/proc即USB设备/sys
3)决定是否启动SELinux
4)接口设备的检测与即插即用(PnP)参数的测试
5)用户自定义模块的加载
用户可以在/etc/sysconfig/modules/*.modules加入自定义的模块,此时会加载到系统中
6)加载核心的相关设置
主动读取/etc/sysctl.conf文件的设置值,使核心功能符合我们的要求
7)设置系统时间clock
8)设置终端控制台的字形console
9)设置RAID与LVM等硬盘功能
10)以fsck检验硬盘文件系统
11)进行磁盘配额quota的转换
12)重新以可读写模式载入系统硬盘
13)启动quota功能
14)启动系统随机数设备
15)清除启动过程中的临时文件
16)将启动相关信息加载到/var/log/dmesg文件中