多年来我一直是 Windows 和 Mac 的狂热用户。最近,科技社团主义者和政府官僚之间日益加深的爱意说服了我投身于开源世界。我的过渡进展顺利,直到我搞定了启动过程。几天来我一直在努力解决这个问题。我想——在我完全开始哭泣并跑回蒂姆·库克的怀抱之前——我应该向这里的聪明人寻求帮助。
背景
我的 Linux 发行版设置在具有加密 LVM (sda5_crypt) 的单个分区上。启动分区上有两个可用的内核映像(4.19 和 5.9)。我可能在执行 asudo apt-get purge --auto-remove lvm2
或可能在使用 crypttab 和/或 fstab 文件时弄乱了我的 initrd 映像,然后是sudo update-initramfs -u.
大问题
现在,GRUB 将内核 5.9 加载到内存中后,我将进入 initramfs shell,内核正在搜索/dev/sdd
等等。此外,vgscan
还pvscan
显示“未找到介质”/dev/sdd
等等。当然!这很奇怪,因为发行版是在sda5
.我也无法exit
跳出外壳。
尝试的解决方案
我尝试过——但没有真正成功——暂时地更改root=
GRUB 引导加载程序中的参数、将 initrd 映像 (4.19) 复制为 initrd 映像 (5.9) 等。也许这里的一线希望是,当从 GRUB 启动菜单中选择内核 4.19 映像时,我能够成功解密磁盘并启动到发行版的外壳。但是当我加载了内核 4.19 时,我到底应该如何update-initramfs
使用内核 5.9?!感觉就像暮光之城。
非常感谢 Linux 老手的任何建议!
答案1
我成功了!以下是解决问题的步骤。希望这能帮助未来陷入同样困境的人:
如果您有其他方式访问您的系统 - 例如安装另一个内核(就像我的情况) - 那么您不需要
chroot
。只需从 GRUB 菜单中选择该内核并登录到您的系统即可。我能够进入终端外壳。使用 获取所有块设备的 UUID
sudo blkid
。打开/etc/fstab
文件并用 UUID 替换内核名称描述符(即 /dev/sda1)。这很重要,因为内核名称描述符不是持久的。另请注意,MBR/GPT 分区类型存在问题(参考)。一切都说完了,你应该有这样的东西:
UUID=XXXXXX-XXXXXX-XXXXX-XXXX-XXXXXX / ext4 errors=remount-ro 0 $
UUID=XXXXXX-XXXXXX-XXXXX-XXXX-XXXXXX /boot ext2 defaults 0 $
UUID=XXXXXX-XXXXXX-XXXXX-XXXX-XXXXXX none swap sw 0 $
- 现在打开您的
/etc/crypttab
文件。每个加密设备此处应该只有一个条目。第一列是device mapper's name
(参考)并且不应该是 UUID(如 fstab 文件中的那样)。您可以在blkid
打印输出中找到设备映射器的名称。它通常被列为/dev/mapper/sda5_crypt
.但请注意,crypttab 文件中的 UUID 是不一样blkid
正如在线上找到的那样dev/mapper/sda5_crypt
。相反,可以在 的blkid
行中找到 crypttab 文件中必须使用的正确 UUID/dev/sda5
。最后你会得到这样的东西:
sda5_crypt UUID=XXXXXX-XXXXXX-XXXXX-XXXX-XXXXXX none luks,discard
然后转到您的启动目录(即/boot)。备份 vmlinuz 文件 (ievmlinuz-5.9.0-0.bpo.5-amd64)。
现在您需要运行命令来更新特定内核的 vmlinuz 文件(参考)。 u 代表“更新”。 v 代表“详细”(实时打印所有内容)。 k 代表您将生成 initramfs 映像的特定“内核”版本。命令:
sudo update-initramfs -uvk 5.9.0-0.bpo.5-amd64
- 现在搜索冗长的噪音。确保生成图像时没有错误。如果没有,请重新启动系统,瞧!