当前位置: 代码迷 >> 综合 >> MBR、GRUB、Linux启动相关知识
  详细解决方案

MBR、GRUB、Linux启动相关知识

热度:96   发布时间:2023-12-06 13:17:12.0

在windows与linux双系统的情景下正确卸载Linux的方法是 先修复MBR到Win7在格式化Linux分区,否则GRUB引导会报错。


原因:
如果直接在Win 7里面删除Ubuntu所在的分区,则由于grub也被删除了(GRUB是安装在Linux分区中的),导致无法引导Win 7

ubuntu在安装时,修改了磁盘第一扇区(即MBR扇区)中的引导程序

方法:

1. 下载MBRFix工具,放在c盘,利用命令提示符,进入软件所在目录,cd c:\mbrfix    (cd后面一个空格)
2.输入 MBRFix /drive 0 fixmbr /yes
3.重启,发现直接进入Win 7,现在可以用Win 7的磁盘管理格式化Ubuntu所在分区(就是没有盘符的,选定删除卷时会提示是其他系统的数据)了


MBR相关:
MBR是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它,但可以通过命令来修改和重写。
mbr是计算机最先执行的硬盘上的程序,但只有512字节大小。因为只有512字节,不能载入操作系统的核心,所以只能先载入一个可以载入计算机核心的程序,这个程序叫做引导程序。grub就是一个引导程序。一般用windows的默认安装的引导程序即可,但是因为一个硬盘上可能有多个不同的系统(windows,linux,mac等),而windows的引导程序只能引导windows系列,所以都会有grub这样的可以识别多种系统的通用型的引导程序。所以,和win的引导相比,grub的优势就是能引导多种系统。


GRUB相关:
能正常工作的grub应该包 括一下文件:stage1、stage2、*stage1_5、menu.lst。 
  其中stage1要被安装(也就是写入)某个硬盘的主引导记录(MBR,即上文提到的被修改的MBR扇区,在卸载Linux时需要修复的也正是这里),或者某个活动分区(这个分区要用fdisk标记成可启动的)的启动扇区。 stage1的主要的也是唯一的作用就是找到你存放在硬盘上某个地方的stage2文件,来完成后续的工作。 
  stage2文件可以存在某个特定的文件系统中,比如你分了一个linux分区,在上面创建一个ext2文件系统,然后把这个文件拷贝到这个 分区的某个目录下。也可以把stage2直接存放在硬盘的某个位置,也就是未分区的某个地方。不过,好像没有多少人会这么做吧。 
  因为stage1的容量有限(主引导记录MBR和启动扇区的大小只能够是512字节),所以它对文件系统是无法识别的,那如果你把 stage2存放在ext2或者fat格式的文件系统上,它如何来找到这个文件呢?这就要用到上面提到的那些stage1_5的文件了,它们负责解释文件 系统。你的stage2放在什么格式的文件系统上,就要调用对应的那个stage1_5文件。比如,你把stage2存放在ext2格式的文件系统上,就 需要e2fs_stage1_5;stage2存放在fat格式的文件系统上,就需要fat_stage1_5了,stage1.5可以安装在 mbr 之后的位置。


简单开机过程 :
①按下电源后,计算机自检(POST),如果硬件设备(CPU、内存、硬盘、光驱、各种卡)都没有问题,BIOS会检查各个硬盘的MBR,看有没 有可以执行的代码,如果你把grub安装到第一个硬盘的MBR上,那BIOS就会找到它,然后把控制权交个这段代码(其实就是512字节大小的 stage1)。 
②stage1根据安装时提供的信息,如stage2在什么地方,需不需要加载文件系统的对应的stage1_5文件等,找 到stage2文件,并把控制权交给stage2。 
③stage2会需要特定位置的grub配置文件menu.lst文件(此文件是/boot/gurb/gurb.conf的链接文件),如 果找到,就分析其中的内容,形成操作系统选择菜单(Grub管它叫Menu Interface),如果没有找到menu.lst或者这个文件的格式、内容有错误,那就显示grub的命令行提示符。 
④当你选择了菜单中相应的条目,或者输入了相关的命令,就可以看是引导系统了。比如引导linux的话,stage2会负责将vmlinuz 和initrd(如果有的话)装载到内存,并把控制权交给vmlinuz。 
⑤linux的内容完成对硬件的初始化,并把控制权交给init程序,完成后续的工作了。 


Linux 引导过程内幕:http://www.ibm.com/developerworks/cn/linux/l-linuxboot/index.html