由于磁盘加密导致 Peppermint OS 启动失败

由于磁盘加密导致 Peppermint OS 启动失败
首先我要说的是,我找到了一个临时解决方案,但需要一个永久解决方案,而我没有足够的专业知识来做到这一点。我的临时解决方案只是一个幸运的猜测,第一次尝试就成功了,以下是整个过程。顺便说一句,我决定在其中添加情感,以免太单调,就像在讲故事一样。如果我没有严格遵循指导方针,请不要批评太多。

我决定在一台非常老旧的计算机上安装 Peppermint OS,Compaq Presario V3000 Intel Core 2 Duo(代号 Merom),64 位(截至撰写本文时,PeppermintOS 只有 64 位版本,并且仍在开发 32 位版本),RAM 2GB 和 150GB 存储空间。

我下载了最新版本(截至 2022 年 4 月 4 日),并制作了一个实时 USB 来安装操作系统。我像往常一样完成了设置,并决定选择磁盘加密,安装过程很顺利,而且对机器来说相当快(不到 10 分钟)。之后就是重启的时候了。

在启动过程中,BIOS 首先要求输入加密密钥(在其他发行版中是先输入 GRUB,然后输入加密密钥,而这个是先输入加密密钥,然后输入 GRUB),输入密钥后,它启动到 GRUB 并开始启动过程。

问题就出在这里: Peppermint 徽标显示了一段时间,之后屏幕进入终端显示

BusyBox v1.30.1(Debian 1:1.30.1-6+b3)内置 shell(ash)
输入“help”查看内置命令列表。

(initramfs)_

我将跳过不必要的部分,最后我只需输入 exit 即可查看它为什么拒绝启动

exit

然后我收到了消息

放弃等待根文件系统设备。常见问题:
 - 启动参数(cat /proc/cmdline)
  - 检查 rootdelay=(系统是否等待了足够长的时间?)
 - 缺少模块(cat /proc/modules;ls /dev)
警告!/dev/mapper/luks-UUID1 不存在。转到 shell!


BusyBox v1.30.1(Debian 1:1.30.1-6+b3)内置 shell(ash)
输入“help”查看内置命令列表。

(initramfs)_

我的本能当然是验证要启动的磁盘是否存在。

ls dev

sda、sda1、sda2 存在,因此机器可以看到它已连接(我不需要使用 / 因为我首先已经在其中了)

ls dev/mapper

ls:dev/mapper:没有该文件或目录

好的!我说,所以驱动器尚未解密,这就是为什么没有映射器。所以我研究了一下目前我可以使用什么以及如何使用它。跳过。在我找到我需要的东西后:

cryptsetup open dev/sda1

命令需要设备和映射名称作为参数。

因此,我寻找一种获取 UUID 的方法(我可以跳过它,但它适合那些有同样问题但不知道如何获取 UUID 的人)

blkid

/dev/sda1:UUID="UUID1" TYPE="crypto_LUKS" PARTUUID="PUUID1"
/dev/sda2:UUID="UUID2" TYPE="crypto_LUKS" PARTUUID="PUUID2"

现在是解密的时候了

cryptsetup open dev/sda1 UUID1

输入 dev/sda1 的密码:
(initramfs)_

cryptsetup open dev/sda2 UUID2

输入 dev/sda2 的密码:
(initramfs)_

那样应该可以吗?

exit

错误的 !

放弃等待根文件系统设备。常见问题:
 - 启动参数(cat /proc/cmdline)
  - 检查 rootdelay=(系统是否等待了足够长的时间?)
 - 缺少模块(cat /proc/modules;ls /dev)
警告!/dev/mapper/luks-UUID1 不存在。转到 shell!


BusyBox v1.30.1(Debian 1:1.30.1-6+b3)内置 shell(ash)
输入“help”查看内置命令列表。

(initramfs)_

(我也可以跳过这部分,但我选择不这样做)好吧,让我们看看哪里出了问题

ls dev/mapper

UUID1 UUID2 控制

太棒了!UUID 前面没有“luks-”....加油!(如果你愿意,下一部分也可以跳过,但我还是会把它放在这里)

然后我决定查看配置文件

cat /proc/cmdline

BOOT_IMAGE = /boot/vmlinuz-5.10.0-13-amd64 root = UUID = UUIDR ro quiet cryptdevice = UUID = UUID1:luks-UUID1 root = /dev/mapper/luks-UUID1 splash resume = /dev/mapper/luks-UUID2

我认为这就是问题所在,所以只需修改文件就可以了,对吗?

vi /proc/cmdline

它是只读的,所以没有机会修改任何内容,唉!(可跳过部分结束)

这只是问题部分,现在进入解决方案部分(临时解决方案)

我决定拿出我用来安装 Peppermint 和实时启动的安装盘,以读取我需要先解密的磁盘上的内容

sudo apt install cryptsetup

(对实时启动的修改是持久的,因此第一次之后无需再次安装)

sudo cryptsetup open /dev/sda1 UUID1

输入 /dev/sda1 的密码:

sudo mount /dev/mapper/UUID1 /mnt
cd /mnt/boot/grub

(我对每一层都执行了 cd 和 ls,但决定跳过它并输入完整路径,至于我选择这条路径的原因只是随机猜测,但碰巧它有效)

实时启动没有 nano 或 emacs(vim/vi 获胜,是的,我是 vim 团队)对于那些不知道如何使用 vim 并正确退出的人,请在使用前研究并学习基础知识,我已经警告过你了。

sudo vi grub.cfg

有 6 个“luks-”需要删除,共两行,
第 151 行和第 175 行每行三个

:wq!

强制退出

(回想起来,我应该读过警告,因为这将避免我一次又一次地执行此步骤,我已经多次执行过此步骤,这是完全没有必要的,但至少我能够向其他人提供在哪里进行编辑)

