最近我向我的计算机添加了一个新磁盘。我有一个空闲的 SATA 插槽,所以没有其他任何改变。插入磁盘几天后,计算机停止启动。
我使用 Debian Bookworm。我有一个加密分区,其中包含一个带有多个虚拟分区(包括根分区)的 LVM。
通常,在 Grub 之后,系统会提示我输入 的密码sda2_crypt
。现在 Grub 通过了,然后计算机挂起了一段时间,我发现我认为是 BusyBox 告诉我某个命令超时了。我试图逃跑sudo grub-mkconfig
,但没有帮助。
我注意到只有较新的内核引导才会失败。尝试启动旧内核仍然有效。
答案1
事实证明,通过添加第二个磁盘,驱动器号发生了变化。包含根文件系统的磁盘/dev/sda
之前是,但变成了/dev/sdb
。这使得系统无法解密根分区。
请注意,Grub 很好,它正确加载了内核。因此,所有针对 Grub 修复系统的尝试都注定会失败。
出现错误的 shell 是initramfs
,而不是 BusyBox。它允许修复错误,以便引导过程可以继续。本答案中有专门的部分解释了如何执行此操作。
另一部分介绍了如何永久解决该问题。
如何暂时解决该问题initramfs
其实很简单。这个答案有更多详细信息,但在我的情况下不需要有关 LVM 的步骤。
阻止系统继续启动的原因是找不到包含根文件系统的设备。就我而言,这是/dev/mapper/ssd-root
。要使其出现,必须手动打开加密分区:
cryptsetup open /dev/sdb2 some-arbitrary-mapname
之后,必须退出initramfs
:
exit
当然,必须使用包含根文件系统的设备。作为地图名称,可以使用任何名称。人们可以使用通用的sdb2_crypt
,但也可以选择使用自我描述的名称,例如ssd500-crypt
。
如果不使用预期的地图名称,例如sda2_crypt
,一段时间后,在短暂挂起后,将再次提示输入密码。预期的地图名称可以在 中找到/etc/crypttab
。
如何永久解决该问题
为了永久解决该问题初始化文件系统必须更新。作者使用了以下步骤序列:
- 暂时修复该问题
initramfs
。 - 将地图名称更改
/etc/crypttab
为新名称。任何事情都会发生,所以人们可能会使用像 这样的自我描述值ssd500-crypt
。 sudo update-initramfs -u
并重新启动- 再次暂时解决该问题
initramfs
。不过,这次地图名称必须是步骤 (2) 中使用的名称。 sudo update-initramfs -u
并重新启动
如果已经选择了新的地图名称,则可能可以省略步骤 (1)。