链接引导加载程序以进行不寻常的设置

链接引导加载程序以进行不寻常的设置

我正尝试在我的 PC 上实现一些不寻常的想法。

我总共有 6 个分区:

  • 第一个适用于 Windows 7(我的基本操作系统)
  • 第二个适用于 Ubuntu
  • 第三和第五个是 Windows 存储分区
  • 第四个是 Ubuntu 的 /home
  • 第六个是带有一些极端情况工具的恢复分区。

我的想法是这样的:

  • Windows 是默认启动选项
  • Ubuntu 可在本机和 Windows 托管的 VM 内启动
  • GRUB2 可以从最后一个分区启动一些工具

到目前为止,它运行良好。我的 MBR 和第一个 BS 未受影响,是 Windows 默认扇区。第二个 BS 安装了 GRUB2,用于启动 Ubuntu。最后一个分区上还有 GRUB4DOS 和 memdisk,它们是从 Grub2win 链式加载的。VM 上有一个与 GRUB 连接的虚拟驱动器,因此 Ubuntu 分区是可启动的。

因此启动过程如下:

  • 视窗:MS BootMgr->Windows 7(默认)
  • 乌本图:MS BootMgr->Grub2win->GRUB2->Ubuntu
  • 工具:MS BootMgr -> Grub2win -> GRUB4DOS -> (一些其他工具)

我想要实现的目标是让(某些) GRUB2 成为第一个启动的启动管理器,最好是当前的 Grub2win。完美的情况是:

  • 视窗:静态 GRUB2 -> MS BootMgr -> Windows 7(默认)
  • 乌本图:静态 GRUB2 -> Ubuntu 的 GRUB2 -> Ubuntu
  • 工具:静态 GRUB2 -> GRUB4DOS -> (工具)

问题是我不知道如何安装另一个独立的 GRUB2 或如何将 Grub2win 设为我的默认启动管理器(如果我做对了,那甚至是不可能的)。

将 BootMgr 的超时设置为 0 并将 Grub2win 设置为其默认启动选项将使 Grub2win 几乎成为第一个启动选项,但这样就无法启动 Windows。解决方案是直接启动 Windows(不使用 BootMgr),但据我所知,这是不可能的。

但是,Ubuntu 似乎对其 GRUB2 也做了同样的事 - 它只是跳过 BootMgr 并启动 Windows。我尝试将该条目复制到/boot/grub/grub.cfgGrub2win 的配置中,但这样行不通 - 只是启动了 BootMgr。

我不想使用 Ubuntu 的 GRUB 的原因是每次update-grub在虚拟机中运行时,Windows 都会从列表中消失。发生这种情况的原因是虚拟机只能访问两个 Linux 分区,因此虚拟化的 Ubuntu 看不到 Windows 分区。

因此,目前我的观点是直接从 Grub2win 启动 Windows,就像 Ubuntu 的 GRUB2 那样。你们能帮我吗?

编辑:还有一些事情需要考虑:

  • GRUB4DOS 是某些工具集的组成部分,因此基本上是不可触碰的。我不想在每次更新工具集时都做任何额外的工作。
  • 我需要某种方法从 ISO 映像启动 - 目前我正在使用 Grub2win + memdisk。
  • Ubuntu GRUB 的菜单在链式加载和在 VM 上时完全相同。由于 VM 仅连接了 2 个 Ubuntu 分区,因此我只希望该菜单中包含与 Ubuntu 相关的选项。

答案1

我知道您要尝试做什么(单级启动菜单,而不是两个单独的菜单),并且想提出一个达到相同效果的替代解决方案:

保持 bootmgr 为主菜单,不要将超时设置为零。使用易BCD添加两个单独的条目:一个 Ubuntu 条目和一个 GRUB4Dos 条目(EasyBCD 有自己的 Grub4Dos 副本,称为 NeoGrub)。

确保从 Ubuntu GRUB 菜单中删除除 Ubuntu 之外的所有内容。配置 EasyBCD 的 NeoGrub 菜单以模仿您现有的 Grub4Dos 菜单。

您将拥有一个单级菜单,可以在其中启动 Windows、Ubuntu 或 GRUB4Dos。

您将永远不需要更新 Grub4Dos/NeoGrub,并且您的启动将通过 Ubuntu 升级和内核升级进行,而无需修改任何东西。

答案2

问题是我不知道如何安装另一个独立的 GRUB2

