传统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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)