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盒子中,拥有2甚至3个内部硬盘并不罕见。事实上,这可能是一个最理想的设置,因为它允许您将其中一个驱动器的MBR专门用于Grub。我们已经接触了一些关于Grub的稍微复杂的问题,如果我们能做到,我们不想在这里过度复杂化。编写关于Grub的文章从来都不是简单的,因为涉及更多内容:(分区、安装、其他操作系统.....)。如果您有2个硬盘并打算使用Windows操作系统,请尝试将其中一个驱动器专门用于Windows,或者至少让Windows拥有硬盘的第一部分。Windows会将它的引导代码安装到该硬盘的MBR。或者,如果您向Windows PC添加了一个新的硬盘,最好只是让原始硬盘保持不变,并将所有其他内容安装到新的硬盘/硬盘上。关键在于您的BIOS。您需要调整BIOS,以便新的硬盘是首先启动的硬盘。安装Linux,但在此情况下,我总是建议自定义安装,不接受任何默认设置,而是手动分区新的硬盘,将挂载点设置为您的Windows驱动器,并将Grub安装到新硬盘的MBR。Linux安装程序在写入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,Vista 将无法安装 Service Pack。我不确定,但即使 MBR 没有被触动,只是 Vista 分区上缺少引导标志,Vista 也可能无法安装 Service Pack。如果你使用 Windows CD/DVD 修复 Windows 启动扇区,或者如果 grub 不在 MBR 上,只需将引导标志切换回支持 Windows,那么你应该能够安装 Service Pack。如果你缺少 Windows Vista DVD Vista 修复 DVD 完成后,你可以重新安装 Grub,如前所述。Windows 7 似乎在多引导环境中遵循 Vista 的特性。它有 bootmgr 文件。但我无法测试 Windows 7 中 Service Pack 的安装。

我运行了一个 Windows 7 的测试安装,然后让 openSUSE 安装程序执行它的操作。正如我预期的那样,openSUSE 完美地处理了它。它缩小了 Windows,从获取的空间创建了一个扩展分区,并在扩展空间内创建了 3 个分区。以下是一些屏幕截图

最后

在准备本教程时,我实际上已经尝试并测试了所有这些步骤。我个人总是手动设置我的分区,并使用 MBR 来安装 Grub。但本指南侧重于如果你让安装程序自行操作会发生什么!持续地,用户报告由于默认安装而出现问题。我试图成为一个完全的“新手”,并使整个安装“搞砸”——但是,诚实地说,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 是否允许安装 Service Pack。但我的怀疑是“否”。因为引导标志位于扩展分区。Windows 现在管理 Service Pack 安装的方式,它期望在 Windows 引导分区上找到引导标志。在不可避免的重新启动过程中会发生错误,这会将引导权交回 grub,而 grub 会加载 Windows 并恢复 Service Pack,但会出错。在我的测试中,我没有遇到任何恢复 MBR 和 Windows 引导代码、重新安装 grub 和更改引导标志的麻烦。你可以做任何你想要的事情。我唯一担心的是,这对于普通用户来说有点太复杂了。我没有追求更好的满足 Windows 限制的替代引导方法。