安装独立的 GRUB2 非常简单(要始终让它指向当前的 Linux/Ubuntu 内核,请参阅我的问题)。

进行足够的备份(dd 是你的朋友)在你开始之前!

[我希望这篇文章简单易懂,这样每个不熟悉 GRUB 配置的人都可以使用它来安装独立的 GRUB。如果有人对如何改进这篇文章有什么建议,请告诉我。]

创建一个单独的启动分区,您将在其中安装 GRUB2,而不安装任何其他东西。它不会安装在您已安装的任何操作系统上,它仅用于选择第一个系统。您最终可能必须进行一些重新排列(移动分区以腾出空间,甚至可能销毁并以不同的顺序重新创建它们)。我喜欢将 GRUB 分区作为磁盘上的第一个分区(或第二个分区,如果使用 GPT,则在 BIOS 分区之后),大小为 50 MB(可以是 5,但硬盘很大)。首先安装所有操作系统,因为它们将覆盖 MBR。请勿在任何操作系统中使用 /dev/sda1。

启动一些带有 GRUB2 工具的实时系统。我推荐 Parted Magic(您也可以使用它来进行所有分区)。

  • 注意不要将 sda1 写成 sda2 之类的。只要打错一个字,你的硬盘就可能被清空(当然,你有完整的备份,所以不会丢失任何东西)。
  • 用 ext2 格式化 /dev/sda1。

mkfs.ext2 /dev/sda1

  • 挂载GRUB分区并安装GRUB2:

cd /mnt

创建目录 sda1

挂载/dev/sda1 sda1

grub-install --boot-directory=/mnt/sda1 /dev/sda

  • “安装完成,未报告错误。”

光盘 SDA2

ls

  • “grub/ 失物招领/”
  • 手动创建一个新的菜单配置(也可以让 GRUB 生成一个)。

vi /grub.cfg

菜单项“Windows 7(加载器)”--class windows --class os {

insmod    part_msdos

insmod    ntfs

set       root='(hd0,msdos2)'

chainloader +1

}

菜单项‘Debian (或 Ubuntu)’{

insmod    part_msdos

insmod    ext2

set       root='(hd0,msdos3)'

echo      'Loading Linux...'

linux     /boot/vmlinuz root=/dev/sda6 ro quiet <- current vmlinuz file name

echo      'Loading initial ramdisk...'

initrd    /boot/initrd.img <- current initrd.img file name

}

menuentry ‘Fedora(只是另一个例子)’{

insmod    part_gpt

insmod    ext2

set       root='(hd0,msdos3)'

echo      'Loading Linux...'

linux     /boot/vmlinuz-3.7.3-101.fc17.x86_64 root=UUID=[UUID of /dev/sda3] ro rd.md=0 rd.lvm=0 rd.dm=0 SYSFONT=True  KEYTABLE=us rd.luks=0 LANG=en_US.UTF-8

echo      'Loading initial ramdisk...'

initrd    /boot/initramfs-3.7.3-101.fc17.x86_64.img

}

  • 我尝试使用 Parted Magic 11.11.11(幸运的版本号),其中的 GRUB 工具仅在 /dev/sda1 上创建了“grub”目录。其他版本可能会创建“grub2”目录。无论哪种方式,您都可以将 GRUB2 配置文件放入其中(GRUB2 看起来像一个 Shell 脚本,在 GRUB1 中,它是一个简单的 menu.lst,但那是很久以前的事了)。
  • 将“[/dev/sda3 的 UUID]”替换为 ls -l /dev/disk/by-uuid | grep sda3 告诉您的内容。
  • 将“/boot/vmlinuz”替换为真实文件名(在 /dev/sda3,您的 Linux 分区中)。
  • 用同样的方法替换“/boot/initrd.img”。
  • 卸载并重启。您的计算机将启动一个简单的 GRUB2,列出您指定的条目(“Windows 7(加载器)”、“Debian(或 Ubuntu)”)。如果您操作正确,您将能够直接从该启动 Windows 和 Linux独立的GRUB。
  • 同样,Linux 条目指向特定的内核版本。它必须手动更新(挂载 /dev/sda1 并修改 grub/grub.cfg),这是一个主要缺点。同样,请参阅关于设置 GRUB 的另一个问题为了那个原因。

(哈哈,超级用户删除了所有“have”这个词)

相关内容