我有双启动系统(Windows XP 和 Ubuntu 12.04),运行良好,直到上周末 grub2 自动更新。
我一直使用 Windows 引导加载程序来选择操作系统,这样我就可以在硬盘上保留原始的 Microsoft MBR。安装程序将 grub2 放在 /boot 分区 ( /dev/sda3
) 中,系统 BIOS 可以在前 137mb 中看到它。Grub2 已安装到该分区的 PBR 中。我已修改 Windows boot.ini 文件以指向从 /boot pbr 复制的二进制文件,具体过程我暂时想不起它的 URL,但我相信双引导程序对此很熟悉。
我可以运行最新的 Ubuntu 12.04 live CD 并访问硬盘上的所有分区。我可以运行fdisl -l
并blkid
查看各个分区的所有详细信息。我不确定的是,如果 grub-install 确实是可行的方法,那么使用什么确切的咒语才能使 grub-install 只执行我想要执行的操作来修复启动分区。
顺便说一句,我确实查看了引导修复工具,但没有看到它提供将 grub 安装到硬盘 mbr 以外的其他位置的选项。我的引导分区是,/dev/sda3
而引导修复似乎允许重新安装 grub 的唯一选项是/dev/sda
,而不是/dev/sda3
。我认为这意味着引导修复只会安装到 MBR,而不是 的 PBR /dev/sda3
,尽管菜单标签有点神秘,我猜这里的含义。
我认为 grub-install 脚本是可行的,但我的第一次尝试产生了一条错误消息,提示它找不到目录/boot
。我怀疑实时 CD 会话及其单独的文件系统可能会造成混淆。我认为应该使用一种特定的语法来解决这个问题,但我的知识已经到了极限。
我不太愿意修改语法或脚本选项,因为这可能会对我的安装造成不可挽回的损害。如果一位专家程序员能建议一个 grub-install 命令行,/dev/sda3
当从 Ubuntu 12.04 live CD 会话中的终端命令行执行时,它将重新安装 grub2,我将不胜感激。出于教育目的,最好能解释一下特定语法的原理。
答案1
将 / 分区挂载在 /mnt 中,将 /boot 分区挂载在 /mnt/boot 中,然后 chroot 进入系统并运行dpkg-reconfigure grub-pc
并从菜单中选择安装位置。
sudo -s
mount /dev/sda2 /mnt
mount /dev/sda3 /mnt/boot
for f in dev sys proc dev/pts ; do mount --bind /$f /mnt/$f ; done
chroot /mnt
dpkg-reconfigure grub-pc