SDB:关于 GRUB 的一切

跳转到:导航搜索
Icon-obsolete.png
本文或章节指的是OpenSUSE 11.1版本,现在已过时!
请参阅本文的讨论页面以获取更多信息。
本文是从旧wiki迁移过来的,包含旧信息:All About Grub



管理Grub安装

如果您需要关于GRUB或与Windows多重引导的帮助,请继续阅读。这篇文章很长,但请耐心阅读这个困难的主题。花时间仔细阅读。在这里您可以学习如何管理/修复使用Grub引导Linux和Windows的计算机。即使一切看起来都丢失了,您的计算机无法启动 - 概率是它实际上很容易修复。


如果您有一台Windows PC或笔记本电脑,并想安装openSUSE,首先应该备份您无法承受丢失的任何内容。然后碎片整理您的(C:\)驱动器。害怕了吗?您应该害怕。微软让您使用其他操作系统 (OS) 变得非常棘手。本教程中使用的图片来自虚拟机,因此分区相对于您期望的要小。但它们可以清楚地说明硬盘如何分区以及如何操作它们。本教程的一些特点包括

了解您的硬盘

这是一张显示典型Windows硬盘的图片(您的可能不同)

pic1v.png

偶尔您的Windows PC会有2个分区,特别是OEM PC。如果您拥有Windows安装CD/DVD,则通常是1个分区。在本完整的教程/指南中,您将看到XP作为2分区设置,Win7作为单个分区。(忽略分区的大小,这里的示例来自虚拟机仅用于说明。实际上您的分区会大得多。)

这个

pic2i.png

注意引导标志]与前面只有1个重要区别的图片相同 - 引导标志。Windows安装完成后,该标志将存在。请记住这一点,因为它很重要。请注意Linux如何识别分区。在这种情况下,hda,或者更有可能是sda。分区基本上将您的硬盘分成几个部分(这几乎就像您现在有很多硬盘,只是更小。这有点过于简化,但对于外行来说已经足够了。)这里两个分区都是主分区,任何一个驱动器最多可以有4个主分区。稍后我们将讨论如何使用扩展分区(本身就是一个主分区)拥有超过4个分区,但它们都不会都是主分区。

这个:Windows_My_Computer是Windows查看您的分区的方式。即使恢复D:在分区表中位于XP本地磁盘C:之前。如果您是Windows用户,请停止以Windows的方式思考您的分区。这完全不合逻辑,会使您在Linux安装过程中感到困惑。

硬盘被视为sd或hd,例如sda1或sdb1或hda1

以sda1为例:这是从桌面看到的。但是对于Grub来说,它是(hd0)。(hd0,0) = 分区表中的第一个驱动器的第一个分区。

计算机将例如sda的第二个分区称为sda2,但对于Grub = (hd0,1)

安装openSUSE 11.1

那么,让我们说,我们现在准备安装一个Linux发行版,并希望grub管理Linux和Windows的引导。鉴于上述情况,如果您允许安装像我下面的图片一样进行(openSUSE 11.1),Linux通常会提出以下建议:注意:Parted Magic将分区引用为hda,但openSUSE引用为sda。请记住在本教程中,例如sda1和hda1是相同的。

"pic4.png"

如果您是经验丰富的用户,请暂时忽略您不喜欢或认为不正确的任何此建议的功能。

注意“引导”部分中的提案。Grub被放置在hda3(扩展分区)中。

pic5r.png

这很好,因为它保留了Windows引导代码。但是,稍后您会看到引导标志我们之前提到的将从hda2移动到hda3。有时,安装程序没有完全正确地完成。在本测试案例中,我在编写本教程时运行,安装程序正确地将grub安装在hda3中,并成功地在引导菜单中包含了一个Windows选项。这是openSUSE完成安装后的分区图片。注意我们之前提到的“引导”标志现在位于hda3上。

pic6.png

hda3和它包含的逻辑分区的所有空间都是通过缩小hda2实现的。是的,扩展分区实际上只是逻辑分区的容器,hda5和hda6就是逻辑分区。逻辑分区允许使用超过4个主分区的许多分区。值得再次提及的是,在进行任何Linux安装之前,您应该碎片整理Windows。

来自Windows的相应图片显示情况略有不同,引导标志位于hda2上。

pic7m.png

(Windows不完全正确,不是吗?)

更多关于Grub安装 - 高级用户

本节还提供了一些指导,如果grub无法正确引导,可能会有用。

我们已经解释过,在本例中,Grub被放置在hda3中,安装程序将引导标志从hda2切换到hda3。这意味着,当计算机启动时,它首先查找的是hda3,因此Grub菜单出现。现在,为了说明Grub以这种方式安装的优势,让我解释一下:仅供实验 - 或者如果您需要修复Grub:如果您要启动Parted Magic并将引导标志改回hda2,则重新启动机器时Windows将启动,将不会有Grub菜单。Linux仍然安装,您将能够在Windows的计算机管理部分中看到分区。将标志改回hda3,要么像以前一样出现Grub菜单,可以选择引导openSUSE或Windows。或者您需要像这样修复grub

