启动新 LUKS 加密的根分区时出现问题

启动新 LUKS 加密的根分区时出现问题

当我安装 Ubuntu 18.04 时,当 18.04 首次发布时(发布的前几个月),我没有加密我的根分区,所以出于某种原因,我决定现在对其进行加密。

我知道这个问题之前已经被问过(实际上我发布了一些被问到的问题的链接!)但我发布这个问题是因为这个问题是针对我的,所以请不要删除我的问题,非常感谢,亲爱的版主和管理员。我没有找到任何人遇到与我相同的问题,在做了一些主要的 Linux 工作后,我不得不寻求帮助,因为我无法自己解决这个问题。 (在我过去 11 年的 GNU/Linux-*nix 经验中,这种情况并没有发生太多。99% 的情况下,我自己和亲爱的 Google 解决/解决了我的问题……正如你所知,问题经常发生在Linux中!:D)

无论如何,以下是我执行此操作的步骤:(在 18.04 live usb 中)

sudo cryptsetup -v -y -c aes-xts-plain64 --key-size 512 --hash sha512 luksFormat --uuid=049172c6-5376-4b9c-bd27-b503b6f25423 /dev/sda5
sudo cryptsetup -v luksOpen /dev/sda5 myroot
sudo mkfs.ext4 -m 0 /dev/mapper/myroot
#Then for copying the contents of my root partition I used dd:
sudo dd if=/dev/sda6 of=/dev/mapper/myroot bs=4M
#/dev/sda6 is a duplicate of my original sda5 root...
#After I dd'ed, there was unallocated space on the partition so I did a check on it in GParted (Which also applies cryptsetup resize command to it)
sudo mount /dev/mapper/myroot /media/myroot #I created /media/myroot beforehands

然后,在此之后,我做了很多事情,我认为这将有助于用 GRUB 启动我的这个新的加密根,并且我通过搜索发现了很多更多的事情。所以我基本上尝试了人们在这些链接中建议的所有内容:

https://askubuntu.com/questions/1134998/booting-19-04-from-luks-system-drive

设置 initramfs 在 Mint 18 上启动时提示输入 luks passowrd?

https://askubuntu.com/questions/1006867/cant-get-ubuntu-to-boot-from-luks-lvm-group-on-external-drive-on-imac-with-re

https://askubuntu.com/questions/729673/ubuntu-full-disk-encryption-with-encrypted-boot

https://askubuntu.com/questions/450895/mount-luks-encrypted-hard-drive-at-boot

https://askubuntu.com/questions/1082131/how-to-get-grub-to-boot-from-a-newly-encrypted-partition

(还有更多链接)

这是 fdisk -l 的输出:

Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: FE0857E8-E0DE-40A0-96C5-C4FEC80B8742

Device         Start       End   Sectors   Size Type
/dev/sda1       2048    534527    532480   260M EFI System
/dev/sda2     534528   1067007    532480   260M EFI System
/dev/sda3    2582528   4630527   2048000  1000M Lenovo boot partition
/dev/sda4    4892672 259438591 254545920 121.4G Microsoft basic data
/dev/sda5  259438592 332343295  72904704  34.8G Linux filesystem
/dev/sda6  332343296 400898047  68554752  32.7G Linux filesystem
/dev/sda7  410068992 425521151  15452160   7.4G Microsoft basic data

这些是我的 UUID:

/dev/sda5:
LUKS UUID: 049172c6-5376-4b9c-bd27-b503b6f25423
Partition UUID: 1db5df50-7000-48df-a281-74bad5689ce1

/dev/sda6:
Former UUID which I recently changed it to a new one because it was same as sda5's due to using dd for copying root filesystem to new LUKS partition: 1db5df50-7000-48df-a281-74bad5689ce1
New UUID: 7876a195-7219-4440-892a-61b57c706443

最后是我在 GRUB 中尝试过的事情: http://s000.tinyupload.com/index.php?file_id=00739971820320475700

