使用 LUKS+LVM 进行全盘加密的 Gentoo 设置指南

use*_*422 6 gentoo lvm grub2 luks

我正在寻找一种在 Gentoo 中进行以下设置的方法:

/dev/sda1 -> /boot (ext2)
/dev/sda2 -> Luks encrypted
|
+-lvm-vg1
  |
  +- /dev/mapper/root-fs -> / (ext4)
  +- /dev/mapper/swap    ->   (swap)
Run Code Online (Sandbox Code Playgroud)

它基本上与 Ubuntu 在进行图形安装时所做的设置相同。

我知道如何手动设置 LUKS 甚至 LVM 设置,但是在启动时将它们组合在一起时我会卡住。我如何告诉内核和 grub 解锁 LUKS 分区并安装正确的 LVM 分区?

use*_*422 11

所以我确实弄清楚了:

我按照手册对磁盘进行了部分分区:

# parted -a optimal /dev/sda
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted)mklabel gpt

(parted)unit mib

(parted)mkpart primary 1 3
(parted)name 1 grub
(parted)set 1 bios_grub on

(parted)mkpart primary 3 131
(parted)name 2 boot
(parted)mkpart primary 131 -1
(parted)name 3 lvm

(parted)set 2 boot on
(parted)q
Run Code Online (Sandbox Code Playgroud)

我所做的唯一更改不是创建交换分区和根分区,而是创建单个分区并将其命名为 lvm(名称无关紧要)。接下来我设置了 LUKS:

# Load the dm-crypt module (probably not nessesary)
modprobe dm-crypt

# Crypt the partition we named lvm (in my case that would be /dev/sda3)
cryptsetup -c aes-cbc-essiv:sha256 -v luksFormat -s 256 /dev/sda3

# Open the luks volume
cryptsetup luksOpen /dev/sda3 sda3-luks

# Setup a LVM physical volume 
lvm pvcreate /dev/mapper/sda3-luks

# Setup a volume group
lvm vgcreate vg0 /dev/mapper/sda3-luks
Run Code Online (Sandbox Code Playgroud)

之后设置实际卷:

# Fist setup the swap volume
lvm lvcreate -L 2048M vg0
# Then check how many 'extends' are free (Free PE) using lvm vgdisplay
# use that number to use up the rest of the space:
lvm lvcreate -l 7809 vg0
Run Code Online (Sandbox Code Playgroud)

其余的我们基本上遵循手册,除了您通常会为/dev/sda3(swap) 或/dev/sda4(root) 执行操作的地方,您现在将使用/dev/mapper/vg0-lvol0(swap) 和/dev/mapper/vg0-lvol1.

重要的是,在生成内核(我用于genkernel此)时,首先使用emerge -av cryptsetup. 然后genkernel使用以下参数运行:

genkernel --luks --lvm --busybox --menuconfig all
Run Code Online (Sandbox Code Playgroud)

确保设置内核以支持 LVM 和所选的散列和加密算法(在我的情况下aessha256)。然后继续按照手册进行操作,直到启动grub-config。

在运行之前,grub2-mkconfig您应该编辑文件/etc/defaults/grub。(我应该声明,为了记录,我不确定这是否是最好的解决方案,但它对我有用)。

在该文件中,我放置了以下内容(查找并取消注释参数):

GRUB_CMDLINE_LINUX="crypt_root=UUID=<uuid of sda3> dolvm"
Run Code Online (Sandbox Code Playgroud)

您可以使用 找到正确的 UUID ls -l /dev/disk/by-uuid。之后grub2-mkconfig应该找到打扰内核和 initramfs /boot。同样,按照手册进行操作,重新启动后,您应该会收到密码提示。

希望这对其他人有帮助。