Linux系统开机引导

开机自检(BIOS)——>MBR引导——>GRUB菜单——>加载内核(kernel) ——>运行INIT进程

开机自检(BIOS)
// 加载 BIOS 的硬件信息、进行自我测试,并依据设定获得第一个可开机的设备
1.启动BIOS:固化在主板上的芯片 Del 、F2
2.POST ( power on self test )系统检查:检查核心硬件是否正常
3.设备初始化 : 初始化驱动程序,分配资源
4.引导设备选择:使用光驱,硬盘还是PXE引导

5.移交执行区域:加载引导设备的第一个扇区(512Byte)

Linux系统开机引导

BOIS :基本输入/输出系统 (微型 操作系统),存储计算机基本硬件的信息
作用:加电自检 、初始化、引导操作系统
BIOS 只读芯片,BIOS 的参数写在 CMOS中。有块小电池为CMOS供电
南北桥是主板上最大的芯片,

由于软驱已不再使用,某些BIOS在启动时检测不到软驱会提示错误,需要将其屏蔽
建议在BIOS配个密码,提高计算机的安全性,确保只有有权限的人员才能修改BIOS的参数
若管理员不记得某个电脑的BIOS密码,需要清空BIOS密码 1)清除CMOS的跳线,2)清除CMOS的按钮

故障排除:
1.POST 信息,包括检测过程和错误提示
启动时显示 “CMOS battery failed" :需更换新电池
启动时显示 ”Floppy disk is fail Press F1 to continue,Del to setup" : 无法驱动软驱,按F1建继续
2. 根据报警音排除
蜂鸣器长鸣 - 内存错误,清理灰尘,或更换一条插槽

MBR 引导
读取并执行第一个开机设备内 MBR 的 boot Loader(grub 等程序),依据 boot loader 的设置加载 Kernel,Kernel 会开始检测硬件与加载驱动程序;
boot loader 的作用就是载入内核
boot loader 装入 kernel,然后 kernel 需要执行/sbin/init
BIOS 向GRUB传递控制权

GRUB引导程序 (GNU赞助的项目)
引导程序的两个工作阶段
stage1 : 第一阶段的引导程序在MBR里面(446Byte),第一阶段用来定位装载第二阶段的引导程序
stage2: 第二阶段指引导程序本身,会运行某种应用程序并读取相应的配置信息
stage1.5:是stage1和stage2之间的桥梁,由于stage1不能识别文件系统格式,需要stage1.5来引导位于某个文件系统当中的stage2
stage1——>stage1.5——>stage2——>grub.conf (Stage2 这个文件会加载/boot/grub/grub.conf 这个文件)

删除stage 的这三个文件仍然能够正常启动,只是删除了文件名,数据还在,stage1只是MBR中前446字节的备份
stage1包含了stage2的物理地址,删除stage2还可以直接找stage2的物理地址,所以能正常启动

stage1 这个文件的大小,发现他正好是 512 字节
那就是(我个人认为)这个 stage1 就是 MBR。所以说,
Stage1 是执行 boot loader 的主程序,它是安装在我们的启动扇区。??
device.map 记录 grub 安装在哪个磁盘上;

1) BIOS 将控制权交给硬盘的主引导区,即 MBR。
2) MBR 中的 bootloader(stage1)通过内置的地址加载*stage1_5。
3) bootloader 通过*stage1_5 的内容,将分区中的 stage2 加载。
4) stage2 此时就可以在文件系统中将 grub.conf 文件加载,让用户看到选项界面。

Linux系统开机引导

#shred
-u
:#shred -u stage2
#grub-install /dev/sda //全部修复stage1 ,stage1.5,stage2

INIT进程初始化
INIT进程
:由Linux 内核加载运行/sbin/init 程序,是系统中第一个进程,PID号永远为1

/sbin/init
在内核加载完毕、进行完硬件检测与驱动程序加载后,此时主机硬件已经准备就绪了,这时候内核会主动的呼叫第一支程序,那就是 /sbin/init
/sbin/init 最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语言、文件系统格式及其他服务的启动等。

/etc/inittab
设定默认的 runlevel (开机运行级别),Linux 就是通过设定 run level 来规定系统使用不同的服务来启动,让 Linux 的使用环境不同
运行级别:运行Linux系统的不同模式,每种模式对应不同的服务程序组合
默认的7种运行级别
0:关机状态 1:当用户模式 2:字符界面的多用户模式(不支持网络) 3:字符界面的完整多用户模式 4:为分配使用 5:图形界面的多用户模式 6:重新启动

#runlevel 查看运行级别
切换前的运行级别 当前运行级别
第一个字符为“N”表示之前未切换过运行级别
#init n(1-6)临时切换运行级别参数

/etc/init/ (不要与目录/etc/init.d 混淆,/etc/init.d 中包含的是服务脚本)

/etc/init/rcS.conf
通过启动大部分的基本服务来对系统进行初始化的设定

/etc/init/rc.conf
对启动各自的运行级别(runlevel)的设定

/etc/init/control-alt-delete.conf
定义当用户按“control-alt-delete”三个键时的系统行为

/etc/init/tty.conf /etc/init/serial.conf
定义了系统处理终端登录的方式

/etc/rc.d/

/etc/rc.d/rc
根据指定的运行级别,加载或终止相应的系统服务,传入参数X, 触发相应的runleve事件

/etc/rc.d/rc.sysinit
由init进程调用执行,完成设置网络、主机名、加载文件系统等初始化工作; 系统模块与相关硬件信息的初始化

/etc/rc.d/rcn.d/* // 按事先设定的优先级依次启动
包含运行级别 n 执行服务状态配置的符号连接
控制系统在相应运行级别会自动启动或停止的服务
符号连接名称:Lddservice_name
L:K / S ,表示停止或启动服务
dd : 两位数字表示启动或停止服务的顺序
:# ls -l /etc/rc.d/rc5.d | grep crond
:# ls -l /etc/rc.d/rc0.d | grep crond

/etc/rc.local 脚本 // 用户自定义开机启动脚本,由rc脚本调用执行
把想启动的脚本写到这个文件中,开机就能启动了,注意一点,写在这里面的脚本要使用绝对路径。只有2、3、4、5级别运行这个文件
:#cat /etc/rc.local
:#ls -l /etc/rc.d/rc?.d/* | grep rc.local


/etc/sysconfig/init
除了这些通用的文件,在文件/etc/sysconfig/init 中还有一些额外的配置在这里,定义
了一些参数来决定启动信息的格式。除了那些不很重要的设置,有三行我们需要注意:

/var/log/dmesg / #dmesg
保存系统启动信息

Linux系统开机引导

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14319.html