更新 2020-07-16: 这可能不适用于已经远离Ubiquity安装程序的Ubuntu版本(例如Lubuntu,现在使用Calamares),因为其中一些安装程序甚至会停用它们在预安装过程中没有配置的LVM分区,从而使得为系统安装配置的分区不可用。
如何使用LVM和单个加密分区完成此操作
警告
首先,128M对于引导来说太小了!我使用1G。否则,可能会发生这样的情况,您可能会忘记删除旧内核,/boot将被填满,然后您将不得不处理尝试从系统中删除旧内核的痛苦,以便您可以再次使用apt
或apt-get
。即使有1G,请确保定期删除旧内核。
下面的步骤不适合新手用户。
更新:我已经创建了一个脚本,可以为您执行以下操作以及更多!您只需在安装之前从Live OS运行它即可。您可以在我的博客上找到相关介绍。
从实时操作系统进行预安装
您想在手动分区时设置LUKS和LVM!我在Ubuntu 16.04.2 / 18.04 / 20.04上进行了测试。
从实时操作系统启动Ubuntu,并选择“尝试Ubuntu而不安装”的选项。按照我下面概述的步骤进行操作。假设您要安装到/dev/sdb。
使用您选择的工具对驱动器进行分区:我使用fdisk在msdos分区表上设置了我的分区,如下所示:
- 其他分区:现有的操作系统 - 我们不关心这些
- sdb1:/boot(1G)
- sdb2:LUKS分区(剩余的磁盘空间)
设置LUKS
sudo cryptsetup luksFormat --hash=sha512 --key-size=512 --cipher=aes-xts-plain64 --verify-passphrase /dev/sdb2
sudo cryptsetup luksOpen /dev/sdb2 CryptDisk
- 虽然不是必需的,但最好用零填充您的LUKS分区,以便在加密状态下,分区中填充随机数据。
sudo dd if=/dev/zero of=/dev/mapper/CryptDisk bs=4M
注意,这可能需要很长时间!
在/dev/mapper/CryptDisk上设置LVM
sudo pvcreate /dev/mapper/CryptDisk
sudo vgcreate vg0 /dev/mapper/CryptDisk
sudo lvcreate -n swap -L 2G vg0
sudo lvcreate -n root -L 10G vg0
sudo lvcreate -n home -l +100%FREE vg0
从现有操作系统安装
- 现在您已经准备好进行安装了。当您到达安装的“安装类型”部分时,请选择“其他选项”。然后手动分配/dev/mapper/vg0-*分区,按照您希望进行配置的方式进行分配。不要忘记将/dev/sdb1设置为/boot。/boot分区不能加密。如果加密了,我们将无法启动。将“引导加载程序安装设备”更改为/dev/sdb,并继续安装。
- 安装完成后,不要重新启动!选择“继续测试”选项。
安装后从实时操作系统进行配置
如果您希望系统能够启动,这一步非常重要!我花了很多时间研究这个问题,以找出这些安装后的步骤。在我的情况下,我实际上是因为想要自定义 /dev/sda 上 /boot 的大小,但所有这些工作也适用于您的情况。
在终端中,输入以下命令并查找/dev/sdb2的UUID。记下该UUID以备后用。
sudo blkid | grep LUKS
我的机器上重要的一行是 /dev/sdb2: UUID="bd3b598d-88fc-476e-92bb-e4363c98f81d" TYPE="crypto_LUKS" PARTUUID="50d86889-02"
接下来,让我们重新挂载新安装的系统,以便进行更多的更改。
sudo mount /dev/vg0/root /mnt
sudo mount /dev/vg0/home /mnt/home # 这可能不是必需的
sudo mount /dev/sdb1 /mnt/boot
sudo mount --bind /dev /mnt/dev # 我不确定这是否是必需的
sudo mount --bind /run/lvm /mnt/run/lvm
(仅适用于使用EFI的情况):sudo mount /dev/sd*/your/efi/partition /mnt/boot/efi
现在运行 sudo chroot /mnt 以访问已安装的系统
从chroot中,再挂载一些东西
mount -t proc proc /proc
mount -t sysfs sys /sys
mount -t devpts devpts /dev/pts
设置crypttab。使用您喜欢的文本编辑器创建文件/etc/crypttab,并添加以下行,将UUID更换为您磁盘的UUID。
CryptDisk UUID=bd3b598d-88fc-476e-92bb-e4363c98f81d none luks,discard
- 最后,重新构建一些引导文件。
update-initramfs -k all -c
- update-grub
- 重新启动,系统应该要求输入密码以解密启动!
特别感谢Martin Eve、EGIDIO DOCILE和blog.botux.fr的教程。通过参考他们的帖子并进行一些额外的故障排除,我终于能够弄清楚这个问题。
我尝试了很多次,一次又一次地失败了。根据错误信息,我不得不自己解决的部分是
sudo mount --bind /run/lvm /mnt/run/lvm
。