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