文档章节

关于Linux系统下Grub启动流程的讨论总结

不必在乎朕是谁
 不必在乎朕是谁
发布于 2012/09/29 01:24
字数 2205
阅读 256
收藏 6

全世界Linuxer都知道GRUB是什么东西,但对于MBR引导到GRUB再引导到具体操作系统的这个流程可能有不少朋友就比较迷糊了。这不,cu上一位朋友就发出了这样一个求助贴:
假如现在一台电脑上装了WIN2000系统,那么我现在在装上Linux系统和GRUB,那么假如把GRUB装在主分区的话,GRUB直接引导 Linux和WIN2000,我是可以理解的,因为MBR中是GRUB的STAGE1(对不对呢?),MBR通过检查DPT分区信息引导系统跳转至DBR (活动分区),我这里想问的活动分区是什么时候设的呢?那么装GRUB到MBR里,那原来MBR中的WIN的引导信息是怎么处理的呢?是不是我们假如说装 GRUB到MBR的时候,GRUB就把GRUB所在那个区设置为了活动分区了呢?然后GRUB引导时候,MBR就找到那个活动分区找到所需要的文件,然后继续呢?假如说把GRUB装到其他分区(非主引导区)的话,那是怎么样实现GRUB先启动的呢?不是先MBR吗?因为装到了其他分区,没有改主引导区,因此主引导区还是WIN2000的引导数据啊,怎么会GRUB先启动了呢?这是为什么呢?跟活动分区有关系没有呢?我看资料上写的是哪个系统启动哪个系统就是活动分区,可是那样的话,似乎就解释不通了啊,就是最最开始这个地方一直不懂,理不清楚。
下面就是cu各个玩家对这个问题分析讨论的总结。
首先让我们看看传统的启动流程:加载并运行Master Boot Record(MBR)主引导区内容(如lilo等)。然后扫描分区表,定位活动分区,并将活动分区上的引导扇区内容加载到内存中执行。
系统引导过程主要由以下几个步骤组成(以硬盘启动为例)
1、 开机;
2、 BIOS加电自检(POST——Power On Self Test),内存地址为0fff:0000;
3、 将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处;
4、 检查(WORD)0000:7dfe是否等于0xaa55.若不等于则转去尝试其他介质;如果没有其他启动介质,则显示 “No ROM BASIC” ,然后死机;
5、 跳转到0000:7c00处执行MBR中的程序;
6、 MBR先将自己复制到0000:0600处,然后继续执行;
7、 在主分区表中搜索标志为活动的分区。如果发现没有活动分区或者不止一个活动分区,则停止;
8、 将活动分区的第一个扇区读入内存地址0000:7c00处;
9、 检查(WORD)0000:7dfe是否等于0xaa55,若不等于则显示 “Missing Operating System”,然后停止,或尝试软盘启动;
10、 跳转到0000:7c00处继续执行特定系统的启动程序;
11、 启动系统。
装GRUB到逻辑分区,那么就一定把GRUB装入的逻辑分区设为活动的。不过,这时候,GRUB接管了11步以后的动作:从stage 1.5读出GRUB.conf。再由配置和用户选择决定下一步的引导行为。
一般安装GRUB都有两种情况,对于安装到MBR这种情况而言,GRUB直接覆盖了原来的MBR引导程序。这也是为什么要换回“原来的 windows的引导方式”,只要用dos引导fdisk /mbr一下就可以的原因。为什么可以这样做,请注意,1-11步中有两个地方出现了0000:7c00。不管是dos boot sector还是nt loader它本身也是从0000:7c00运行的。其实ms当年开发分区管理的这个小程序相当于是在bios引导boot sector中插进去的。GRUB因为也是写的从0000:7c00这个内存开始的子程序,那么既可以被BIOS加载又可以被dos的MBR加载应该好理解了吧。
开机自检后,引导权交给了硬盘的MBR,此时GRUB就启动了。由GRUB来引导windows /Linux都可以。注意:Linux不一定要安装在活动分区,因为引导程序在MBR!但是windows一定要安装在活动分区(可引导的 windows),第二个windows可以不安装在活动分区,但它的引导文件一定在活动分区。
大体顺序是:
GRUB—->windows–>查找引导文件—引导加载—启动windows
GRUB—->Linux—>查找引导文件(/boot)–>引导加载—启动Linux
那么,如果把GRUB安装到了其它的分区上,不是MBR呢?这是GRUB所装在的那个主分区必须被设为活动分区。因为MBR(物理主引导分区)中其实并没有 OS相关的引导程序的,通常MBR只是扫描并读取随后的分区表,找到相应的活动分区,读取相应活动分区的第一个扇区的512字节程序并运行,该程序负责进一步引导相应分区的相应系统。因此,大概的运行次序是
BIOS—>MBR—->GRUB—->菜单。
这样,大体的真实流程就可以总结如下了:
1、 开机;
2、 BIOS加电自检(POST——Power On Self Test),内存地址为0fff:0000;
3、 将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处;
4、 检查(WORD)0000:7dfe是否等于0xaa55.若不等于则转去尝试其他介质;如果没有其他启动介质,则显示 “No ROM BASIC” ,然后死机;
5、 跳转到0000:7c00处执行MBR中的程序;
6、 MBR先将自己复制到0000:0600处,然后继续执行;假如先装XP后装Linux,并且Linux没有装在MBR,那这个MBR中的数据还是WIN 写的数据,它的作用都是下步中所说的作用,就是搜索主分区表中标志为活动的分区,那么这个时候就必须把GRUB所在的主分区设置为活动的分区,这个时候才能正常的启动GRUB,然后GRUB的STAGE1在调STAGE1.5和其他的,从而来引导整个系统。假如说先装XP后装Linux,但是GRUB装在了MBR,那样STAGE1直接调入内存,STAGE1在调STAGE1.5和STAGE2等,从而来引导系统。那这个时候是不需要将GRUB其他文件所在的主分区设为活动分区的,它直接调STAGE1.5等,然后再调STAGE2等,来识别文件系统,从而实现可多启动。
7、 在主分区表中搜索标志为活动的分区。如果发现没有活动分区或者不止一个活动分区,则停止;
8、 将活动分区的第一个扇区读入内存地址0000:7c00处;
9、 检查(WORD)0000:7dfe是否等于0xaa55,若不等于则显示 “Missing Operating System”,然后停止,或尝试软盘启动;
10、 跳转到0000:7c00处继续执行特定系统的启动程序;
11、 启动系统。
一点资料:
能正常工作的GRUB应该包括一下文件:stage1、stage2、*stage1_5、menu.lst。
其中stage1的大小一定是512字节,它要被安装(也就是写入)某个硬盘的主引导记录,或者某个活动分区(这个分区要用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了。

本文转载自:http://soft.zdnet.com.cn/software_zone/2007/1006/537431.shtml

共有 人打赏支持
不必在乎朕是谁
粉丝 18
博文 88
码字总数 14701
作品 0
西安
程序员
关于Windows下删除Linux系统的笔记

本文内容有: 一、windows直接删除linux系统,但未格式化原linux分区为NTFS格式 二、windows直接删除linux系统,直接格式化原linux分区为NTFS格式 三、正确的在windows目录下删除linux系统的...

acmfly
2013/10/23
0
0
通过恢复GRUB来破解VCSA 6.0的ROOT密码

VCSA 6.0与VCSA 5.5不太一样,尤其是在关于ROOT密码恢复这块,以前可以直接恢复,但是现在暂时还没法直接这样做恢复,因为在启动时单用户模式里关于GRUB的部分被隐藏了,所以,没法这样修改了...

xjsunjie
08/24
0
0
Linux启动流程详解

linux启动流程 第一部分 Linux启动基础知识 1.1 linux centos6.8启动流程图 BIOS加电自检à加载MBRà加载启动grubà加载内核à启动/sbin/init进程à启动/bin/login进程à进入登陆页面 1.2 BI...

零容忍
2017/05/14
0
0
[Linux学习笔记] Linux系统引导流程(一)

前面我们已经介绍过以CentOS为例的Linux系统的安装以及Linux常用命令的使用,本节内容我们将介绍Linux系统引导流程。当按下电源的那一刻,到我们看到用户界面,这其中都发生了些什么呢?赶快...

LSantorini
2015/11/17
0
0
CentOS6.4之Linux引导流程解析

? Linux引导流程 ? Linux运行级别 ? Linux启动服务管理 ? GRUB配置与应用 ? 启动故障分析与解决 ? Linux引导流程 常用固件设置 固件设置实例 https://www.kernel.org/ ? Linux运行级别 查看当...

redking
06/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android JNI开发系列(十三) JNI异常处理

JNI 异常处理 JNI异常与JAVA处理异常的区别 JAVA 有异常处理机制,而JNI没有 如果JAVA中异常没有捕获,后面的代码不会执行,JNI会执行 JAVA编译时的异常,是在方法显示的声明了某一个异常,编...

蔡小鹏
32分钟前
1
0
简单介绍Java 的JAR包、EAR包、WAR包区别

WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War专用于Web方面。大部分的JAVA WEB工程,都是打成WAR包进行发布的。 War是...

Linux就该这么学
57分钟前
1
0
Qt那些事0.0.7

在帮助文档(Overview - QML and C++ Integration)中随缘遇到一张图,是关于C++对象与QML整合介绍的,值得标记下来,虽然大部分功能也有所涉猎,但是还是留个记号,万一哪天我失忆了还想写Q...

Ev4n
今天
0
0
快速幂运算

题:求一个数 data 的 n 次幂,要求时间复杂度为log(n) 1:递归算法: /** * x^3=(x^2)*x;x^7=(x^3)^2 * x * * 递归算法 * @param data 底数 * @param n 次...

偶尔诗文
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部