如何正确设置 Grub 以四启动 Windows、Mac OS X、Linux 和 FreeBSD?

Joe*_*Joe 8 boot grub ubuntu grub2

Grub对我完全疯了。在我将 Ubuntu 升级到 12.04 之前,我的四启动系统运行良好。由于 Ubuntu 覆盖了 Grub 的东西,我不得不用我的 Mac OS X 和 FreeBSD 条目修复它。在此之后,尝试启动 Mac OS X 给了我“无法打开文件”的错误,而 FreeBSD 给出了“没有这样的分区”的错误。Windows 和 Ubuntu 运行良好。

所以我再次尝试修复,因为我认为安装过程中一定出了问题。然后只有 Ubuntu 会启动。尝试启动 Windows 会给我错误“未指定参数”。

我再次尝试修复 Grub,因为我似乎每次都得到不同的结果。这一次,Grub 菜单中不再出现 Ubuntu,其他操作系统的错误也一样。

所以我启动到 Ubuntu 12.04 live CD 并使用推荐的设置运行启动修复。现在 Grub 被完全跳过,Windows 启动。

我完全不知道发生了什么,也不知道为什么每次重新安装 Grub 都会得到不同的结果。以下是我的分区设置方式:

  • sda1 - 存储驱动器,
  • sdb1 - 视窗,
  • sdb2 - Mac OS X,
  • sdb3 - FreeBSD,
  • sdb4 - 扩展,
  • sdb5 - Ubuntu,
  • sdb6 - 共享存储,
  • sdb7 - 共享存储,

这是我的 grub.cfg 文件:grub.cfg

小智 1

好吧,听起来你的 GRUB 安装被搞乱了,然后引导修复用 Windows MBR 覆盖了它。

启动至 Ubuntu 12.04 LiveCD 并从终端重新安装 Grub2。我假设您没有从 Grub Legacy 附带的某些较旧的 Ubuntu 进行升级。无论哪种方式,您都需要 Grub2,它默认随 Ubuntu 一起提供。

这些是您需要运行的命令,将 /dev/sdAX 替换为 Ubuntu 所在的分区(似乎是 /dev/sdb5 - 您可以使用“sudo fdisk -l”进行检查):

sudo su
mkdir /mnt/root

mount -t ext4 /dev/sdaX /mnt/root
mount -t proc none /mnt/root/proc
mount -o bind /dev /mnt/root/dev
mount -o bind /sys /mnt/root/sys

chroot /mnt/root /bin/bash

sudo grub-install /dev/sda
sudo update-grub
Run Code Online (Sandbox Code Playgroud)

基本上,它从 Ubuntu 加载必要的文件,然后使用它们来查找所有操作系统并设置 grub.cfg 文件。

有关安装 Grub2 的更多信息请参见此处