Arch-Linux

帶加密的 Arch Linux 設置(LUKS 上的 LVM)

  • September 26, 2020

我想用加密設置 Arch Linux。我在Arch wiki上找到了教程,並認為第二個選項(LUKS 上的 LVM)對我來說是最好的選擇。這是我想使用的分區(Thinkpad X1 Carbon,~ 500 GB SSD,16 GB RAM):

  1. $$ alignment gap $$1 MB
  2. /boot256 MB (FAT 32)
  3. 交換 16 GB(記憶體大小)
  4. /(根) 64 GB (ext4)
  5. /var8 GB (ext4)
  6. /tmp4 GB (ext4)
  7. /home~400 GB(ext4,其餘)

該磁碟具有名稱nvme0n1。啟動安裝程序(2020 年 9 月版)並連接到 WiFi 後,我用隨機數據覆蓋磁碟:

# shred --random-source=/dev/urandom --iterations=3 /dev/nvme0n1

然後我設置了一個新的 GPT 分區架構:

# parted -s /dev/nvme0n1 mklabel gpt

接下來,我創建並格式化一個引導分區,其前面有 1 MB 的對齊間隙。

# parted -s /dev/nvme0n1 mkpart boot fat32 1MiB 257MiB
# parted -s /dev/nvme0n1 set 1 esp on
# mkfs.fat -F 32 /dev/nvme0n1p1

現在到了維基不清楚的部分。(它只提到可以/boot在不同的設備上安裝,但我沒有。)我決定創建另一個分區,我的加密卷將位於該分區之上:

# parted -s /dev/nvme0n1 mkpart cryptlvm 257MiB '100%'

這將創建/dev/nvme0n1p2具有剩餘磁碟大小的第二個分區。(也許這一步會導致問題。)我繼續設置加密:

# cryptsetup luksFormat /dev/nvme0n1p2     # YES, entering passphrase  twice
# cryptsetup open /dev/nvme0n1p2 cryptlvm  # entering passphrase
# pvcreate /dev/mapper/cryptlvm
# vgcreate VolumeGroup /dev/mapper/cryptlvm

然後我如上所述創建分區:

# lvcreate -L 16G VolumeGroup -n swap
# lvcreate -L 64G VolumeGroup -n root
# lvcreate -L 8G VolumeGroup -n var
# lvcreate -L 4G VolumeGroup -n tmp
# lvcreate -l '100%FREE' VolumeGroup -n home

現在正在格式化分區:

# mkswap /dev/VolumeGroup/swap
# mkfs.ext4 -F /dev/VolumeGroup/root
# mkfs.ext4 -F /dev/VolumeGroup/var
# mkfs.ext4 -F /dev/VolumeGroup/tmp
# mkfs.ext4 -F /dev/VolumeGroup/home

並安裝:

# mount /dev/VolumeGroup/root /mnt

# mkdir /mnt/boot
# mount /dev/nvme0n1p1 /mnt/boot

# mkdir /mnt/var
mount /dev/VolumeGroup/var /mnt/var

# mkdir /mnt/tmp
mount /dev/VolumeGroup/tmp /mnt/tmp

# mkdir /mnt/home
mount /dev/VolumeGroup/home /mnt/home

系統現在可以通過以下方式引導lvm2

# pacstrap /mnt base liux linux-firmware lvm2

我還創建和儲存fstab

# genfstab -U /mnt >> /mnt/etc/fstab

chroot進入引導系統:

# arch-chroot /mnt

正如維基中提到的,我添加了鉤子encrypt和:lvm2``/etc/mkinitcpio.conf

HOOKS=(base udev autodetect keyboard keymap consolefont modconf block filesystems fsck encrypt lvm2)

我繼續進行通常的設置任務(設置 root 密碼、安裝基礎包、設置時區、區域設置、語言、主機名):

# passwd
# pacman -S iw wpa_supplicant dialog intel-ucode netctl dhcpcd
# ln -sf /usr/share/zoneinfo/Europe/Zurich /etc/localtime
# timedatectl set-ntp true
# hwclock --systohc
# echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen
# locale-gen
# echo 'LANG=en_US.UTF-8' > /etc/locale.conf
# echo -n 'x1' > /etc/hostname

現在是引導載入程序。在這裡,我傳統上使用 systemd 引導載入程序而不是 grub。這是我的設置方式:

# systemd-machine-id-setup
# bootctl --path=/boot install

我計算出根分區的 UUID(不是 PARTUUID)如下:

# blkid | grep /dev/VolumeGroup/root | egrep -o 'UUID="[^"]!"'
UUID="6d5b4777-2621-4bec-8bbc-ebd4b5ba9faf"

然後我在以下位置創建引導條目/boot/loader/entries/arch.conf

title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options cryptdevice=UUID=6d5b4777-2621-4bec-8bbc-ebd4b5ba9faf:cryptlvm root/dev/VolumeGroup/root

還有一個協議/boot/loader/loader.conf

default arch
timeout 0
editor  0

最後但並非最不重要的一點是mkinitcpio,在離開重新啟動之前,我執行了:

# mkinitcpio -P
# exit
# umount -R /mnt
# shutdown -h now

這就是我的設置程序。我移除 USB 加密狗並啟動系統。引導載入程序出現,但隨後我得到以下螢幕:

:: running early hook [udev]
Starting version 246.6-1-arch
:: running early hook [lvm2]
:: running hook [udev]
:: Triggering uevents...
:: running hook [encrypt]
Waiting 10 seconds for device /dev/disk/by-uuid/6d5b4777-2621-4bec-8bbc-ebd4b5ba9faf ...
Waiting 10 seconds for device /dev/VolumeGroup/root ...
ERROR: device '/dev/VolumeGroup/root' not found. Skippng fsck.
:: mounting '/dev/VolumeGroup/root' on real root
mount: /new_root: no filesystem type specified.
You are now being dropped into an emergency shell.

現在我很不知道我做錯了什麼。/dev/nvme0n1p2一種懷疑是我需要創建的第二個分區 ( )。另一個懷疑是我對引導載入程序做錯了。在正常設置中,我總是使用 PARTUUID 而不是 UUID。(但是, 的輸出中沒有 PARTUUID blikd,所以這可能不是問題。)

由於@frostschutz 還沒有寫出他對問題的正確解決方案作為答案,我將在這裡快速總結問題:我選擇了錯誤分區的 UUID。下面的根分區/dev/VolumeGroup/root不是要選擇的,而是實際的分區/dev/nvme0n1p2。以下是提取該 UUID 的方法:

# uuid=$(blkid --match-tag UUID -o value /dev/nvme0n1p2)

然後可以在引導載入程序條目配置中使用它:

# cat <<EOF >/boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options cryptdevice=UUID=${uuid}:cryptlvm root=/dev/volgrp/root
EOF

我在我的私人網站上總結了整個過程。還要感謝 @Cbhihe 關於分區大小的建議。

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