修复引导那些事

修复引导那些事

最近折腾Windows 10和Linux双系统,后来Linux系统不想用了,就直接进PE把Linux那块分区给格掉了。这不格式化还好,一个格式化电脑开机就直接进入grub rescue> 不是吧,这么背!百度一波,原来是磁盘丢失引导导致的问题。抱着折腾不死那就往死里折腾的心态,我开始走上强制关机进PE修复引导的不归路……

剧情1 grub rescue>入手

参考资料:

grub(GRand Unified Bootload) 是一个来自GUN项目的多操作系统启动程序

grub rescue>的字面意思可以知道,我们可以通过这个程序手动进入操作系统

Step1 输入ls回车列出所有分区

如:(hd0)(hd0,msdos1)(hd1)(hd1,msdos3)(hd1,msdos2)(hd1,msdos1)

解释一下:

hdhard disk(硬盘)的缩写

msdos全称是Microsoft Disk Operation Syatem ,是一种供微软操作系统使用的分区格式,以前是FAT,现在普遍是NTFS. 这里可以理解成分区

Step2 接着我们要找出是那个分区安装里面安装系统

输入

ls (hd0,msdos1)/boot/grub

ls (hd1,msdos3)/boot/grub

……

把所有分区都尝试一遍,直到返回内容不再是:error:unknown filesystem为止

Step3 假设输入ls (hd1,msdos1)/boot/grub 后出现类似以下内容

./ ../ gfxblacklist.txt ubuntu_kylin_grub_bg.tga i386-pc/ locale/ fonts/ grubenv grub.cfg

则说明,你已经找到了操作系统所在分区

Step4 进行相关配置

输入以下命令:

1
2
3
4
set root=(hd1,msdos1)/boot/grub
set prefix=(hd1,msdos1)/boot/grub
insmod normal
normal

normal执行之后即进入选择启动项的界面


然而,我在Step2就失败了,试遍了所有分区,全都显示error:unknown filesystem 此法不通,就只好换一种方法了~

剧情2 了解操作系统引导的整个过程

我觉得这样下去不是办法,** 只有初步了解操作系统引导的整个过程**才能让我在重装系统方面有更高的造诣~以便以后遇到这方面的问题的才能够更加从容,更重要的是帮妹子装电脑的时候能够更加淡定...  (逃

硬盘示意图
硬盘示意图

硬盘示意图

相关概念

1. MBR (主引导记录)

每块独立的硬盘都只有一个主引导记录MBR(Main Boot Record,512字节) ,记录着硬盘分区的信息。

主引导记录(MBR,Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。

MBR 包括 BOOT LOADER(主引导程序,446字节)、DPT(硬盘分区表,64字节)、MN(结束标志,2字节)

MBR不属于任何操作系统,它先于所有操作系统被调用内存,并发挥作用,然后才将控制权交给主分区(活动分区)内的操作系统。

(1)BOOT LOADER

Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行

(2)DPT

MBR模式磁盘:最多4个主分区, 或3个主分区+1个扩展分区,扩展分区又可以分32个逻辑分区。

在DPT共64个字节中,以16个字节为分区表项单位描述一个分区的属性。

(3)MN

结束标志字55 AA(偏移1FEH-偏移1FFH)最后两个字节,是检验主引导记录是否有效的标志。

2. PBR(分区引导记录)

PBR (Partition Boot Record) 分区引导记录,是操作系统的引导过程的一个环节。

PBR内的DOS引导代码读取操作系统的引导程序

3. BCD

BCD(BCD=Boot Configuration Data )即启动配置文件

在有vista或windows7的多重操作系统中,系统通过bootmgr程序导入BCD文件完成启动菜单的引导。

引导过程

1. Windows

  电脑加电后,首先启动BIOS,BIOS自检完毕后,找到硬盘上的MBRMBR读取DPT,从中找出活动的主分区,然后读取活动主分区的PBR(分区引导记录,也叫DBR)PBR再搜寻分区内的引导程序bootmgr,在bootmgr被找到后,控制权就交给了bootmgr。**bootmgr读取*,如果存在着多个操作系统并且选择操作系 统的等待时间不为0的话,这时就会在显示器上显示操作系统的选择界面。在我们选择启动Windows 后,bootmgr就会去[启动盘寻找 WINDOWS32.exe,然后通过winload.exe加载Windows内核,从而启动整个Windows系统

简单概括就是:BIOS—MBR—PBR—Bootmgr—bcd—Winload.exe—内核加载—整个Windows系统

2. Linux

区别在于引导程序,Linux的引导程序一般是grub

简单概括就是: BIOS—MBR—PBR—grub—grub.conf、menu.lst、grub.cfg等配置文件—内核

修复方法

差点跑题了,说一说自己最后怎么解决的:

But,在说自己解决问题之前,还是要先谈谈为什么装了Windows和Linux双系统 后直接删了Linux分区会出现grub rescue>,实际上grub是分两部分的,一部分在mbr中,一部分在Linux分区的/boot/grub/目录下(grub的一些配置文件类似bootmgr的BCD文件),grub启动Windows的原理是调用bootmagr引导程序。

我们在PE或Windows中格式化Linux分区,就相当于直接删除了/boot/grub/目录下的grub配置文件,所以当然无法正常引导Windows了~

在理解了系统引导过程后,我们的解决方案也就明确了,重写mgr直接清除grub就好了。

下面介绍常见PE系统(U深度、老毛桃等)自带的四款引导修复工具:

  • DiskGenius --可用于重建主引导记录(MBR)

  • BCDrepair --可用于修复BCD

  • Bootice  --可用于重建MBR、PBR、手动编辑BCD文件等

  • NTBoot  --可用于自动、手动修复引导记录

上述4个引导修复工具不能乱用,乱用是没有效果的,下面分享我修复引导的方法:

1. 使用Bootice重写主引导记录MBR(选择Windows NT 5.x/6.x MBR)

2. 使用Bootice重写分区引导记录PBR(选择BOOTMGR 引导程序)

(其实就是为PBR指定引导程序)

3. 使用BCDrepair修复自动修复BCD文件

这样我们就手动把引导过程中的3个关键环节(MBR-PBR-BCD)给手动修复了,想不成功都不行!

总结

(1)Windows引导过程的3个关键步骤:

  1. MBR(Windows NT 5.x/6.x)读取活动主分区的PBR

  2. PBR调用引导程序(Bootmgr)

  3. Bootmgr读取BCD配置文件

(2)Grub引导Windows的步骤

  1. MBR(grub)读取活动主分区的PBR

  2. PBR调用引导程序(Bootmgr)

  3. Bootmgr读取BCD配置文件

参考资料:

  1. 开机启动遇到grub rescue,无法启动系统怎么办

  2. MBR-百度百科

  3. BOOTLOADER-百度百科

  4. 电脑开机的整个过程

  5. 电脑最多能分多少个磁盘(区)

  6. 硬盘分区表知识——详解硬盘MBR (转)

  7. PBR-百度百科

  8. BCD-百度百科

  9. 从系统启动原理分析怎样修复多系统引导