我正尝试在我的 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.cfg
Grub2win 的配置中,但这样行不通 - 只是启动了 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”这个词)