我正在使用当前稳定的 Debian Stretch (9.0)。我的架构是AMD64。我的根分区和引导分区是 MD RAID 1 设备之上的 LVM 卷组。
根据我对文档的理解,取消注释
GRUB_DISABLE_LINUX_UUID=true
in/etc/default/grub
应该阻止 GRUB2 在/boot/grub/grub.cfg
.但是,即使我进行了更改,它仍然继续使用 UUID。
我不确定这是否是我的用户错误,但说明似乎很简单。
一些额外的评论。
- 还有一个文件
/usr/share/grub/default/grub
,其内容与 相同(相同的 md5sum)/etc/default/grub
。我不确定该文件的意义是什么。 - 我希望
/usr/sbin/grub-mkconfig
包含对 的检查GRUB_DISABLE_LINUX_UUID
,但我没有看到,尽管该脚本确实包含GRUB_DISABLE_LINUX_UUID
.有人可以向我解释一下这个脚本在哪里检查吗GRUB_DISABLE_LINUX_UUID
?
当然,如果有帮助的话,我可以发布更多详细信息。
背景:我之所以要改变这一点,是因为我的根 VG 的 UUID 发生了变化,并且我的机器拒绝启动,说 UUID 不存在。这是正确的。已经没有了。看尝试拆分 LVM2 RAID 1 镜像时无法确定同步状态错误这是怎么发生的。
Debian 错误报告:grub-common:在 /etc/default/grub 中设置 GRUB_DISABLE_LINUX_UUID=true 无法按预期工作。
答案1
(这个答案试图解释正在发生的事情并提供(可能的)补丁。)
看来有问题的代码位于grub-mkconfig_lib
当前 Debian 9 的第 169-182 行。
该错误的要点在于,尽管系统管理员/配置没有告知,但安装和启动仍坚持在启动过程的一部分中设置和使用 UUID。
结果可能无法加载 grub.cfg。例如,它总是grub-probe --target=fs_uuid /
在做grub-mkconfig_lib
;在我们的例子中应该是grub-probe --target=device /
或特定于代码,它应该使用$fs_hint
,而不是再次grub_probe
重做fs_uuid
GRUB_DISABLE_LINUX_UUID
我已经做了一个补丁,以在 Debian 9 配置为 true时禁用 UUID 的生成。它在这里工作。请测试一下。
我再次确认有问题的文件是:/usr/share/grub/grub-mkconfig_lib
我编写了一个补丁,如果GRUB_DISABLE_LINUX_UUID
设置为true
,它不包含search
尝试选择基于 UUID 的根的指令。然后,系统管理员应该了解插入新磁盘时选择此选项的后果。
补丁是 /usr/share/grub/grub-mkconfig_lib
通过以下方式完成的:
diff -u grub-mkconfig_lib.old grub-mkconfig_lib > grub-mkconfig_lib.patch
或者你可以在这里获取:
https://github.com/ruyrybeyro/grub-mkconfig_lib.patch
并应用它:
cd /usr/share/grub
patch -p0 < grub-mkconfig_lib.patch
基本上,从第 169 行开始,我添加了新的 if 和适当的缩进,以禁用根分区搜索取代设备选择的 UUID如果找到具有有效 UUID 的分区:
if [ "x${GRUB_DISABLE_LINUX_UUID}" != "xtrue" ] ; then
if fs_uuid="`"${grub_probe}" --device $@ --target=fs_uuid 2> /dev/null`" ; then hints="`"${grub_probe}" --device $@ --target=hints_string 2> /dev/null`" || hints= echo "if [ x\$feature_platform_search_hint = xy ]; then" echo " search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}" echo "else" echo " search --no-floppy --fs-uuid --set=root ${fs_uuid}" echo "fi" fi
fi
我测试了它,重新生成 grub 配置,更改 UUID,它可以顺利启动,这与之前的情况相反,我们会进入 grub。
PS:这似乎不限于Debian。在我将其指向后,grub-mkconfig_lib
我发现了一个相关的线程软呢帽