将GRUB安装到Ubuntu分区

我的电脑有以下分区:
/dev/sda -- (我知道这不是一个真正的分区,而是引导加载程序)
/dev/sda1 -- (Windows 7 引导加载程序)
/dev/sda3 -- (Windows 7)
/dev/sda4 -- (数据分区,NTFS)
这意味着我有 /dev/sda2 作为空闲空间。
我不想改变计算机的主引导记录(MBR)。我希望 /dev/sda2 包含 GRUB 和 Ubuntu。所以理想情况下,当我打开电脑时,BIOS 会询问我是否要启动 Windows 7 还是 Ubuntu(或 Grub 或分区 2),我可以选择其中之一。但我希望 Grub 和 Ubuntu 在同一个分区上,这样它们就不会对 Windows 或 Windows 的引导加载程序/分区(sda3)产生任何干扰。
我该如何做到这一点?
注意:在格式化分区时,Ubuntu 不给我选择创建虚拟分区的选项,所以这使得事情变得更加困难。
我尝试将Ubuntu安装在/dev/sda2(我将其格式化为ext4),然后告诉Ubuntu安装程序将引导加载程序安装在/dev/sda2上。但是当我选择从BIOS的启动选项中选择“Ubuntu”时,它会加载一个黑屏,并显示“invalid arch independent ELF magic”。我想知道如何修复这个问题,或者告诉我的计算机Grub的位置。

3为什么您不想改变计算机的MBR? 最简单的方法就是允许将GRUB安装到MBR。这样,GRUB就能检测到您的Windows引导文件和Ubuntu引导文件,并且您可以从GRUB菜单中选择要启动的操作系统。 - matt davis
在我看来,你甚至不应该看到BIOS引导菜单。修复这个问题最简单的方法是重新安装GRUB,这次安装到MBR,并更新GRUB条目。 - Mahesh
4个回答

BIOS并不足够智能,无法询问您关于分区的情况,事实上,它对分区一无所知。在BIOS的角度来看,您的硬盘只是一系列512字节扇区。
当BIOS准备将控制权传递给引导加载程序时,它只是从磁盘中读取前512个字节,然后盲目地将控制权传递给该位置上的任何程序。这个程序(MBR引导加载程序)的工作就是加载操作系统(通常涉及从磁盘上的其他位置加载更复杂的引导加载程序)。
关键是,你存储在MBR中的引导加载程序意识到分区和其他内容。你可能有一个Windows引导加载程序或者GRUB。如果你找到一种方法来配置Windows引导加载程序将控制权传递给安装在/dev/sdaX的GRUB,那么你的方案将会奏效,尽管我从未听说过有人这样做。Windows对于能否加载其他操作系统并不是非常关心,你懂的。
如果您的计算机有两个硬盘,那么您可以实现您想要的。只需在其中一个上安装Windows,在另一个上安装Ubuntu,并在BIOS中切换它们。或者,也许可以将GRUB放在闪存驱动器上?这样做确实很酷 - 如果拔掉驱动器,Windows会启动;如果插入驱动器,则Ubuntu会启动(前提是“从USB启动”在启动设备列表中排在第一位)。

1你可以从Windows引导程序启动GRUB。我知道,因为我已经做过了。有几个编辑器可以用于Vista及更高版本的操作系统。在Windows XP上,你只需要编辑boot.ini文件即可。 - siride

我使用第三方引导管理器,这意味着我特别想要将grub安装到一个分区上。在安装过程中很容易处理这个问题,因为Ubuntu允许你将grub放在任何你喜欢的地方。然而,如果你想在事后进行操作,只需简单地执行以下命令: sudo grub-install /dev/sda1 --force 其中sda1是你想要安装的分区。

我可以问一下为什么你不想在MBR中安装GRUB,从而替换Windows引导程序吗?


在分区中安装GRUB并不被推荐,通常被认为是一个坏主意。最好让Ubuntu将GRUB安装在硬盘的MBR中。
然后,GRUB可以负责加载Ubuntu或Windows。这是简单、无害且推荐的方法。
如果你选择返回Windows并仅使用其引导程序,这个过程也是完全可逆的。
如果你决定将GRUB安装在MBR(正如你应该这样做),那么Boot Repair是一个不错的选择。

安装GRUB

要安装GRUB引导程序,请按照以下步骤进行操作。

在Ubuntu中打开终端,并运行以下命令:

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair
boot-repair

几秒钟后,Boot Repair的主窗口将打开。
点击“推荐修复”。
完成了!
重新启动以测试一切是否正常。
在计算机启动时按住Shift键,显示GRUB菜单,可以选择要启动的操作系统。

词汇表

引导加载程序:在任何操作系统运行之前执行的一段代码。引导加载程序用于引导其他操作系统。每个操作系统通常都有自己的引导加载程序。

GRUB(统一引导加载程序):一个支持多个操作系统并允许用户在引导时选择它们的引导加载程序包。这是Ubuntu的默认引导加载程序。

命令,命令行:传统的Unix环境,您可以通过输入命令告诉计算机要做什么。

终端:一个应用程序,允许您访问命令行。按下键盘快捷键 Ctrl Alt T 打开它。


有一些使用情况下,MBR 不是您想要安装 Grub 的位置,而是希望将其安装到一个分区中。是的,还有其他东西会指向这个分区,并在其中运行 Grub。如何通过命令行实现这一点呢? - Chris
据我所知,Grub不能启动Linux - 它只是启动Windows引导加载程序。这在我的机器上会导致Windows 7的休眠和睡眠出现问题。 - user3413723

只需下载EasyBCD即可轻松完成。使用它来编辑Windows引导程序非常简单。

3请解释一下如何安全地进行这个操作。 - nanofarad