“警报! UUID=xxx 不存在。掉进壳里!”我在哪里/如何更改此 xxx 值?它存储在 grub 配置中的哪里?

“警报! UUID=xxx 不存在。掉进壳里!”我在哪里/如何更改此 xxx 值?它存储在 grub 配置中的哪里?

我的服务器上有一些磁盘(用于 RAID)和一些启动分区来测试各种发行版。有时我有一个最近的(10 buster)Debian 32 位和一个最近的(10 buster)Debian 64 位,由于某些原因,我决定将 Debian 64 位移动到较低的分区(使用 dd,设置一个新的分区) UUID 并在该分区的 /etc/fstab 中更新它),然后我在我之前移动 Debian 的分区上安装了最新的(20.1 Ulyssa)Linux Mint Cinnamon。我没想到它会带来问题,因为安装 Linux Mint 会运行 update-grub 并为 Debian 64 获取我的新分区,但是,当时我的 Debian 64 位停止工作。提示找不到根分区。

对此有一些评论:Debian 安装过程非常好地警告我,可能存在非 UEFI 分区,如果我尝试在 UEFI 模式下安装 grub(并建议在 BIOS 中启动),这些分区可能无法工作。兼容模式)-)Mint 似乎不太关心这一点。所以 mint 在 UEFI 模式下配置了我的 grub。然而,奇怪的是,它阻止了我的 Debian 64 的工作,但没有阻止我的 Debian 32 的工作。

我必须承认 grub 过程对我来说一直不清楚,但我不明白的是,尝试从我的 Debian 32 重新安装和更新 grub 并没有解决问题,并尝试找到一个带有两个分区(Debian 32 和 64)上的 /etc 和 /boot (包括子目录)中的失败 UUID。最后,我通过在启动时编辑 Debian 64 的 grub 命令行,然后从 Debian 64 重新安装和更新 grub 解决了这个问题。

然而,我真正想了解的是这个 UUID 的存储位置(为什么我找不到它),以及为什么我无法从 Debian 32 分区解决这个问题。

编辑:为了让自己清楚:我能够通过在引导期间从 grub 菜单编辑内核参数,用 root=/dev/sdxx 替换 root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 来引导在后续的 grub 恢复过程中未进行修改。但是,我无法在 /etc 和 /boot 中的任何未压缩文件中找到此 UUID 值(既不是 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 也不是 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)。

EDIT2:好的...我正在寻找的是在 /boot/grub/grub.cfg (感谢Archemar),但我没有找到它,因为我在搜索中摸索了我的正则表达式

find /boot /etc -type f -print0 | 
    xargs -0 grep -li 'a9c85b02-?751e-?48b5-?b85e-?df60d20b5d3e' 

grep 正则表达式无法识别?我应该使用 {0,1} 代替...:'(

find /boot /etc -type f -print0 | 
    xargs -0 grep -li 'a9c85b02-\{0,1\}751e-\{0,1\}48b5-\{0,1\}b85e-\{0,1\}df60d20b5d3e' 

但是,它并没有解释为什么当我从 debian 32 分区重新安装并重新配置 grub 时它不起作用。是否会偶然识别其他 linux 分区,基于解析/boot/grub/grub.cfg这些分区中的 ??? :-o

答案1

我在 vmware 将启动+系统磁盘从 800Gb 磁盘移动到 16Gb 时遇到了类似的问题,只需复制分区和文件(从 800Gb 磁盘到 16Gb),并且删除 800Gb 磁盘是不够的(内核启动正常但无法找到/'s UUID) 。 (遗憾的是,在这种情况下,vmware 的快照无法用作回滚保护)

  • 挂载点在/etc/fstab但有2 fstab
  • 平原fstab是在/etc
  • Secret/etc/fstab位于initrd.gz(或类似)/boot启动磁盘分区中,此 fstab 保存指向/操作系统(根 FS)的 UUID。

initrd如果您已从此操作系统启动,请重建。

或者,如果您从另一个操作系统启动,initrd.gz则为 gzip 压缩的 cpio,“简单地”提取 fstab文件,编辑它,然后将其放回initrd.gz.

相关内容