在/ etc / default / grub中设置GRUB_DISABLE_LINUX_UUID = true不能按预期工作

我正在使用Debian stretch(9.0),目前稳定.我的主题是AMD64.我的根分区和引导分区是MD RAID 1设备之上的LVM卷组.

根据我对文档的理解,取消注释

GRUB_DISABLE_LINUX_UUID=true

在/ etc / default / grub中应该阻止GRUB2使用/boot/grub/grub.cfg中的UUID.但是,即使在我进行了更改之后,它仍继续使用UUID.

我不确定这是否是我的用户错误,但说明似乎很简单.

另外几条评论.

>还有一个文件/usr/share / grub / default / grub,它有
与/ etc / default / grub相同的内容(相同的md5sum).我不是
确定该文件的重点是什么.
>我希望/usr/sbin / grub-mkconfig包含一个检查
GRUB_DISABLE_LINUX_UUID,但我看不到一个,尽管那个脚本
确实包括GRUB_DISABLE_LINUX_UUID.有人可以向我解释
这个脚本在哪里检查GRUB_DISABLE_LINUX_UUID?

当然,我可以发布更多详细信息.

背景:我有动力改变这个,因为我的根VG的UUID发生了变化,我的机器拒绝启动,说UUID不存在.这是正确的.它已经不复存在了.有关如何发生,请参阅Unable to determine sync status errror when trying split LVM2 RAID 1 mirror.

Debian bug报告:grub-common: Setting GRUB_DISABLE_LINUX_UUID=true in /etc/default/grub does not work as expected.

解决方法:

(这个答案试图解释发生了什么,并提供(可能的)补丁.)

在当前的Debian 9中,似乎有问题的代码在grub-mkconfig_lib第169-182行中.

该错误的一点是,尽管没有被sysadmin /配置告知,安装和启动仍然坚持为启动过程的一部分设置和使用UUID.

可能无法加载grub.cfg.例如它始终在grub-mkconfig_lib中执行grub-probe –target = fs_uuid /;在我们的例子中应该是grub-probe –target = device /或者是特定于代码的,它应该使用$fs_hint,而不是使用fs_uuid再次重做grub_probe

我已经做了一个补丁来禁用在Debian 9中将GRUB_DISABLE_LINUX_UUID配置为true时禁用UUID的生成.它可以在这里工作.请测试一下.

我再次确认有问题的文件是:/usr/share / grub / grub-mkconfig_lib

我写了一个补丁,如果GRUB_DISABLE_LINUX_UUID设置为true,它不包括试图选择基于UUID的root的搜索指令.然后,系统管理员应该了解插入新磁盘时选择此选项的后果.

/usr/share / grub / grub-mkconfig_lib的补丁完成了:

diff -u grub-mkconfig_lib.old grub-mkconfig_lib > grub-mkconfig_lib.patch 

并在这里:https://jpst.it/10_iY

或者你可以在这里得到它:

https://github.com/ruyrybeyro/grub-mkconfig_lib.patch

并申请:

cd /usr/share/grub
patch -p0 < grub-mkconfig_lib.patch

基本上,从第169行开始,我添加了新的if和正确的缩进,以禁用UUID的根分区搜索,如果找到具有有效UUID的分区,则UUID将取代设备的选择:

  if [ "x${GRUB_DISABLE_LINUX_UUID}" != "xtrue" ] ; then   

06003

  fi

我测试了它,重新生成了grub配置,更改了UUID,并且它顺利启动,与之前的情况相反,我们将其放入grub中.

PS:这似乎不仅限于Debian.在我将其指向grub-mkconfig_lib之后,我发现了一个关于fedora的相关主题

上一篇:os-prober需要什么Linux内核功能才能找到Windows 8安装?


下一篇:linux – 使用grub2启动Iso