如果您有Linux Live CD,从它启动并登录。然后打开一个控制台窗口并输入su,您将获得root权限的命令行提示符并准备好继续。另一方面,如果您有openSUSE安装DVD,从它启动,并在第一个菜单选项中选择“救援系统”选项。这将启动一个基本的Linux Live操作系统,并将您带到登录提示符。输入用户名root,您将获得root权限的命令行提示符并准备好继续。无论您以何种方式启动(openSUSE安装DVD或Linux Live CD),当您在root命令行提示符处时,首先找到包含openSUSE引导加载器的分区。然后使用指向该分区的指针重新安装Grub。首先找到openSUSE安装


您输入这个 ---------------- grub

计算机返回如下 ---- grub>

您输入这个 ---------------- find /boot/grub/menu.lst

计算机返回如下 ---- (hd0,5)

这里,(hd0,5)是Grub指向我的openSUSE安装的指针。您的指针将与我的示例(hd0,5)不同。用您的值替换我的示例(hd0,5)。现在您有了指针,像这样继续

您输入这个 ---------------- root (hd0,5)

计算机返回如下 ---- 文件系统类型为ext2fs,分区类型0x83

您输入这个 ---------------- setup (hd0)

您会看到几行如下内容 --- 正在检查/boot/grub/stage1是否存在 ... 是 计算机最终返回此-- 成功.......完成

您输入这个 ---------------- quit

您输入这个 ---------------- reboot


计算机应该重新启动并向您呈现Grub引导菜单,您可以从中引导到openSUSE或Windows。pic8f.png

多个硬盘和Grub

这种场景最有可能发生在台式PC/Linux Box上,拥有2个甚至3个内部硬盘并不常见。事实上,这可能是一个最理想的设置,因为它允许您将其中一个驱动器的MBR专门用于Grub。我们已经接触了一些关于Grub的稍微复杂的问题,如果我们能做到,我们不想在这里过度复杂化。编写关于Grub的文章从来都不是简单的,因为涉及更多内容:(分区、安装、其他操作系统.....)。如果您有2个硬盘并打算使用Windows操作系统,请尝试将其中一个驱动器专门用于Windows,或者至少让Windows拥有硬盘的第一部分。Windows会将它的引导代码安装到该硬盘的MBR。或者,如果您有一台Windows PC,您添加了一个新的硬盘,最好只是让原始硬盘保持不变,并将所有其他内容安装到新的硬盘/硬盘上。关键在于您的BIOS。您需要调整BIOS,以便新的硬盘是首先启动的硬盘。安装Linux,但在此情况下,我总是建议自定义安装,不接受任何默认设置,而是手动分区新的硬盘,将挂载点设置为您的Windows驱动器,并将Grub安装到新硬盘的MBR。安装程序可能会在写入Windows的菜单时获得错误的chainloader代码。但不要惊慌,如果需要,Windows仍然可以引导,方法是更改BIOS设置将Windows硬盘放回启动顺序中的第一位。但我们不希望这样,我们想使用Grub,所以我们需要调整menu.lst文件,通常位于/boot/grub/menu.lst 如果有2个硬盘,它可能需要如下所示

title WIN XP/Vista/7
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,0)
chainloader +1

title WIN XP/Vista/7
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,0)
chainloader (hd1,0)+1

map函数用于Windows安装最初在驱动器1上,现在已物理移动到驱动器2。或者添加了一个sata驱动器,驱动器1变成了驱动器2 - 无论如何。因此,在某些情况下,驱动器1上有一个boot.ini用于windows xp,如下所示

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOW S
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect


现在这是您需要map函数的原因。片段“rdisk(0)partition(1)”表示磁盘0的分区1,但从那时起已经发生了变化,现在实际上是磁盘1的分区1。因此,您使用map函数来欺骗操作系统将物理驱动器1视为虚拟驱动器0。只有这样xp才能启动。

因此,您需要带有98/2000/xp的map函数,因为有像rdisk(x)partition(y)这样的片段。

现在是关键。Vista使用不同的引导加载程序,不包含rdisk(x)partiton(y)片段。因此,它既不使用也不需要map函数。它忽略它。它启动 - 它可以正常工作,而无需它,因为位置的更改对新的vista加载程序无关紧要。


如果您真的想验证哪个是引导加载程序分区,请找到包含引导加载程序文件的分区:在Windows 2000/XP中,它们是ntldrntdetect.comboot.ini。Vista的可见引导加载程序文件是bootmgr和目录boot。在Vista或Windows 7中不需要map函数。

title Vista
rootnoverify (hd1,0)
chainloader (hd1,0)+1

title Vista
rootnoverify (hd1,0)
chainloader +1

可以输入更详细的信息:info grub在konsole终端中。或者访问:https://gnu.ac.cn/software/grub/manual/grub.html

