Partitioning (LUKS)
LVM on LUKS
LVM on LUKS has the benefit of being able to encrypt an entire drive (useful for laptops with encrypted swap for resume). The LVM container cannot, however, span multiple disks.
NOTE: This partitioning scheme does NOT include an LVM cache device. However, it is technically possible to add a cache device to it.
This guide assumes the following:
- This is used on a laptop computer with resume capabilities (Swap partition)
- There is only one drive:
/dev/nvme0n1
- The root file system will be btrfs, with subvolumes for
/
and/home
- To tighten security, this setup assumes a unified kernel image and booting via EFISTUB, with the ESP mounted at
/efi
. Extra steps will be necessary to make the machine bootable.
Preparing the drive
-
List available disks
fdisk -l
-
Start partitionaing tool for primary disk (
cfdisk
is a little easier to use as it has a nice TUI)WARNING: Make sure to select your actually desired device!
cfdisk /dev/nvme0n1
-
Partition with the following scheme
FS Type Size Mount Point Comment vfat 1G /efi EFI System LUKS (remaining) Linux file system
Creating the LUKS container
-
Create the LUKS container and enter a passphrase
WARNING: Do NOT forget your passphrase! In case of loss you won't be able to access the data inside the container anymore!
cryptsetup luksFormat /dev/nvme0n1p2
-
Open the newly created LUKS container
NOTE:
cryptlvm
is used as an example here. Use whatever you like.# Open the container with the name `cryptlvm`cryptsetup open /dev/nvme0n1p2 cryptlvm
Creating LVM inside the LUKS container
-
Create an LVM physical volume inside LUKS container
pvcreate /dev/mapper/cryptlvm
-
Create the volume group:
vgcreate vg0 /dev/mapper/cryptlvm
-
Create the logical volumes
NOTE: When using resume, make
lv_swap
as large as RAM. In this example the machine has 16 GB of RAM.lvcreate -L 16G -n lv_swap vg0 # Swap as big as RAM (16 GB) lvcreate -l 100%FREE -n lv_root vg0 # Root file system
Formatting devices
- Create partitions
mkfs.fat -F 32 /dev/nvme0n1p1 # EFI System Partition mkfs.btrfs /dev/mapper/vg0-lv_root # Btrfs root volume mkswap /dev/mapper/vg0-lv_swap # Swap space
- Create Btrfs subvolumes
# First, mount the root file system mount /dev/mapper/vg0-lv_root /mnt # Create subvolumes btrfs subvolume create /mnt/@ btrfs subvolume create /mnt/@home
- Mount partitions
# Unmount the root file system umount -R /mnt # Mount the @ subvolume mount /dev/mapper/vg0-lv_root -o noatime,compress-force=zstd,space_cache=v2,subvol=@ /mnt # Create mountpoints mkdir -p /mnt/{efi,home} # Mount the remaining partitions/subvolumes mount /dev/nvme0n1p1 /mnt/efi mount /dev/mapper/vg0-lv_root -o noatime,compress-force=zstd,space_cache=v2,subvol=@home /mnt/home # Activate swap swapon /dev/mapper/vg0-lv_swap