更新:所以基本上,当我尝试使用我在上面发布的链接的zip文件中提供的配置启动时,对于每个conf,我都会遇到不同的错误或问题或其他东西......就像当我添加一些在链接中找到的东西时我张贴在未加密根(sda6)的 /etc/default/grub 和 crypttab 以及 fstab 和 grub.cfg 中并启动,而在安静的启动屏幕上它要求输入 luks PW,但在行尾它询问我它说类似“输入 sda5 luks 的密码以安装在 /!”,IDK(或有点知道!)为什么最后它说 /!而不仅仅是/。

当我有时尝试从 sda5 启动(使用其中一个配置)时,它确实会要求 grub 上的密码,但随后它会进入 busybox initramfs 提示符,或者显示“No such device found with 1db5df50-7000-48df-a281-74bad5689ce1”或者类似的东西...

我认为问题要么是亲爱的telcoM在他关于initramfs的回答中所说的,要么是UUID和我放入conf文件中的UUID,你知道吗?但希望这是因为 initramfs,我将尝试 telcoM 的建议,看看会发生什么。

任何帮助将不胜感激,我真的不想从安装程序重新安装和加密,我需要我的 ubuntu 上的东西,但我真的无法重新安装,我的这个 ubuntu 安装是如此完美,我我在 GNU/Linux 方面拥有丰富的经验(现已超过 10 年),并且安装过很多 Linux,我不是菜鸟,但我就是不能丢失我所做的所有数据、配置或自定义...我知道我可以支持他们,但我只是……你知道吗?

答案1

创建的 LUKS 容器的大小与底层分区的大小相同/dev/sda5,但由于/dev/sda6dd放入的容器比该容器小,因此 LUKS 容器的映像/dev/sda6不会完全填满您的/dev/mapper/myroot.一个简单的问题resize2fs /dev/mapper/myroot就足以解决这个问题。

你谈论了很多你所做的事情,但很少谈论实际症状:当您尝试使用新的加密根启动时到底会发生什么?如果有的话,实际的错误消息是什么?它是否识别出加密分区的存在并提示输入密码,或者是否无法通过 UUID 检测到它?或者 GRUB 是否成功加载内核和 initramfs 文件,但 initramfs 无法挂载加密的根文件系统?

您似乎正在使用 UEFI 本机启动方案。没关系,但它带来了启用安全启动的可能性。如果是这样,它将限制 GRUB 在加载/boot/grub/x86_64-efimain 后加载任何其他 GRUB 模块grubx64.efi,因此所有必需的模块都必须构建到主grubx64.efi引导加载程序文件中。

grub-install执行时,它通常会运行grub-mkimage,它将能够将任何 GRUB 模块包含到grubx64.efi其构建中。通常,grub-install只会包含最少必要数量的模块......也就是说,grub-install仅执行当时检测到的必要模块。因此,您的 GRUB 可能会失败,因为它没有内置加密支持,因为根文件系统在grub-install执行时未加密。

要解决这个问题,您有两种选择。当您已 chroot 到新的根文件系统并为其准备了有效条目时,可以使用grub-install重新安装 GRUB /etc/crypttab...或者更简单地,确保您已grub-efi-amd64-signed安装该软件包,并替换grubx64.efiESP 上现有的软件包(= 可能/boot/efi/EFI/ubuntu/grubx64.efi) 和/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed

cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/ubuntu/grubx64-backup.efi
cp /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed /boot/efi/EFI/ubuntu/grubx64.efi

这是一个预构建的 UEFI GRUB 引导加载程序,经过签名以最大限度地接受安全引导,并且它具有所有内置的 GRUB 模块,所以它应该明显比您现有的grubx64.efi文件大。

即使安全启动被禁用,该grubx64.efi.signed文件也应该可以正常工作:它内置了所有 GRUB 模块这一事实仍然很有用。

但如果你的 GRUB 可以成功加载你的内核和 initramfs 文件,那么问题一定出在 initramfs 阶段。如果您的 Ubuntu 有cryptsetup-initramfs可用的软件包,请确保它已安装。然后,当您再次chroot到新的加密根目录并/etc/crypttab为其设置有效条目时,运行update-initramfs -u以重建您的initramfs。在 chroot 内运行它应该让它自动检测根文件系统是否已加密,并将必要的工具和脚本包含到 initramfs 文件中。

相关内容