我最近遇到了一个相对常见的问题,即 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 的建议尝试了Boot-Repair工具。我首先验证了 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.
关于可以提出什么建议?
了解问题所在的关键是需要指示 GRUB 处理
hd1
. 默认情况下, BIOS 引导至hd0
,并且在此工作站中,有一个 MBR 的残余物在该磁盘中安装后尝试加载 GRUB(因此引用/grub
而不是/boot/grub
)。解决方案是在 BIOS 中更改内部磁盘的引导顺序。
hd1
首先,引导过程在没有人工干预的情况下成功结束。在某些 BIOS 中,可能无法修改内部磁盘的引导顺序;在这种情况下,磁盘必须重新连接到板上。