Grub2 MBR 与 Windows MBR

Grub2 MBR 与 Windows MBR

我有一台安装了 Vista 的 HP 系统,还有一个隐藏的恢复分区。随后我升级到了 Win7(32 位)Ultimate,然后又升级到了 Win7 Pro。现在硬盘出现故障。我设法使用 partimage 抓取了恢复分区(没有错误),然后将其放在冰上,准备使用冰箱对 Win7 分区进行恢复。

在另一个驱动器上,我创建了 3 个主分区和一个扩展分区:

  1. 恢复分区 (NTFS)
  2. Win7 分区(NTFS)
  3. Ubuntu 根目录 (ext4)
  4. Ubuntu swap(ext4)(逻辑分区)

接下来,我安装了 Ubuntu 10.4 并允许 grub2 安装 MBR。然后,我使用 partimage 将我从故障驱动器中取出的映像填充到恢复分区中。现在,在我尝试恢复 Win7 分区之前,我想确保我可以访问现有的恢复分区。但我不能。我可以看到文件,但无法启动它。Grub 将其视为 Windows 分区并将其列在菜单中。但是当我尝试启动它时,我只是盯着一个带有闪烁光标的空白屏幕。我尝试通过使用 gparted 使恢复分区处于活动状态并直接启动到该分区而不是 grub 来绕过 grub,但我仍然启动到 grub。

基于这样的背景,让我来提出我的问题。

  1. 据我了解,标准 IBM/WIndows MBR 代码在分区表中查找第一个设置了活动/可引导标志的主分区,然后将控制权移交给它在该分区开头找到的代码,即“分区引导记录”(PBR)。然后,PBR 找到 NTLDR/BOOTMGR/grub/etc 并加载它。我的理解正确吗?
  2. 在启动过程中,中断键(HP 中为 f11)在哪里处理启动到恢复分区?MBR?PBR?启动管理器/加载程序?
  3. 当 grub 写入 MBR 时,它似乎还使用了 0 号轨道的其余部分,并且 MBR 代码先执行此代码,然后再继续加载其所在的分区中的其余 grub 代码(在我的情况下是分区 3)。从这个意义上讲,它忽略了分区表中的活动/可引导标志。我理解得对吗?

我显然遗漏了一些部分,因为我无法加载恢复分区。我认为 grub“chainloader”(为什么 +1?)命令只会执行 PBR 代码。如果这是真的,那么我的恢复分区中的某些东西就被阻止了。

答案1

在具有此类恢复分区的系统上,通常活动分区是恢复分区。恢复分区显示“按 F11”消息,如果没有按下,则转发到主操作系统分区。

MBR 本质上是愚蠢的;它所做的就是选择其中一个分区,然后转发到该分区的 VBR。

如果您想要 Linux/Windows 双启动,那么恢复分区将需要转发到 GRUB 分区,然后允许选项,并且如果选择了 Windows,则会转发到 Windows。

我不会在恢复分区上浪费时间——你可以从 HP 的网站上获得所有的驱动程序,如果你的机器上已经有了 7 个驱动程序,我想我们都同意想要恢复到 Vista 的可能性不大。

那么,对于您的具体问题。

  1. 是的,你的理解是正确的
  2. 以上已回答
  3. 不确定 GRUB 安装到 MBR 后具体做了什么。据我了解,它并没有真正将业务逻辑放在那里,但我可能是错的。

希望有帮助:)

答案2

问题 3:是的,grub 确实将其自身的一些内容放在了 0 轨道中。我个人从不将 grub 放在 mbr 中,我总是使用“普通”mbr 并将 grub 安装在主分区中。

使用未标记为正在使用的磁盘部分是否会导致问题将取决于具体情况。我认为 Windows Vista 和 Windows 7 中的磁盘分区程序与以前的版本不同,但我不知道它是否利用了 0 号轨道的备用部分。

我最近确实听说有人遇到了问题,因为某个程序(Adobe 之类的?)的试用版会向磁盘的那个区域写入数据,从而覆盖部分 grub(我想这是为了能够阻止人们一次又一次地重新安装试用版)。(请收听最近一期的 Ubuntu UK 播客以了解详情)我的观点是,如果您向不属于您的区域写入数据,您就不能抱怨其他人做同样的事情。

grub 的 mbr 位将其自身的下一阶段的物理磁盘地址写入其自己的代码中,并且根本不注意分区,无论其是否活动。

答案3

MBR(1 个扇区,512 字节)包含引导代码和分区表。“默认”MBR 代码会查找活动主分区并链式加载它。(在 GRUB 术语中,+1 表示第一个扇区,即该分区的引导扇区。)

当您将 GRUB 安装到 MBR 中时,它会替换默认的 MBR 代码(当然会保留分区表),而是加载 GRUB 核心映像的其余部分,该映像安装在“MBR 间隙”中——MBR 扇区之后的第一个“轨道”中未使用的部分。如果您将 GRUB 安装到分区中,它会将其安装为引导扇区;默认的 MBR 代码链会加载该 GRUB 引导扇区。

这就是您始终运行 GRUB 的原因——MBR 中的代码已被修改以执行此操作。您可以使用一些变体恢复默认的 MBR 代码fixmbr

但充其量,这只能证明您的恢复分区映像是好的,并且您可以通过普通 MBR 访问它。实际上,如果您证明您的恢复分区映像是坏的,也许这就是它无法通过 GRUB 工作的原因,如果它是好的,它就会工作。所以如果您能制作一个好的副本,那可能会更好。

由于某些奇怪的原因,恢复分区可能无法通过 GRUB 启动。工厂原始 MBR 中可能存在一些特殊的东西,这是恢复分区的先决条件。我已经避开了有这些东西的系统,所以我不能提供太多见解。

相关内容