永久修复 GRUB 文件夹的绝对位置

永久修复 GRUB 文件夹的绝对位置

我最近遇到了一个相对常见的问题,即 16.04 安装程序错误配置了 GRUB 文件夹的位置。在这种情况下,系统会启动到救援 shell,并显示以下消息:

error: file '/grub/i386-pc/normal.mod' not found.
Entering rescue mode...
grub rescue>

这意味着 GRUB 能够启动,但它在错误的地方寻找模块。众所周知的解决方案是指示 GRUB 动态定位其模块的位置。在我的例子中,这是:

grub rescue> set prefix=(hd1,msdos2)/boot/grub
grub rescue> insmod normal
grub rescue> normal

这样可以成功恢复启动过程。但是,下次启动系统时,GRUB 会再次返回救援控制台,并且必须再次指示其模块的位置。我重新安装了 GRUB,但问题仍未解决。

如何才能永久地告知 GRUB 其模块的正确位置?

更新: 我跟着WinEunuuchs2Unix 的建议并尝试了启动修复工具。我首先验证了 GRUB 的位置,它显然是正确的:/boot/grub在 上sdg2

然后我运行了推荐修复诊断,结果显示此输出。这里再次报告了正确的 GRUB 位置:

sdg2: __________________________________________________________________________

    File system:       ext4
    Boot sector type:  -
    Boot sector info: 
    Operating System:  Ubuntu 16.04.3 LTS
    Boot files:        /boot/grub/grub.cfg /etc/fstab 
                       /boot/grub/i386-pc/core.img

但是,报告的最后有一个错误,指出了一个问题device.map

grub-probe: error: cannot find a GRUB drive for /dev/sdi1.  Check your device.map.
Unhide GRUB boot menu in sdg2/boot/grub/grub.cfg

An error occurred during the repair.

对此您能提出什么建议吗?

答案1

理解错误的关键是需要指示 GRUB hd1BIOS 默认启动至hd0,并且在该工作站中,存在 MBR 的残余,该残余试图在磁盘上安装 GRUB 后加载该 MBR(因此引用了/grub而不是/boot/grub)。

解决方案是在 BIOS 中更改内部磁盘的启动顺序。hd1首先,启动过程无需人工干预即可成功完成。在某些 BIOS 中,可能无法修改内部磁盘的启动顺序;在这种情况下,必须将磁盘重新连接到主板。

相关内容