内核升级(使用加密磁盘)后无法启动(进入 busybox)

内核升级(使用加密磁盘)后无法启动(进入 busybox)

我有两个系统 - 一个是 14.04.03 LTS,另一个是 16.04 LTS,在最近的内核升级后,这两个系统都无法启动。任何帮助我都会很感激 - 我不是专家,但我觉得新内核在启动时看不到加密文件系统。

对于这两个系统,我都使用安装程序来加密启动驱动器。后来,我添加了第二个磁盘,使用 LUKS 加密,并在启动时使用密钥文件自动挂载。我(大致是在系统安装和启动后完成的)遵循了以下说明:

https://www.martineve.com/2012/11/02/luks-encrypting-multiple-partitions-on-debianubuntu-with-a-single-passphrase/

以下是有关该系统的更多细节:

对于 16.04 LTS 系统:

硬件是 mSATA SSD /dev/sdb,Ubuntu 使用自动分区设置(/和交换)安装在其上。500GB Sata 驱动器/dev/sda用于/data- 系统启动并运行后,创建了 luks 分区并将其设置为使用密钥文件在启动时自动挂载。

$ uname -a
Linux <hostname> 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 X86_64 GNU/Linux

$ cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/ubuntu--vg-root /               ext4    errors=remount-ro 0       1

# /boot was on /dev/sdb2 during installation
UUID=5039XXXX-XXXX-XXXX-XXXX-d2b4XXXXXXXX /boot           ext2    defaults        0       2

# /boot/efi was on /dev/sdb1 during installation
UUID=1DXX-XX4D  /boot/efi       vfat    umask=0077        0       1
/dev/mapper/ubuntu--vg-swap_1 none            swap    sw              0       0

# encrypted disk /data (unlocked with keyfile
/dev/mapper/data_crypt  /data   ext4    errors=remount-ro   0   1

$ cat /etc/crypttab 
sdb3_crypt UUID=0bg9rz-XXXX-XXXX-XXXX-XXXX-XXXX-XXqvBH none luks
data_crypt UUID=453cXXXX-XXXX-XXXX-XXXX-6926XXXXXXXX /root/<keyfile> luks 

从 grub 中选择时4.4.0-21,会立即出现解锁密码提示sdb3_crypt。然后系统挂在 ubuntu 启动提示符处。按删除键会显示以下错误消息。几分钟后,系统实际上会启动,并按预期data_crypt安装/data

[ 2.091698] [drm:intel_set_pch_fifo_underrun_reporting [i915]] ERROR uncleared pch fifo underrun on pch transcoder a
[ 2.091735] [drm:intel_pch_fifo_underrun_irq_handler [i915]] ERROR PCH transcoder A FIFO underrun
lvmetad is not active yet, using direct activation during sysinit
Volume group "ubuntu-vg" not found
cannot process volume group ubuntu-vg
/run/lvm/lvmetad.socket: connect failed: no such file or directory:
Reading all physical volumes. This may take a while...
Found volume group "ubuntu-vg" using metadata type lvm2
/run/lvm/lvmetad.socket: connect failed: no such file or directory:
WARNING: failed to connect to lvmetad. Falling back to internal scanning.
2 logical volume(s) in volume group "ubuntu-vg" now active
/dev/mapper/ubuntu--vg-root: clean 488960/6750209 files, 11825728/26996736 blocks
[  ***] A start job is running for dev-disk-by\x2duuid-0bg9rZ\X2deNSE\x2d1E8u\x2XXXXX\x2XXXXX\x2XXXX\x2dZpqvBH.device (xxS / 1min 30s)

从 Grub 菜单中,选择 4.4.0-22 或 4.4.0-24,然后按删除键将显示以下信息(转录):

[ 2.091698] [drm:intel_set_pch_fifo_underrun_reporting [i915]] ERROR uncleared pch fifo underrun on pch transcoder a
[ 2.091735] [drm:intel_pch_fifo_underrun_irq_handler [i915]] ERROR PCH transcoder A FIFO underrun
lvmetad is not active yet, using direct activation during sysinit
Volume group "ubuntu-vg" not found
cannot process volume group ubuntu-vg
/run/lvm/lvmetad.socket: connect failed: no such file or directory:
WARNING: failed to connect to lvmetad. Falling back to internal scanning.
Reading all physical volumes. This may take a while.