那是我第二次意识到的愚蠢错误,哈哈,所以这是我第二次做的事情,以避免再次犯下这样的错误

cd /mnt/etc/default
sudo vi grub

我删除了第 9 行中的所有“luks-”,即 3

:wq

我修改 /mnt/boot 中的文件的原因是我对 GRUB 不熟悉(你可以说我是 GRUB 方面的新手),而且我不知道直接更新 /mnt/boot 中的 GRUB 配置的命令(提供的命令是针对 /boot 的,这意味着它将从 /etc/default 更新 /boot,而不是从 /mnt/etc/default 更新 /mnt/boot

由于我读到了警告,所以我第二次更改了 /mnt/etc/default/grub,因此我必须再次重复这个不必要的步骤,而不是只执行一次,对于阅读本文的人,如果您做得正确,您将只执行一次此步骤
现在每次启动时都要完成重复的部分

重新启动设备,BIOS 要求输入加密密钥,然后 GRUB,然后

BusyBox v1.30.1(Debian 1:1.30.1-6+b3)内置 shell(ash)
输入“help”查看内置命令列表。

(initramfs)_

exit

放弃等待根文件系统设备。常见问题:
 - 启动参数(cat /proc/cmdline)
  - 检查 rootdelay=(系统是否等待了足够长的时间?)
 - 缺少模块(cat /proc/modules;ls /dev)
警告!/dev/mapper/UUID1 不存在。转到 shell!


BusyBox v1.30.1(Debian 1:1.30.1-6+b3)内置 shell(ash)
输入“help”查看内置命令列表。

(initramfs)_

blkid

/dev/sda1:UUID="UUID1" TYPE="crypto_LUKS" PARTUUID="PUUID1"
/dev/sda2:UUID="UUID2" TYPE="crypto_LUKS" PARTUUID="PUUID2"

cryptsetup open dev/sda1 UUID1

输入 dev/sda1 的密码:
(initramfs)_

cryptsetup open dev/sda2 UUID2

输入 dev/sda2 的密码:
(initramfs)_

ls dev/mapper

UUID1 UUID2 控制

那就可以了!

exit

系统终于启动了!

此修复的问题在于我需要在每次启动时手动解密分区,第二个分区是根本没有挂载的交换分区(我使用 htop 进行验证)。所以我想问是否有人可以为我提供一个永久的修复,这样我就不必在每次启动时手动解密每个分区,并且交换分区可以正确挂载。

我还会写信给 Peppermint 的开发人员,以便他们在下一个版本中解决这个问题。我高度怀疑这是因为他们在 GRUB 之前在 BIOS 中解密了磁盘,所以 GRUB 不知道如何解密它,另一个发行版(Quebes,我无法使用它,因为我的机器没有 VT-X)我尝试在要求输入磁盘加密密钥之前启动 GRUB,所以这可能是不同之处,顺便说一下,对于这两个发行版,如果使用加密的人决定使用非拉丁字符库作为他们的加密密钥怎么办?在 Qubes 中,您无法更改键盘布局,而在 Peppermint 中,它是在 BIOS 级别,因此定义磁盘加密密钥的人在安装操作系统时必须将密钥设置为美国键盘标准,否则可能会导致严重的并发症。

编辑!!
对于交换来说,这是一个愚蠢的修复(为什么我以前没想到呢,哈哈)只需编辑文件 /etc/fstab 并删除每个分区的 UUID 前面的所有“luks-”,哈哈

答案1

找到罪魁祸首:

在阅读了一篇关于添加密钥文件以避免再次输入密码的文章后,你可以找到它 这里(第 4 部分)我决定在做任何修改之前先仔细查看一下。

这是我发现的,我的加密是 LUKS1 ,并且对于两个分区我已经拥有Key Slot 0并且。Key Slot 1ENABLED

奇怪!正常情况下,设置密码时我应该只输入Key Slot 0

于是我继续探索,然后我发现了这个文件/etc/crypttab

cat /etc/crypttab

# /etc/crypttab:加密分区的映射。
#
# 每个映射设备都将在 /dev/mapper 中创建,因此您的 /etc/fstab
# 应该使用 /dev/mapper/<name> 路径来存储加密设备。
#
# 请参阅 crypttab(5) 了解支持的语法。
# # 注意:不要在此处列出您的根 (/) 分区,它必须 由 initramfs (/etc/mkinitcpio.conf) 事先
设置。这同样适用 于加密交换,应使用 mkinitcpio-openswap # 进行设置 以获得恢复支持。 # # <name> <device> <password> <options> luks-UUID1 UUID=UUID1 /crypto_keyfile.bin luks,keyscript=bin/cat luks-UUID2 UUID=UUID2 /crypto_keyfile.bin luks,keyscript=bin/cat






所以,那些该死的“luks-”再次,在这一点上,我希望你知道该怎么做

PS 不要/etc/crypttab在 initramfs (busybox) 中更改,先启动设备并正确更改,然后运行
# update-initramfs -u
否则它将无法工作(并且将你踢回到/etc/crypttab未修改的 initramfs 中(在 initramfs 中只会导致需要重新生成图像)

答案2

live-tools这是软件包和之间不可预见的冲突update-initramfs。在 2022 年 2 月 2 日或 2 月 19 日的 PeppermintOS 版本中,在开始安装之前...

在实时会话中,使用以下命令编辑文件 /etc/calamares/modules/packages.conf

sudo vi /etc/calamares/modules/packages.conf

在“-'termit'”下添加一行,与相同的标记格式匹配以显示“-'live-tools'”

保存并关闭文件。

按照惯例进行安装,现在可以进行全盘加密 - 无需摆弄、修改或弄乱系统设置或文件。

韋斯特

相关内容