您可能还感兴趣:http://www.supergrubdisk.org/

和:http://opensuse.swerdna.org/suseboot.html
http://opensuse.swerdna.org/susebootfive.html

更多关于Windows Vista和Windows 7

当然,我知道Vista如果将grub写入MBR,将无法安装服务包。我不确定,但即使MBR未触动,只是Vista分区上缺少引导标志,Vista可能也无法安装服务包。如果您使用Windows CD/DVD修复Windows引导扇区,或者如果grub不在MBR上,只需将引导标志切换回支持Windows,您应该能够安装服务包。如果您缺少Windows Vista DVD Vista Repair DVD 完成后,您可以重新安装Grub,如前所述。Windows 7似乎在多重引导环境中遵循Vista的特征。它有bootmgr文件。但我无法在Windows 7中测试服务包安装。

我运行了一个Windows 7安装测试案例,然后让openSUSE安装程序完成它的工作。正如我预期的那样,openSUSE完美地管理了它。它缩小了Windows,从获取的空间创建了一个扩展分区,并在扩展空间内部创建了3个分区。这是一系列屏幕

最终

在准备本教程时,我已经实际测试了所有这些步骤。我个人总是手动设置分区并为 Grub 使用 MBR。但本指南重点介绍的是,如果您让安装程序自行完成,它会执行什么操作! 持续不断地,用户报告由于默认安装而出现问题。我试图扮演一个完全的“小白”,让整个安装“搞砸”——但是,说实话,SUSE 在正确处理这件事方面做得很好。


鸣谢:@swerdna(摘录了他教程中的片段)

高级用户的补充信息

您可能不知道,可以在逻辑分区中安装 Windows (XP, Vista, 7)。但您必须有一个合适的 primay 分区,Windows 才能在其上放置启动代码。以下是我为另一位版主运行的一个测试用例的副本


我首先使用 Parted Magic 创建分区。
500MB NTFS 主分区
19.7GB 扩展分区

  • 500MB 交换分区
  • 5.8GB root ext3
  • 1.2B /home ext3
  • 12GB NTFS 用于 Windows 7

然后我使用 WIN XP 光盘再次将准备好的 Windows 7 分区格式化为 NTFS。(这可能不是必需的,但在之前的测试中,我发现 Windows 虽然可以看到 Parted Magic 创建的 NTFS 分区,但它不喜欢某些东西,因此拒绝安装)。


然后启动 Windows 7,我到达读取和列出分区的位置。您会注意到它相当不足的呈现方式: 1initiallpartitionsasse.png

安装继续并最终完成,到达 W7 桌面。

接下来我启动 Parted Magic 查看

2w7installedinlogical.png


Windows 7 已安装,启动标志位于 hda1 上,正如预期的那样。我挂载 hda1,在文件浏览器中打开它,看到这个 W7 启动代码

w7bootcodeinhda1.png


现在我启动 openSUSE 11.1 DVD 并手动管理分区,如图所示

3partitionssuseinstalle.png

我为 Windows 7 设置了一个挂载点。手动设置的原因:openSUSE 安装程序对建议方案一团糟,所以我选择了手动。最终方案,包括“启动”信息,在此图片中

4installbootingproposal.png

请注意,grub 在建议中显示为进入 hda2(扩展分区)——我接受此并允许安装。安装和最终配置完成,我们到达 openSUSE 桌面。


SUSE 安装后 Parted 视图

postsuseinstallpartitio.png


重新启动,从 openSUSE 安装程序放入 /boot/grub/menu.lst 的未更改的菜单中,我选择 Windows,它有效。menu.lst 中的条目是
rootnoverify (hd0,0)
chainloader +1


好的。所以我在想,如果 grub 位于 MBR,会怎么样。所以我手动执行此操作,在菜单中包含一个与上述相同的 Windows 条目。重新启动 openSUSE 没问题——Windows 7 没问题。


因此,结论与 @swerdna (John) 和我在 XP 上运行的测试中发现的结论大致相同。您可以在逻辑分区中安装 Windows 7,但您需要一个合适的分区,Windows 才能在其上放置启动代码。Windows 7 和 Vista 在安装和管理启动方面非常相似,我不能确定它们是否完全相同。我也不确定另一个方面:当 MBR 未被干扰并且 grub 仅位于扩展分区时,Windows 7/Vista 是否允许服务包安装。但我的怀疑是“否”。因为启动标志位于扩展分区。Windows 现在管理服务包安装的方式是,它期望在 Windows 启动分区上找到启动标志。在不可避免的重新启动期间会发生错误,这当然会将启动权交还给 grub,而 grub 会加载 Windows 并恢复服务包,但会出错。在我的测试中,我没有遇到任何恢复 MBR 和 Windows 启动代码、重新安装 grub 和更改启动标志的麻烦。您可以做任何您想做的事情。我唯一担心的是,这对于普通用户来说有点太复杂了。我没有追求更好的满足 Windows 限制的替代启动方法。