最后 3 行可能重复了 30 次,几分钟后就进入 busybox shell。手动运行cryptsetup luksOpen /dev/sdb3 sdb3_crypt(并输入密码)没问题,但我无法挂载它(可能是因为它在 initramfs 中,我不知道我在那里做什么)。

data_crypt删除与from/etc/fstab和相关的行/etc/crypttab没有任何区别,所以我认为这与该磁盘的自动挂载导致的问题无关。

我也尝试为这些内核重新创建 initramfs,但没有任何区别。

我在 14.04.03 LTS 系统上也遇到了类似的问题,如下所述,但无法提供确切的细节(这是我发布此问题的系统)。

对于 14.04.03 LTS 系统:

硬件是用于 和 交换的 NVMe SSD/和用于 的 1TB SATA 磁盘/data。同样,Ubuntu 被安装到 SSD 上,然后连接 SATA 驱动器,使用 luks 将其设置为加密分区,然后使用密钥文件在启动时添加到自动挂载。

已安装 xenial 内核的软件包:

  • linux-generic-lts-xenial
  • linux-headers-generic-lts-xenial
  • linux-image-generic-lts-xenial

命令输出:

Linux hostname 4.2.0-36-generic #42~14.04.1-Ubuntu SMP Fri May 13 17:27:22 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/fstab

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/ubuntu--vg-root /               ext4    errors=remount-ro 0       1

# /boot was on /dev/nvme0n1p2 during installation
UUID=0657XXXX-XXXX-XXXX-XXXX-1be3XXXXXXXX /boot           ext2    defaults        0       2

# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=AEXX-XX66  /boot/efi       vfat    defaults        0       1
/dev/mapper/ubuntu--vg-swap_1 none            swap    sw              0       0

# encrypted disk /data (unlocked with keyfile
/dev/mapper/data_crypt  /data   ext4    errors=remount-ro   0   1

$ cat /etc/crypttab 
nvme0n1p3_crypt UUID=61235695-XXXX-XXXX-XXXX-962cXXXXXXXX none luks,discard
data_crypt UUID=2e92XXXX-XX57-XXXX-XXXX-af9fXXXXXXXX /root/<keyfile> luks

任何 4.4 系列内核都无法启动。但 4.2 系列内核可以正常启动。

答案1

好的,明白了。

/etc/crypttab 中的 sdb3_crypt(/ 和 swap 所在的位置)的 UUID 不知何故不正确。我通过将 /etc/crypttab 中列出的 UUID 与 /dev/disk/by-uuid/ 中列出的 UUID 进行比较来验证这一点。不知道怎么会出错,但我一定是在某个地方手误了。

我使用正确的 UUID /dev/sdb3 更正了 /etc/crypttab,然后更新了 initramfs ($update-initramfs -c -k 4.4.0-24-generic)。重启后,一切正常。

答案2

我遇到了类似的问题,只是我的/etc/crypttab文件完全不见了。最近,我将机械硬盘升级为 SSD。在这两个硬盘上,我除了/boot加密之外什么都没有,启动过程也运行正常。此外,我检查了几周前的备份,发现 crypttab 当时就在那里。

我按照这篇文章的答案来解决我的问题。

重新安装到现有的加密分区

请注意关于三个坐骑的评论。这些是错误的,应该是:

# mount --bind /dev /mnt/ubuntu/dev
# mount --bind /sys /mnt/ubuntu/sys
# mount -t proc none /mnt/ubuntu/proc

另外,请注意 crypttab 中的 UUID 必须是包含 LUKS 卷的容器的 UUID(在我的情况下/dev/sda5),而不是解密后的 LUKS 卷的 UUID。(它是这样说的,但我第一次没注意到,所以我想指出这一点。)

最后要说的是,更新程序的这种不良行为 - 导致计算机无法启动 - 是导致 Linux 无法在典型的桌面用户中获得更广泛受众的问题。

相关内容