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

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

我正在使用当前稳定的 Debian Stretch (9.0)。我的架构是AMD64。我的根分区和引导分区是 MD RAID 1 设备之上的 LVM 卷组。

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

GRUB_DISABLE_LINUX_UUID=true

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

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

一些额外的评论。

  1. 还有一个文件/usr/share/grub/default/grub,其内容与 相同(相同的 md5sum)/etc/default/grub。我不确定该文件的意义是什么。
  2. 我希望/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://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 的分区

  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我发现了一个相关的线程软呢帽

相关内容