linux开机引导和启动过程

linux开机引导和启动过程,第1张

传统启动方式(Legacy+MBR)   

传统BIOS启动方式,存在一些不足:比如最大只支持2TB磁盘,磁盘最多四个分区,且不支持图形 *** 作

 新式启动方式(UEFI+GPT)

相对于Legacy+mbr, 优点在启动更快(不要开机自检),最多可支持128个磁盘分区,最大可支持18EB硬盘,支持图形 *** 作

启动流程

1.  上电,BIOS自检,找到启动介质(系统盘),读取主引导分区(MBR)

2. 引导装载程序 (GRUB2),寻找 *** 作系统内核并加载其到内存, 内核初始化

3. 启动 systemd

https://www.cnblogs.com/jjmcao/p/9322324.html     开机流程

https://linux.cn/article-8807-1.html         开机流程

http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html   开机流程

https://linux.cn/article-8603-1.html?pr    grub介绍

http://www.dnxtc.net/zixun/zhuangjijiaocheng/2020-10-11/5852.html uefi和legacy区别

linux可以通过fdisk命令查看系统磁盘分区类型

CentOS7下重建grub并恢复系统的故障案例

https://cloud.tencent.com/developer/article/1767715

Linux系统启动的大致过程

Linux *** 作系统是基于UNIX *** 作系统发展而来的一种克隆系统,它诞生于1991 年的 [Linux桌面] 10 月5 日。下面我准备了关于Linux系统启动的大致过程,提供给大家参考!

第一阶段:BIOS启动引导阶段

在该过程中实现硬件的.初始化以及查找启动介质

从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理

第二阶段:GRUB启动引导阶段

装载stage1

装载stage1.5

装载stage2

读取/boot/grub.conf文件并显示启动菜单

装载所选的kernel和initrd文件到内存中

第三阶段:内核阶段:

运行内核启动参数

解压initrd文件并挂载initd文件系统,装载必须的驱动

挂载根文件系统

第四阶段:Sys V init初始化阶段:

启动/sbin/init程序

运行rc.sysinit脚本,设置系统环境,启动swap分区,检查和挂载文件系统

读取/etc/inittab文件,运行在/et/rc.d/rc<#>.d中定义的不同运行级别的服务初始化脚本

打开字符终端1-6号控制台/打开图形显示管理的7号控制台

同时在上述过程中各阶段所需要读取的文件和 *** 作的对象:

BIOS启动引导阶段 GRUB启动引导阶段 内核阶段 /init/sysinit阶段

====================================================================================

None /boot/grub/grub.conf /boot/vmlinuz- /etc/rc.d/rc.sysinit

/boot/grub/stage1_5 /boot/initrd- /etc/inittab

/boot/grub/stage2 /etc/rc.d/rc<#>.d

/etc/rc.d/init.d/*

问题 : 有时候Linux系统/boot分区损坏时,启动Linux系统时直接进入字符介面的grub引导,并没有进入到系统或者开机显示 error:unknow filesystem提示

解决办法:

Linux开机自动会进入到grub引导介面(如果没进入到grub引导介面可以按C键进入)

第一步:找到系统对应的扇区及/boot/grub目录

注意 :假设是硬盘接口类型sd,hd0对应是sda hd1对应是sdb

(hd0)≠(hd0)

(hd1,gpt2)=(hd1,2)

ls (hd1,gpt2) 查看(hd1,gpt2)扇区信息(盘符、空间等)

ls (hd1,gpt2)/  查看(hd1,gpt2)扇区下的内容(文件、文本等)

如果打印每个扇区目录信息,会出现两种情况:

1、ls (hd1,gpt2)显示Unknow filesystem提示说明这个扇区不是我们要找系统分区

2、ls (hd1,gpt2)显示/boot /proc等系统目录信息说明这个扇区是我们要找的系统分区

如果找到对应扇区的系统分区,可能会遇到两种情况:

1、 A目录下有/boot/grub

2、A目录下有/boot,B目录下有/grub (此时在第二步加载系统内核要使用 set prefix=(hd1,gpt2)/grub 命令)

grub >ls

(hd0), (hd1), (hd1, gpt1), (hd2,gpt2), (hd3, gpt3)

第二步:加载系统内核

grub >set root=hd1,2 #此处不需要括号,加括号也可以,hd0和hd1是有区别

grub >set prefix=(hd1,2)/boot/grub

grub >linux /vmlinuz root=/dev/sdb2 #vmlinuz必须使用TAB补全(可能有后缀),注意sda或sdb需要看自己的实际情况

grub >initrd /initrd.img-xxx #TAB补全,多内核情况下版本需统一

grub >boot

提示 :如果在boot之后不幸进入BusyBox,说明参数设置有问题,可以仔细查看出错的日志,再重启系统后重复执行第二步 *** 作(重启系统后上面设置的参数会被清空)。

第三步:修改grub引导

如果成功进入系统,记得要马上信息grub引导,不然重启系统后问题还是存在

sudo update-grub2 #grub2命令(高版本使用grub2)

$ sudo grub-install /dev/sdb

第四步:重启系统

重启系统后即可正常进入系统

reboot


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8438267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存