Ubuntu 18.04 LUKS 启动问题

Ubuntu 18.04 LUKS 启动问题

问题描述

我正在尝试在新笔记本电脑上实现 Windows 10(预装)和 Ubuntu 18.04 的双重启动。这并不是很困难,但如果您还需要 LUKS 全盘加密,它会在启动期间要求密码短语进行解密,并使用硬件加速进行加密和解密,这似乎会变得更加复杂。如果您想使用 LUKS,可以使用 Ubuntu 安装程序轻松完成,但前提是该磁盘上没有其他操作系统。如果是这样,您所能做的就是根据网上找到的一些教程手动设置。

因此,我尝试手动进行此安装。首先,我完成了预装Windows 10的安装。然后,我使用了这个使用 LUKS 设置 Ubuntu 的指南

重现步骤

  1. 从 Ubuntu 18.04 U 盘启动
  2. 为 /boot 创建未加密的分区(类型 ext2 或 ext3)
  3. 为 luks 加密创建分区(类型未格式化)
  4. 在我们刚刚创建的分区上创建 LUKS 容器:
    • sudo cryptsetup luksFormat /dev/nvme0n1p5
    • sudo cryptsetup luksOpen /dev/nvme0n1p5 加密分区
  5. 在 LUKS 容器内为交换和根 (/) 创建 LVM 卷
    • sudo pvcreate /dev/mapper/cryptedpartition
    • sudo vgcreate vgcrypted /dev/mapper/cryptedpartition
    • sudo lvcreate -n swap -L 20g vgcrypted
    • sudo lvcreate -n root -l 100%免费 vgcrypted
  6. 开始Ubuntu安装,当询问在哪里安装Ubuntu时,选择其他的东西。弹出分区编辑器。在这里,我们做了几件事:
    • 我们挂载/格式化我们创建的未加密分区 /boot (ext2 或 ext3)
    • 我们将加密数据分区挂载/格式化为 / (ext4)
    • 我们将现有的 EFI 分区挂载为 /boot/efi
    • 我们选择Windows 启动管理器在底部的下拉框中,作为安装引导加载程序(GRUB)的位置。
  7. 安装完成后,选择继续测试并打开一个终端。
  8. 确定我们在步骤 3 中创建的 LUKS 分区的唯一标识符 (UUID):
    • 须藤 blkid /dev/nvme0n1p5
  9. chroot 进入新安装:

    • sudo 安装 /dev/mapper/vgcrypted-root /mnt
    • 须藤挂载 /dev/nvme0n1p4 /mnt/boot
    • sudo mount --bind /dev /mnt/dev
    • 须藤 chroot /mnt
    • 注意:现在我们已在 chrooted /mnt 中获得 root 权限;不需要须藤
    • 挂载 -t proc proc /proc
    • 挂载-t sysfs sys /sys
    • 挂载 -t devpts devpts /dev/pts
  10. 创建一个新文件:纳米 /etc/crypttab并将以下内容放入其中,将 UUID 替换为您在步骤 8 中获得的 UUID。同时将 lvm= 替换为您的 LVM 卷组的名称(本例中为“vgcrypted”)。

# <target name> <source device> <key file> <options>
cryptedpartition UUID=8b80b3a7-6a33-4db3-87ce-7f126545c74af none luks,retry=1,lvm=vgcrypted
  1. 完成方式:
    • 打字出口逃离 chroot 环境
    • 卸载所有文件系统(不确定是否有必要)
    • 重启
    • 如果您选择从默认选择的 ubuntu 启动,那么现在应该要求您提供密码,以便在启动阶段解锁 LUKS 加密容器。

上面链接的指南到此结束,但是现在怎么办?

好消息是双启动似乎可以工作:我可以通过选择启动到 WindowsWindows 启动管理器从启动菜单,默认值为乌班图。欢呼!

但是启动 Ubuntu 失败:它会转到 Busybox,并且没有任何有意义的错误消息。我找不到太多帮助来找到问题;没有实际的错误消息,很难诊断,因为我不知道从哪里开始。

幸运的是,我最终沿着这条路线走得更远:

附加说明

  1. 再次从 Ubuntu U 盘启动
  2. 打开 LUKS 容器:
    • sudo cryptsetup luksOpen /dev/nvme0n1p5 加密分区
  3. 安装所有内容,按照步骤 9 进入 chroot。
  4. 配置下一个 initrd 构建以强制 CRYPTSETUP=y:
    • 纳米 /etc/cryptsetup-initramfs/conf-hook
    • 取消注释 CRYPTSETUP=y 行
  5. 生成 initrd(初始 ramdisk),它在引导阶段用于设置 LUKS 等内容:
    • 更新-initramfs -c -k 4.15.0-29-generic
    • 注意:如果适用,请将 4.15.x 版本替换为 /boot 中的内核/initrd 版本。你也可以尝试uname -a
  6. 卸载,重启

快到了,但还没有到……

现在,启动时,系统会要求我输入 LUKS 密码,并且它似乎还会检测我的 LUKS 容器(cryptedpartition)的名称。听起来不错吧?

我现在的问题是:密码不被接受;每次输入密码时,我都会收到密码可能不正确的消息。但是当使用 USB 记忆棒启动时,命令sudo cryptsetup luksOpen还会要求输入密码,并且会被接受。

我想尝试的一件事是禁用密码混淆,以便我可以看到在启动阶段输入的密码。也许它检测到我的键盘错误并且确实输入了错误的密码。我根本不知道可能是什么问题。文件系统是干净的(使用 fsck -f 进行测试)。我还使用外部 USB 键盘而不是笔记本电脑的默认键盘进行了测试。

现在我真的陷入困境了;有人可以帮我让这个双启动 Ubuntu+LUKS 与 Windows 10 一起工作吗?感谢您的时间和努力!

相关内容