系统引导的一些知识

前几天同学找我装系统,因为他自己装弄坏了引导,只好求助我了。因为对系统引导这方面不是很懂,总是感觉云里雾里,所以弄了挺久都没弄好,但是在我的不懈努力下还是帮他整好了。这几天好好研究了几下,终于了解了一个大概。

BIOS的类型

目前电脑主要有两种bios legacy bios以及 uefi bios
这里的legacy是传统的意思,在2012年前,大部分主板带的都是legacy bios
2012年后,uefi bios逐渐取代legacy bios


在windows下有个简单的方法查看bios类型

同时按住win键与R键,之后再输入msinfo32,回车

BIOS是个啥

按我的理解,bios就是内置在主板上的一个比较底层的操作系统
bios存放在主板的一个flash芯片上,即使你没有硬盘,你一样能进入bios。

现在,BIOS用于初始化和测试系统的硬件组件,以及从大容量存储设备(如硬盘)加载引导程序,并由引导程序加载操作系统。BIOS还为DOS操作系统提供键盘、显示及其他I/O设备的硬件抽象层。许多较新的操作系统在引导后不再通过BIOS访问硬件。

以上摘自维基百科

硬盘的分区表类型

目前分区表类有MBRGPT两种
可以通过DiskGenius这款神器查看

MBR

如果你硬盘的分区表类型是MBR,那么硬盘的第一个磁区就非常重要(512 bytes)。
里边主要有两个东西:
1.启动管理程序(446 bytes) ————来自操作系统
2.磁盘的分区信息(64 bytes)
3.magic number(2 bytes)

缺点:1.最大只支持2TB硬盘 2.主分区数量+扩展分区数量最多只能有四个 3.第一个磁区坏了这块硬盘就凉凉
造成以上几个缺点的最主要原因就是第一个磁区里的磁盘分区信息只有64byte,实在是太小了!!!

GPT

这个不是特别懂,但是它解决了上边MBR分区的缺点。
1.最大支持18EB(1EB=1024PB=1,048,576TB) 以目前来看,可以说接近无限了
2.分区数量几乎没有限制 (windows限制128个)
3.有保险,分区信息有备份
还有一个非常重要的特点,有一个独立的ESP分区,里面存放的内容相当于MBR第一扇区的启动管理程序。分区的大小想调就调,装win10会自动分配100MB的大小,比446bytes不知道大了多少倍。
我的电脑装了win10 + ubuntu,ESP分区是下面这样的

windows&&ubuntu等系统是怎样跑起来的?

目前所有Windows系统均支持MBR,而GPT只有64位系统才能支持。legacy bios只支持MBR引导系统,而GPT仅可用uefi bios引导系统。正因为这样,现在主板大多采用legacy bios集成uefi bios,或uefi bios集成legacy bios,以此达到同时兼容MBR和GPT引导系统的目的。
下面分别说说几种不同的搭配,以及对应的引导过程

legacy bios + MBR

uefi bios + GPT


以上两种为主流搭配

legacy bios + GPT

legacy bios是可以使用GPT分区表的硬盘来作为资料盘的,但不能引导系统,且系统须使用64位系统。

uefi bios + MBR

uefi兼容legacy,可到bios设置成legacy模式。效果等同与legacy bios + MBR

引导修复

uefi类型

这个引导最关键的地方就是ESP这个分区了,我们先来分析一下这个目录的结构,以我win10 + ubuntu 双系统为例

UEFI规范里,在GPT分区表的基础上,规定了一个EFI系统分区(EFI System Partition,ESP),ESP要格式化成FAT32,EFI启动文件要放在 \EFI\<厂商> 文件夹下面。比如Windows的UEFI启动文件,都在\EFI\Microsoft下面。
比如ubuntu的东西,全都放在\EFI\ubuntu下面。
\EFI\Boot这个文件夹。这个文件夹,放谁家的程序都行。无论是\EFI\Microsoft\Boot\Bootmgfw.efi,还是\EFI\grubx64.efi,只要放到\EFI\Boot下并且改名bootX64.efi,就能在没添加文件启动项的情况下,默认加载对应的系统。
这里边的文件在系统文件里都有,如上图画的一样。
这里再吐槽一下微软,他的启动文件只能启动它自家的系统。例如你装的双系统,一个XPWIN7,那没问题,万事大吉,开机的时候有菜单给你选XPWIN7。但是,要是像我一样装了其他系统,例如乌班图,那不好意思,他家启动界面没这选项。所以在ESP分区的\EFI\Boot这个文件夹下一定得放乌班图的grub2引导,这样才能实现开机的时候有两个系统给你选。所以,千万不要在装完乌班图再装win10,因为win10会霸道的把ESP分区的\EFI\Boot里面的内容换成他自家的,这样你就没法愉快的进入乌班图系统了。


顺便说下grub2是怎样启动win10的


再来说说修复,以windows修复引导为例,第一要保证系统盘有bootrecovery这两个文件夹(没有的话可以到别人电脑拷一份,或者从系统镜像中解压出来),第二要保证有ESP分区,没有的话可以划几百兆建立ESP分区,文件系统选择EFI system partition,此分区最好分在磁盘头部。
最后在PE的的命令行下运行
bcdboot c:\windows
这里的c盘在pe下可能不是c,对应系统盘就好,自己看着改
或者在pe下打开 uefi引导修复工具
选好对应的系统盘以及ESP分区,点击修复即可,效果等同上面输命令。


LINUX系统还没找到比较傻瓜式的方法,但网上教程也不难,通常都是通过安装盘进入linux系统,运行里面的引导修复工具,大家网上找找资料吧。

填坑待补

MBR类型

在pe下运行下列软件即可,傻瓜式操作(未试验)

https://zhidao.baidu.com/question/514203144.html

参考资料
鸟哥的linux私房菜
https://zhuanlan.zhihu.com/p/31365115
https://blog.csdn.net/Li_Qing_Xue/article/details/79228867

坚持技术分享,如果帮助到了您,您的支持将鼓励我继续创作!