Grub2

使用 LUKS+LVM 進行全盤加密的 Gentoo 設置指南

  • February 17, 2016

我正在尋找一種在 Gentoo 中進行以下設置的方法:

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

它與 Ubuntu 在進行圖形安裝時所做的設置基本相同。

我確實知道如何手動設置 LUKS 甚至 LVM 設置,但是在啟動時將它們組合在一起時會卡住。如何告訴核心和 grub 解鎖 LUKS 分區並掛載正確的 LVM 分區?

所以我確實想通了:

我按照手冊對磁碟進行了部分分區:

# 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

我所做的唯一更改不是創建交換分區和根分區,而是創建一個分區並將其命名為 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

之後設置實際卷:

# 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

對於其餘部分,我們基本上遵循手冊,除了您通常會為/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

確保將核心設置為支持 LVM 和選擇的散列和加密算法(在我的例子中aessha256)。然後繼續按照手冊進行操作,直到您啟動grub-config。

在執行之前,grub2-mkconfig您應該編輯該文件/etc/defaults/grub。(我應該聲明,我不確定這是否是最好的解決方案,但它對我有用)。

在該文件中,我放置了以下內容(查找並取消註釋參數):

GRUB_CMDLINE_LINUX="crypt_root=UUID=<uuid of sda3> dolvm"

您可以使用 找到正確的 UUID ls -l /dev/disk/by-uuid。之後grub2-mkconfig應該會在/boot. 同樣,按照手冊進行操作,重新啟動後,您應該會收到密碼提示。

希望這對其他人有幫助。

引用自:https://unix.stackexchange.com/questions/263696