linux的启动流程

来源:互联网 发布:琼斯镇惨案 知乎 编辑:程序博客网 时间:2024/05/21 17:25
Linux启动流程


Linux系统启动流程
1. BIOS加电自检. 检测硬件. 决定启动介质. 找到引导扇区
2. 读取并且执行第一个开机设备中的MBR的bootloader(grub程序)
3. 依据bootloader设置去加载kernel内核,kernel侦测硬件并加载驱动程序
4. 硬件驱动成功后,kernel内核启动init进程,init取得run-level信息
5. init执行/etc/rc.d/rc.sysinit来启动系统初始化
6. init找到/etc/inittab文件,决定系统的运行级别(X)
7. 触发相应的运行级别的事件,运行/etc/rcX.d下的脚本
8. 执行/etc/rc.local文件,来到登录界面
9. init执行终端机仿真程序mingetty来启动login程序,输入用户名密码,进入到系统中

BIOS初始化
1. 进行上电自检(POST),功能就是检查硬件设备
2. 枚举本地设备并初始化
3. 如果是硬盘启动就会读取和执行启动设备的第一个扇区(0磁道0柱面1扇区)
GRUB程序引导
GRUB配置文件
/boot/grub/grub.conf
default=0 //默认启动第几个"title"
timeout=5 //时间延迟5秒
splashimage=(hd0,0)/grub/splash.xpm.gz//GRUB启动菜单背景界面
hiddenmenu //隐藏菜单选项
title Red Hat Enterprise Linux Server(2.6.18-194.el5)//菜单中的系统标题
root(hd0,0) //制定根设备
kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/rhgb quite//内核文件与挂载根设备
initrd /initrd-2.6.18-194.el5.img//指定初始化内存镜像盘
title windows //另一个操作系统的标题
rootnoverify(hd0,1)//操作系统存放在hd0,1上,不要再GRUB里mount
chainloader +1//从hd0,1的第一个扇区启动

bootloader主要的功能
提供选单:用户可以选择不同的开机项目,这也是多重引导的重要功能
载入核心档案:直接指向可开机的程序区段来开始操作系统;
转交其他 loader:将开机管理功能转交给其他 loader 负责
序代码执行与设定值加载分成两个阶段 (stage)来执行:
Stage 1:执行 boot loader 主程序
Stage 2:主程序加载配置文件与相关的环境参数(包括文件系统定义与主要配置文件 menu.lst), 一般来说


MBR损坏怎么办?
修复MBR:
1. 备份文件的方式:dd if=/dev/sda of=/sdb1/sda.mbr.bak bs=512 count=1//未损坏前就需要进行备份
2. 恢复:
打开电源进入到bios里面,boot里面设定光盘启动,进入到修复模式
chroot /mnt/sysimage(挂载点)
mkdir /backup 
mount /dev/sdb1 /backup
dd if=/backup/mbr.bak of=/dev/sda bs=512 count=1
修复GRUB:
grub.conf文件损坏或者丢失
(系统引导不了,停住,显示grup>提示符)
1.手动引导
配置文件:/boot/grub/grub.conf
cd /boot/grub mv grub.conf文件
1.root (hd0,0)
kernel (/vmlinuz-2.6.32... ro root=UUID#)
initrd /initra...
boot

2.进入救援模式,修复grup
进入到救援模式,默认会找到根分区,并挂载到/mnt/sysimage
chroot /mnt/sysimage
修复grub 
BIOS(boot sequence)>MBR(bootloader,446)
kernel 在内存中解压,探测硬件
init 


加载kernel内核和initrd
Linux会将内核压缩到主存储器中,并利用内核的功能开始测试与驱动各个设备


INIT进程
是由Linux内核加载运行的/sbin/init程序,是系统中第一个进程,PID号永远为1
配置文件:/etc/inittab
0 关闭
1 单一用户模式(一般仅用于管理目的)
2 多用户模式,不允许使用网络
3 多用户模式,允许使用网络
4 没有用到的运行级别
5 多用户模式,允许使用网络,使用X Window方式
6 重新引导


系统初始化脚本
/etc/rc.d/rc.sysinit
获得网络环境
挂载设备
判断是否启用SELinux
初始化硬件
用户自定义模块的加载
配置内核参数
设置主机名
同步存储器
设备映射器及相关的初始化
初始化RAID. LVM等
检查磁盘文件系统(fsck)
磁盘配额(quota)
重新以可读/写模式挂载系统磁盘
启动交换分区
将开机信息写入/var/log/dmesg文件中

运行级别
每个运行级别都对应一个目录/etc/rc.d/rcX.d
目录中存放的是在当前运行级别中需要开启的服务脚本,对应/etc/rc.d/init.d/目录下的链接,首先终止"K"开头的服务,然后启动"S"开头的服务,数值小的服务优先执行
查看运行级别
runlevel 显示切换前的运行级别. 当前运行级别
init number 临时切换运行级别

/etc/rc.local脚本文件
保存了用户定义的需要开机后自动执行的命令
由/etc/rc.d/rc脚本调用执行
运行级别为2,3,5都将其作为初始化脚本中的最后一个文件


为系统添加密码


root密码
安装系统时候给root设置密码


破解root密码:
前提:能重启系统
进入单用户模式

grub密码
为了防止用户进入单用户模式修改root密码,怎么办呢?
给grub加上密码
明文密码   ——  修改grub配置文件
vim /boot/grub/grub.conf
在timeout下面添加一行
---------------------------
password 123456
---------------------------
reboot
重启之后,想要编辑grub进入单用户的话,需要提供grub的密码
按p:输入密码

必须正确输入grub的密码,然后才能编辑grub

密文密码
生成加密后的字符串
grub-md5-crypt 
Password: 
Retype password: 
$1$r5htQ$IRUJY./85zdZT3a6JDmfv0    //加密后的字符串
修改grub配置文件
vim /boot/grub/grub.conf
password --md5 $1$r5htQ$IRUJY./85zdZT3a6JDmfv0    //修改password那行
破解grub密码
前提条件:手头要有光盘
需要进入救援模式     
想要进入到救援模式,需要进入bios修改引导介质的优先级,让cdrom优先
虚拟机进入BIOS:按F2       真机进入BIOS:一般按(.   del键)

将光盘移动到硬盘上面,按F10保存
 
择救援已安装系统  Rescue

目前我们选的是本地光盘,以后可能选择URL,网络修复系统。

如果你救援的时候想和别人交流,那么就选择yes;否则我就选择No


你可以执行chroot /mnt/sysimage可以切换到真正的系统的根目录,修改grub配置文件,将password那行删除掉
bash-4.1# reboot
重启之后又可以进到单用户模式了。    
BIOS密码
为了防止用户进入救援模式,给BIOS加密码

重启系统,按F2想要进入BIOS时候,
小总结:
1. 如果破解root密码,需要进入单用户模式
2. 防止进入单用户模式,给grub加密码
3. 破解grub密码,需要进入救援模式
4. 防止进入救援模式,给BIOS加密码

要想进入单用户模式的前提,需要能够重启系统
要想进入救援模式,要有光盘,而且能够进入BIOS修改引导介质的顺序