我刚刚在 Debian 系统(SID)上启动时遇到了一系列问题,突然它报告:
/grub/i386-pc/normal.mod not found.
最终我把它找回来了(fsck 将很多东西从 /boot 移到了lost+found 中,我需要通过 grub-install 进行替换)
但在一切正常后,我重新安装了各种 grub-* 软件包(以防它们现在处于丢失+找到状态)。我注意到 grub.cfg 有许多不同之处,其形式如下:
< set root='hd2,msdos1'
---
> set root='hd0,msdos1'
事实上,我的 /boot (和 /(root))设备现在是 /dev/sdc (hd2) 而不是 /dev/sda (hd0)。一方面我不明白它是如何/为什么改变的,但另一方面我意识到 /dev/sdX 名称不是固定的,并且可以从一个启动更改为下一个启动。因此,考虑到这一切,我的问题是:
grub.cfg 如何包含以下条目:
set root='hd2,msdos1'
因为(没有映射文件)这相当于 /dev/sdc ...如果在下次启动时该磁盘显示为 sdb 或 sda 该怎么办?
ABTW。最初的原因可能是 /boot 损坏...我注意到它是 ext2 ,我不能使用 ext4 吗? ...这不是现在的默认设置吗? [ 漏洞985470 ]
答案1
它应该看起来像
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' f19c92f4-9ead-4207-b46a-723b7a2c51c8
else
search --no-floppy --fs-uuid --set=root f19c92f4-9ead-4207-b46a-723b7a2c51c8
fi
所以初始值只是一个可选的提示。它真正做的是搜索文件系统 UUID。
答案2
这是grub-probe
(https://www.gnu.org/software/grub/manual/grub/html_node/Invoking-grub_002dprobe.html) 将/dev/sda1
名称转换为(hd0,msdos1)
.
但如果转换失败,您可以使用设备映射文件来帮助它(https://www.gnu.org/software/grub/manual/grub/html_node/Device-map.html#Device-map)。
您可以输入Grub 命名方案grub-probe -t drive /
来获取驱动器。/