修复引导那些事
- 2018-2-21
- 折腾
最近折腾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)
解释一下:
hd
是hard 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 | set root=(hd1,msdos1)/boot/grub |
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自检完毕后,找到硬盘上的MBR,MBR读取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个关键步骤:
MBR(Windows NT 5.x/6.x)读取活动主分区的PBR
PBR调用引导程序(Bootmgr)
Bootmgr读取BCD配置文件
(2)Grub引导Windows的步骤
MBR(grub)读取活动主分区的PBR
PBR调用引导程序(Bootmgr)
Bootmgr读取BCD配置文件
参考资料: