如何在双系统中使用LUKS加密安装Ubuntu?

Ubuntu安装盘有一个选项可以使用LUKS对Ubuntu进行加密安装。然而,对于双启动的情况,没有选择在现有分区旁边执行加密安装的选项。
我该如何使用Live Disk将Ubuntu加密安装到另一个分区上?

看了一下cryptroot脚本,那个被拒绝的编辑实际上是正确的。conf.d/cryptroot中的每一行都被视为另一个cryptopts参数。是否可以在没有解密分区作为卷组的情况下使用安装程序?我尝试过,看起来它不允许我在没有分区的情况下使用它。 在我的情况下,这是一个带有3个分区的SSD:Linux /boot,Linux /,Windows,交换空间和/home位于HDD上,所以实际上不需要LVM。我猜我得坚持我的原始想法,也就是从live CD中使用debootstrap。 - user276047
有用的指南:“如何设置加密的Ubuntu安装?”,由Gayan在HecticGeek.com上发布- https://www.hecticgeek.com/2012/10/how-to-setup-encrypted-ubuntu-installation/ - Gabriel Staples
4个回答

首先,如果你想要在硬盘上加密安装Ubuntu,并替换掉现有的分区和操作系统,你可以直接通过图形化安装程序来完成。这个手动过程只适用于双系统启动。
这个答案已经在Ubuntu 13.04上进行了测试。
1. 从Ubuntu的live DVD或USB闪存中启动,并选择“试用Ubuntu”。
2. 使用live disk中包含的GParted创建两个分区。第一个分区应该是未格式化的,并且足够大以供根目录和交换空间使用,在我的例子中,这是/dev/sda3。第二个分区应该有几百兆字节的大小,并且格式化为ext2或ext3,它将不被加密并挂载到/boot(在我的例子中是/dev/sda4)。
在这个截图中,我已经有了两个分区中的一个现有的未加密的Ubuntu安装:/dev/sda1和/dev/sda5,左侧圈出。我创建了一个未格式化的分区/dev/sda3和一个ext3分区/dev/sda4,用于加密的Ubuntu安装,在右边圈出:
3. 使用以下命令创建一个LUKS容器。将之前创建的未格式化的分区/dev/sda3替换为你自己的名称(cryptcherries)。
sudo cryptsetup luksFormat /dev/sda3 sudo cryptsetup luksOpen /dev/sda3 cryptcherries
警告:你会注意到luksFormat步骤完成得非常快,因为它没有对底层块设备进行安全擦除。除非你只是在进行实验并且不关心各种类型的取证攻击的安全性,否则在创建文件系统之前正确初始化新的LUKS容器至关重要。将零写入映射的容器将导致强随机数据被写入底层块设备。这可能需要一些时间,所以最好使用pv命令来监视进度。或者,如果你正在进行离线安装并且无法轻松获取pv,则可以使用以下命令:sudo dd if=/dev/zero of=/dev/mapper/cryptcherries bs=16M
5. 在挂载的LUKS容器内部,创建一个LVM物理卷、一个卷组和两个逻辑卷。第一个逻辑卷将挂载到/,第二个逻辑卷将用作交换空间。vgcherries是卷组的名称,lvcherriesroot和lvcherriesswap是逻辑卷的名称,你可以选择自己的名称。
sudo pvcreate /dev/mapper/cryptcherries sudo vgcreate vgcherries /dev/mapper/cryptcherries sudo lvcreate -n lvcherriesroot -L 7.5g vgcherries sudo lvcreate -n lvcherriesswap -L 1g vgcherries
6. 为两个逻辑卷创建文件系统:(你也可以直接从安装程序中完成此步骤。)
sudo mkfs.ext4 /dev/mapper/vgcherries-lvcherriesroot sudo mkswap /dev/mapper/vgcherries-lvcherriesswap 7. 在不重新启动的情况下,使用图形化安装程序(Xubuntu 18.04中的桌面上有快捷方式)进行Ubuntu安装,选择手动分区。将/分配给/dev/mapper/vgcherries-lvcherriesroot,并将/boot分配给在步骤2中创建的未加密分区(在这个例子中是/dev/sda4)。
8. 图形化安装程序完成后,选择“继续测试”并打开终端。
9. 在终端中找到LUKS分区的UUID(在这种情况下为/dev/sda3),稍后将需要它:
sudo blkid /dev/sda3 /dev/sda3: UUID="8b80b3a7-6a33-4db3-87ce-7f126545c74af" TYPE="crypto_LUKS"
10. 将适当的设备挂载到/mnt的适当位置,并进入其中:
sudo mount /dev/mapper/vgcherries-l

这就是我在Elementary OS Luna上设置加密LVM的方法。在这里留下评论,以便我能再次找到它,并用于搜索引擎优化。 - matpie
非常棒的教程!有一个小建议:在图形化安装程序中解释如何“分配”挂载点,并且最好附上最终配置的截图。我花了一些时间才弄明白,因为它隐藏在“更改”按钮后面,看起来只是用于重新格式化分区。 - Kevin Reid
1这是一个被拒绝的建议编辑,可能实际上是正确的,我还没有时间仔细看它:http://askubuntu.com/review/suggested-edits/228261 - Flimm
我刚刚按照这个教程安装了Trusty,跳过了第11-13步,因为与我当前的Precise设置相比似乎多余。一切都运行正常。 - exo_cw
非常好的回答,Flimm。如果我们有机会见面,我欠你一杯啤酒! - Jeff Burdges
3我可以确认,在15.04版本中,您可以省略第11、13和14步骤,并且实际上有必要省略这些步骤(因为以这种方式运行update-grub会导致我的Windows分区丢失)。 - mboratko
在Xubuntu 15.10上无法工作。它在GRUB和启动画面之后启动,然后将我带到一个忙碌的提示符((initramfs)),而不要求输入luks密码。 - Aleksandr Dubinsky
非常好的帖子。不幸的是,在安装过程中,我似乎搞混了,第17步失败了。我似乎正在使用另一个安装的交换分区。有人能给出修复方法吗? - Epimetheus
警告:在使用luksFormat/luksOpen之后,需要进行额外的初始化步骤,以便在创建LVM/filesystems之前安全擦除支持LUKS容器的设备。否则,各种类型的取证分析对安全性将造成严重影响。我已经提交了一个编辑来添加这个步骤。但基本上,在第4步之后、第5步之前执行sudo dd if=/dev/zero of=/dev/mapper/cryptcherries bs=16M - Tom
谢谢 @Tom 的修改。我可以这样理解吗,如果你不关心硬盘上之前的数据的保密性,比如说它是一个全新的硬盘,那么你可以跳过这一步骤吗?所有新的数据仍然会被加密,未填充的空白部分并不重要,对吗? - Flimm
@Flimm 这个想法是为了对外部观察者隐藏使用模式 - 最简单的情况是不透露加密卷上实际使用的空间大小(虽然这对抗持续的取证攻击没有太大帮助)。我可能在过于超级偏执一点 - 或许更好地考虑它作为“可选”步骤,具体取决于威胁模型。:) 如果你不关心之前数据的保密性,并且你的威胁模型类似普通盗窃,那么你可能正确,这方面的重要性要低得多。 - Tom
5@process91 看起来步骤的编号有所变化。现在你需要省略12、14和15步。 - Aleksandr Dubinsky
2我可以确认,在Ubuntu 16.04上按照描述的步骤进行操作是有效的,只需省略第12、14和15步。现有的安装(Windows 10 + Ubuntu 15.10)被正确检测到,并且在GRUB中显示并可启动。 - Omar Kohl
我的电脑(UEFI)在重新启动后直接进入Windows,而没有进行update-grub步骤。重新安装grub(https://wiki.debian.org/GrubEFIReinstall)解决了问题。 - Sameer
5很棒的指南。第一次在 Windows 10 上使用 BitLocker 和 Ubuntu 16.04,略过步骤12、14和15。我还注意到了一些其他的绊脚石,需要进一步澄清,特别是选择引导加载程序分区时(它将安装到现有的 EFI 分区,但你可能只需选择安装 Ubuntu 的磁盘,例如 /dev/sda)。任何具有完整编辑权限的人都可以从我的写作中复制粘贴:http://www.stevenmaude.co.uk/posts/a-beginners-guide-to-os-encryption-almost-2017-edition - Steven Maude
请确认此方法也适用于Linux Mint 18.1,并跳过步骤12、14和15。另外,如果您已经安装了VeraCrypt,请在第7步中选择/boot分区作为安装引导程序的分区。如果按ESC键,则VeraCrypt的MBR加载器将链式加载到其中。 - Kurt Fitzner
1很棒的指南!我也省略了步骤12、14、15,并且使用了与Xubuntu非双启动给我的相同的/etc/crypttab: sda5_crypt UUID=188438da-81b1-1008-a1f1-d103431fbe13 none luks,discard - unhammer
还应注意的是,在创建逻辑卷后必须启动安装程序。 - Umang Raghuvanshi
5@unhammer刚刚编辑了答案并删除了一些步骤,以免读评论的人感到困惑。 - Flimm
1@Flimm,我正在阅读评论,并对是否应该跳过步骤12、14和15感到困惑。也许重新加入数字12、14和15,但用一些关于它们已被移除的说明会更清楚。 - 7ochem
5作者已经删除了旧的步骤12、14和15。所以请不要跳过任何步骤。适用于Ubuntu Mate 16.04.1。 - user4955663
我非常喜欢这个解决方案,至少在我能够正确使用SSD的本地FDE支持之前是这样的;也许在4.11内核版本中可以实现... 值得注意的一点是,这个解决方案还适用于休眠(因为休眠数据写入的交换分区也在加密的PV上)- 在Zesty Zapus上进行了测试。 - sxc731
2请问在第7步中应选择哪个分区进行引导加载程序的安装?默认情况下是dm-0。另外,在第11步中,文件已经存在并包含了交换分区的行。是否应该在文件末尾添加新行? - Slava Fomin II
1在第15步中,我可以看到swap绑定到/dev/dm-3。为什么会这样,如何纠正呢?我正在安装Ubuntu 17.04。 - Slava Fomin II
@SlavaFominII 从我所了解的情况来看,这是一个LVM逻辑“设备”。当使用swapon -s命令时,似乎它没有绑定到交换分区上。在终端中尝试执行以下命令:'lvdisplay|awk '/LV Name/{n=$3} /Block device/{d=$3; sub(".*:","dm-",d); print d,n;}',以查看LVM逻辑“设备”。不确定,但可能在Ubuntu 13.04(本教程已经测试过)中实现方式有所不同。 - pdvries
1非常好的指南!两个要点:1)@slava-filin-ii我选择在整个磁盘上安装它,2)我建议在crypttab中添加discard选项,以允许SSD上的TRIM请求,这样使用过程中性能不会下降。谢谢! - Asfand Qazi
2我在Ubuntu 18.04 LTS上尝试了两次。结果两次都导致启动时进入busybox提示符。我按照这些类似的指示进行操作,最终解决了问题。 - Bob Liberatore
2@Project提到他在Ubuntu 18.04 LTS上使用了这些几乎相同的指令,并且成功了。我将那些指令与这个askubuntu答案进行了比较,以找出它们的不同之处。这里有一个关于这些差异的写作。主要是两个额外的步骤,涉及到/etc/initramfs-tools/conf.d/cryptroot文件和/etc/default/grub中的GRUB_CMDLINE_LINUX行。 - gene_wood
1@ gene_wood提供的“几乎相同”的说明似乎更接近于这个答案的一个旧版本的精确副本。他所指出的差异实际上在此编辑中被删除了。 - Steven Maude
在Ubuntu 18.04上成功解决了这个问题。有两个地方与手册不符:dm-crypt没有安装(在chroot之后,在运行update-initramfs之前,我不得不编辑/etc/modules并添加一个dm-crypt行),而crypttab行是错误的(update-initramfs抱怨cryptsetup: WARNING: invalid line in /etc/crypttab for cryptcherries -)。正确的语法应该是vgcherries UUID=... none luks,tries=1 - Tgr
顺便说一下,我使用了blog.botux.fr版本中的额外步骤;不知道这是否有影响(删除它们并没有改变错误)。 - Tgr
几次重启后,cryptsetup 失败。我不得不恢复到答案中使用的 crypttab 语法(因此开头为 cryptcherries 而不是 vgcherries),从那以后一切正常运作。所以可能忽略我上面的评论。 - Tgr
请问您能解释一下pv行中的下划线是做什么用的吗?这个"$1"是指什么? - PlasmaBinturong
哦,好的,我在man sh中看到这是一个“命令文件”参数用于sh,在这里被忽略了。 - PlasmaBinturong
有些人将目录挂载在/target下面,这样做有什么区别呢?另外,在Ubiquity崩溃后,我发现/target目录正在使用中,但无法卸载它。直接使用/target而不是/mnt是一个好主意吗? - PlasmaBinturong
这在Ubuntu 19.04上可以直接使用。我刚刚和Windows 10一起完成了这个操作。如果你选择一个足够大的交换分区,甚至休眠到磁盘也能直接使用。 - nachtigall
成功解决了这个问题。正如@Tgr所指出的,似乎应该使用tries而不是retry。此外,lvm选项似乎无效(在update-initramfs和启动过程中都会发出警告)。然而,这似乎并不影响系统的功能。感谢提供的指南! - intuited

使用Ubuntu LiveCD的GUI工具,可以创建一个加密的双启动设置。
先决条件:
- 一枚带有19.04 Ubuntu安装程序的USB闪存驱动器。 - 如果你的主板是EFI类型,请确保磁盘使用GUID分区表(GPT)。使用MBR分区表可能会导致此方法失败。你可以使用Linux工具(gdisk)将MBR转换为GPT,但是在此之前应该先备份。如果你转换了分区表,你将需要修复Windows引导加载程序
Windows操作:
- 在开始菜单中键入“磁盘分区”,并选择第一个选项(从设置中打开磁盘分区管理器)。 - 缩小你的主分区到所需的Ubuntu大小(我只是使用默认设置,将我的500GB硬盘分割为240GB的Windows系统和240GB的未分配空间)。
BIOS操作:
  • 禁用安全启动(如果您使用BitLocker,则需要重新启用以每次安全引导到Windows)- 对我来说没问题,因为Ubu是我的主要操作系统,只是用windoze玩游戏。

Ubuntu LiveCD

最后 - 引导进入19.04安装程序USB

  • 在默认的安装Ubuntu选项上按下Enter

  • 当您到达显示擦除整个磁盘并带有一些复选框的屏幕时,请点击其他选项(手动分区)选项。否则,您将丢失Windows数据!

一旦磁盘分区管理器加载您的磁盘,您将看到一个大的未分配空间。点击它并点击添加按钮创建分区。

首先,创建一个500MB的/boot分区(主分区,ext4格式)。
其次,使用剩余的空间创建一个加密卷。这将创建一个单一的LV分区。将其修改为所选的根分区(/)。换句话说,点击/dev/mapper/sdaX_crypt上的“更改”按钮,并将挂载点设置为/。
然后,剩下的安装过程将正常运行。
当您第一次启动时,请登录,打开终端,运行sudo apt-get update和sudo apt dist-upgrade,然后重新启动并再次登录。
系统将自动创建一个2GB的交换文件。如果您想要一个8GB的交换文件,请参阅this answer

4在2019年5月,这是首选答案(实际上从2012年开始就可以使用),不需要命令行复杂操作。在分区过程中,在为加密创建物理卷后,我没有看到新的/dev/mapper/sdaX_crypt在列表顶部。这个指南提供了屏幕截图和可视化的分区格式设置,可能会有帮助:https://www.hecticgeek.com/2012/10/how-to-setup-encrypted-ubuntu-installation/ - firepol
1好答案,@Falieson!但是,在我花了14天17小时的研究时间后,我还是没有理解它,所以我打算用截图写出自己的答案。那篇由@firepol发布的文章(https://www.hecticgeek.com/2012/10/how-to-setup-encrypted-ubuntu-installation/)非常有帮助,只有在按照那篇文章的步骤之后,你的答案才对我有意义。 - Gabriel Staples
另外,我想提醒你下次应该停止使用Windows Bitlocker并转而使用VeraCrypt。它是免费且开源的,没有任何费用,并且在双系统启动方面表现出色。我的Windows分区正在使用它,还有我的外部硬盘和一些本地文件卷。这是一个关于VeraCrypt的很棒的介绍视频:https://www.youtube.com/watch?v=C25VWAGl7Tw,以及他们的下载页面:https://www.veracrypt.fr/en/Downloads.html。然而,对于基于Linux的ext4外部驱动器的LUKS加密,我使用了包含在Ubuntu中的**Disks**实用程序,在格式化时有一个LUKS加密复选框。 - Gabriel Staples
1这不是使用LUKS。[SecureBoot](https://wiki.ubuntu.com/UEFI/SecureBoot)不是Windows /坏东西。 - Pablo Bianchi
请解释一下这个是如何使用luks的。 - aggregate1166877

首先,解释为什么仅对Linux分区进行加密可能不足以确保安全性:
  1. https://superuser.com/questions/1013944/encrypted-boot-in-a-luks-lvm-ubuntu-installation
  2. https://security.stackexchange.com/questions/166075/encrypting-the-boot-partition-in-a-linux-system-can-protect-from-an-evil-maid-a
  3. https://www.reddit.com/r/linux/comments/6e5qlz/benefits_of_encrypting_the_boot_partition/
  4. https://unix.stackexchange.com/questions/422860/why-should-we-encrypt-the-system-partition-and-not-only-home
  5. https://www.coolgeeks101.com/howto/infrastructure/full-disk-encryption-ubuntu-usb-detached-luks-header/
  6. https://superuser.com/questions/1324389/how-to-avoid-encrypted-boot-partition-password-prompt-in-lvm-arch-linux

从现在开始,我按照这个教程进行操作:

  1. https://www.oxygenimpaired.com/multiple-linux-distro-installs-on-a-luks-encrypted-harddrive
  2. http://web.archive.org/web/20160402040105/http://www.oxygenimpaired.com/multiple-linux-distro-installs-on-a-luks-encrypted-harddrive
在这个答案中,我将逐步介绍如何安装Linux Mint 19.1 XFCE和Ubuntu 18.04.2,并将它们完全加密在一个磁盘上。首先,我在/dev/sda5上安装了Ubuntu 18.04.2,并且没有创建交换分区,因为Linux Mint 19.1和Ubuntu 18.04.2不使用交换分区,而是使用交换文件。
Ubuntu 18.04.2 Bionic Beaver 首先,插入Ubuntu安装介质并重新启动机器进入Ubuntu的Live会话,然后选择“尝试Ubuntu”并打开一个终端。
1. sudo su - 2. fdisk /dev/sda,然后创建以下分区
  • enter image description here
3. cryptsetup luksFormat /dev/sda5 4. cryptsetup luksOpen /dev/sda5 sda5_crypt 5. pvcreate /dev/mapper/sda5_crypt 6. vgcreate vgubuntu /dev/mapper/sda5_crypt 7. lvcreate -L10G -n ubuntu_root vgubuntu
  • lvcreate -l 100%FREE -n ubuntu_root vgubuntu(可选,代替运行lvcreate -L10G -n ubuntu_root vgubuntu,您可以运行此lvcreate -l 100%FREE -n ubuntu_root vgubuntu来使用整个磁盘的剩余空间,而不仅仅是10GB)
  • enter image description here
8. 不要关闭终端,打开发行版安装程序,选择其他选项并标记以下选项
  • /dev/sda1 挂载为 /boot 分区,格式为 ext2
  • /dev/mapper/vgubuntu-ubuntu_root 挂载为 /,格式为 ext4
  • /dev/sda 作为引导加载程序安装位置
  • 不要标记其他任何选项
  • enter image description here
  • enter image description here
9. 在选择上述选项后,选择立即安装 10. 不要重新启动,点击继续使用Linux,并选择打开终端 11. mkdir /mnt/newroot 12. mount /dev/mapper/vgubuntu-ubuntu_root /mnt/newroot 13. mount -o bind /proc /mnt/newroot/proc 14. mount -o bind /dev /mnt/newroot/dev 15. mount -o bind /dev/pts /mnt/newroot/dev/pts 16. mount -o bind /sys /mnt/newroot/sys 17. cd /mnt/newroot 18. chroot /mnt/newroot 19. mount /dev/sda1 /boot 20. blkid /dev/sda5(复制UUID(不带引号)并在下一步中使用) 21. echo sda5_crypt UUID=5f22073b-b4ab-4a95-85bb-130c9d3b24e4 none luks > /etc/crypttab
  • enter image description here
  • enter image description here
  • enter image description here
22. 创建文件/etc/grub.d/40_custom
  • enter image description here
23. 编辑/etc/default/grub并设置
  • GRUB_TIMEOUT_STYLE=menu

  • 要获取更详细的说明,请阅读本问题顶部指出的原始教程,或在谷歌上搜索有关这些命令的用法。

    Linux Mint 19.1 Cinnamon

    对于其余的Linux安装,重新启动您的Ubuntu机器,使用Mint 19.1(Live CD)安装程序引导,并打开一个终端窗口

    1. sudo su -
    2. cryptsetup luksFormat /dev/sda6
    3. cryptsetup luksOpen /dev/sda6 sda6_crypt
    4. pvcreate /dev/mapper/sda6_crypt
    5. vgcreate vgmint /dev/mapper/sda6_crypt
    6. lvcreate -L10G -n mint_root vgmint
      • lvcreate -l 100%FREE -n mint_root vgmint(可选项,代替运行 lvcreate -L10G -n mint_root vgmint,您可以运行这个命令 lvcreate -l 100%FREE -n mint_root vgmint 来使用整个磁盘的剩余空间,而不仅限于10GB)
      • enter image description here
      • enter image description here
    7. 请勿关闭终端,打开发行版安装程序,选择Something else并标记以下选项
      • /dev/sda2 挂载为 /boot 分区,格式为 ext2
      • /dev/mapper/vgmint-mint_root 挂载为 / 分区,格式为 ext4
      • 选择 /dev/sda2 作为引导加载器安装位置(不要再次选择 /dev/sda
      • 不要选择其他任何选项
      • enter image description here
      • enter image description here
    8. 选择上述选项后,点击 Install Now
    9. 不要重新启动,点击 Continue Using Linux,并选择打开终端
    10. mkdir /mnt/newroot
    11. mount /dev/mapper/vgmint-mint_root /mnt/newroot
    12. mount -o bind /proc /mnt/newroot/proc
    13. mount -o bind /dev /mnt/newroot/dev
    14. mount -o bind /dev/pts /mnt/newroot/dev/pts
    15. mount -o bind /sys /mnt/newroot/sys
    16. cd /mnt/newroot
    17. chroot /mnt/newroot
    18. mount /dev/sda2 /boot
    19. blkid /dev/sda6(复制不带引号的 UUID,并在下一步中使用)
    20. echo sda6_crypt UUID=5f22073b-b4ab-4a95-85bb-130c9d3b24e4 none luks > /etc/crypttab
      • enter image description here
      • enter image description here
      • enter image description here
    21. update-initramfs -u
    22. update-grub

1我的电脑上有一个硬盘,上面有一个未加密的Kubuntu 18.04系统。根据这个情况,我在第一个未加密的Kubuntu旁边安装了第二个加密的Kubuntu 18.04系统。现在两个系统都在同一个硬盘上正常运行。非常感谢详细的回答。 - Ikrom
1这个回答中关于Linux Mint的部分应该被删除。这部分内容与主题无关,没有被提问者要求,使得回答变得不必要冗长,并引发了与主题无关的后续问题,比如这个问题 - mook765
-1 对于与薄荷相关的部分不进行翻译。 - user68186
你可以对与Mint相关的部分给予“-1”,对于Ubuntu相关的部分给予“+1”,然后给出一个“0”,即既不点赞也不点踩。 - user

在这里添加另一个答案,因为我发现其他资源(无论是这里还是其他地方)都有些过时了,而且我认为一些步骤可以简化。
首先,正如其他答案中提到的,如果你不想进行双重引导,只需在自动安装程序中选择加密选项。 值得注意的是,这种方法不会加密/boot。虽然加密/boot也有合理的理由,但当你使用LUKS进行图形化安装时,图形化安装程序并不会对其进行加密。因此,我遵循这个先例,并保持未加密/boot分区的简单性。

Ubuntu 20.04和Windows 10

在本指南中,我将提到/dev/sda。你的可能不同 - 特别是它可能是/dev/nvme0n1。只需根据需要进行相应的替换,同时注意/dev/sda1对应于/dev/nvme0n1p11

分区可以使用GParted、sgdisk或gdisk完成。在这里,我们以sgdisk为例进行命令参考。

  1. 将BIOS配置为仅支持UEFI。不要使用MBR或传统启动方式。2
  2. 将驱动器初始化为GPT驱动器,并创建一个550M的EFI系统分区,格式化为FAT32(作为root用户)。
    # sgdisk --zap-all /dev/sda
    # sgdisk --new=1:0:+550M /dev/sda
    # sgdisk --change-name=1:EFI /dev/sda
    # sgdisk --typecode=1:ef00 /dev/sda
    # mkfs.fat -F 32 /dev/sda1
    
  3. 安装Windows。在安装程序中,选择为Windows创建一个新分区,并使其大小适当(大约为硬盘的一半)。留出未分配空间以供稍后用于Ubuntu。这样做时,安装程序实际上会为Windows创建多个分区。
  4. 如果需要,在Windows安装完成后,在C:驱动器上启用BitLocker。这将创建另一个分区。
  5. 为Ubuntu创建分区(作为root用户)。768M的分区用于/boot。另一个分区将使用LUKS进行加密,并使用LVM(类似于默认安装过程的设置)。 (如果之前没有设置BitLocker,则我的示例中的分区号将比您的高1个(因此我的sda5是您的sda4)。
    # sgdisk --new=5:0:+768M /dev/sda
    # sgdisk --new=6:0:0 /dev/sda
    # sgdisk --change-name=5:/boot --change-name=6:rootfs /dev/sda
    # sgdisk --typecode=5:8301 --typecode=6:8301 /dev/sda
    # mkfs.ext4 -L boot /dev/sda5
    
  6. 设置LUKS和LVM(作为root用户)。我设置了8G的交换空间。一个好的经验法则是系统中的RAM量。交换将被加密。
    # cryptsetup luksFormat --type=luks1 /dev/sda6
    # cryptsetup open /dev/sda6 sda6_crypt
    
    # pvcreate /dev/mapper/sda6_crypt 
    # vgcreate ubuntu-vg /dev/mapper/sda6_crypt 
    # lvcreate -L 8G -n swap_1 ubuntu-vg 
    # lvcreate -l 100%FREE -n root ubuntu-vg
    
  7. 使用图形化安装程序安装Ubuntu。自己选择分区。
    • /dev/sda5作为/bootext4
    • /dev/mapper/ubuntu--vg-root作为/ext4
    • /dev/mapper/ubuntu--vg-swap_1作为swap
    • 引导加载程序设备应为/dev/sda
  8. 安装程序完成后,不要退出。我们需要设置/etc/crypttab(作为root用户)。这是将在启动时触发您的密码提示的内容。将文件中的UUID替换为从sudo blkid /dev/sda6获取的驱动器UUID。
    # mount /dev/mapper/ubuntu--vg-root /target
    # mount /dev/sda5 /target/boot
    # for n in proc sys dev etc/resolv.conf; do mount --rbind /$n /target/$n; done 
    # chroot /target
    # mount -a
    
    # echo 'sda6_crypt UUID=abcdefgh-1234-5678-9012-abcdefghijklm none luks,tries=0,discard,loud' > /etc/crypttab
    # update-initramfs -k all -c
    
完成了!如果你在Windows上使用BitLocker,它不喜欢与grub一起启动。相反,直接从BIOS引导选项中启动到Windows。

如果您有兴趣,我写了一篇博客,在这里可以找到更详细的信息:https://www.mikekasberg.com/blog/2020/04/08/dual-boot-ubuntu-and-windows-with-encryption.html。我认为将答案整合在AskUbuntu上的好处显而易见,因此我在上面的回答中进行了简要总结。 - mkasberg
很棒的教程!但是在sgdisk部分有几个多余的 。我必须在文件中插入for n in proc sys dev etc/resolv.conf; do...并使用chmod +x运行它(从终端运行时出现了错误:bash: syntax error near unexpected token 'do')。你还忘记提到(在你的博客上写了)需要使用sudo blkid /dev/sda6` 来获取sda6的UUID。 - dotnetCarpenter