linux系统启动流程

启动流程概括:

POST (加电自检,检测硬件设备可用性)-->Boot Sequence(BIOS查找启动引导顺序,选择应该从硬盘,USB,网络,光驱中的哪个设备启动系统) --> Boot Loader (找到系统所在分区,通过grub1,1.5,2阶段找到内核) --> Kernel(当无法识别根分区驱动时会用到ramdisk,通过ramfs创造一个虚拟跟文件系统,里边提供了根文件系统所在磁盘的驱动,达到能识别根所在磁盘) --> rootfs (加载根文件系统)--> switchroot(切换到根分区) --> /sbin/init(启动init程序,只有启动了init程序才能控制所有其他程序) -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别(根据/etc/inittab文件) --> 系统初始化脚本rc.sysinit--> 关闭或启动对应级别下的服务 --> 启动终端

上神图:

wKioL1Xv-bCwWQQ8AAei2tQVpRg468.jpg

接下来,我们分析一下bootloader里的grub

grub作用:

 (1) 提供菜单、并提供交互式接口
          e: 编辑模式,用于编辑菜单;
          c: 命令模式,交互式接口;
(2) 加载用户选择的内核或操作系统
          允许传递参数给内核
          可隐藏此菜单
(3) 为菜单提供了保护机制
          为编辑菜单进行认证
          为启用内核或操作系统进行认证

1.Grub的命令行接口:

刚开机时敲e键,进入grub,敲c键进入命令行接口:

wKiom1XwI26xKqFEAAUonOgfBUk721.jpg

Root指令用于设置grub所在根设备

如果boot单独分区则直接指向root hd(0,0)

如果boot没有单独分区需要加上boot路径,即root hd(0,0)/boot/

wKioL1XwJZvziSMAAACMkwE9lno002.jpg

如果已经指明了root(hd0,0),直接find / 就可以

wKiom1XwI2_hU88mAACfo90UBdU839.jpg

接着:设定内核所在位置,根文件系统所在位置

wKiom1XwI2_wCtLCAAAjhPt0rzY376.jpg

指定initramfs所在位置:当内核无法识别根所在磁盘的驱动时,initramfs里边装载的硬盘驱动可以帮助内核去识别

wKioL1XwJZvAPEn9AAAhCx0Rf5E234.jpg

2.grub菜单和grub.conf其实是一一对应的

grub菜单:

wKiom1XwJargucILAADkNxFmfrE582.jpg

/boot/grub/grub.conf文件

wKioL1XwJ9eD31o1AAGw3qwFU98527.jpg

配置项:
default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;
timeout=#:指定菜单项等待选项选择的时长;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
hiddenmenu:隐藏菜单;
password [--md5] STRING: 菜单编辑认证;(这行添加位置在title行上面)
title TITLE:定义菜单项“标题”, 可出现多次;用于引导多个不同内核
root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;
password [--md5] STRING: 启动选定的内核或操作系统时进行认证;

**以上用于加密grub或者加密内核启动的加密的password 可以用grub-md5-crypt命令生成


3.进入单用户模式方法:

(1) 编辑grub菜单(选定要编辑的title,而后使用e命令);
(2) 在选定的kernel后附加
      1, s, S或single都可以;
(3) 在kernel所在行,键入“b”命令;

4.安装grub----两种方法:(当grub损坏时)
 (1) grub-install
      grub-install --root-directory=ROOT /dev/DISK

具体流程:

①将需要装grub的磁盘上的原先的boot分区挂载到/mnt/boot目录下

②执行grub-install命令:

wKioL1XwLqiy_HdgAAGbmantfzI463.jpg      
(2) grub命令行提示符下---再没重启情况下在shell中直接输入grub命令(前提是boot/grub目录下有stage1和stage1.5文件)
      grub> root (hd#,#)
      grub> setup (hd#)


紧急救援模式下修复grub,这个需要光盘启动:

wKiom1XwMzmQ4CNdAAJ3Px9yeOw677.jpg

在以下命令行中使用grubinstall,需要chroot /mnt/sysimage-----这个目录是当前系统挂载点

wKioL1XwNu_Bw0CzAAD4PQreLvA954.jpg



你可能感兴趣的:(grub,init,bootloader,系统启动流程)