我的服务器上有一些磁盘(用于 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
但有2fstab
- 平原
fstab
是在/etc
- Secret
/etc/fstab
位于initrd.gz
(或类似)/boot
启动磁盘分区中,此 fstab 保存指向/
操作系统(根 FS)的 UUID。
initrd
如果您已从此操作系统启动,请重建。
或者,如果您从另一个操作系统启动,initrd.gz
则为 gzip 压缩的 cpio,“简单地”提取 fstab
文件,编辑它,然后将其放回initrd.gz
.