帶加密的 Arch Linux 設置(LUKS 上的 LVM)
我想用加密設置 Arch Linux。我在Arch wiki上找到了教程,並認為第二個選項(LUKS 上的 LVM)對我來說是最好的選擇。這是我想使用的分區(Thinkpad X1 Carbon,~ 500 GB SSD,16 GB RAM):
- $$ alignment gap $$1 MB
/boot
256 MB (FAT 32)- 交換 16 GB(記憶體大小)
/
(根) 64 GB (ext4)/var
8 GB (ext4)/tmp
4 GB (ext4)/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。(但是, 的輸出中沒有 PARTUUIDblikd
,所以這可能不是問題。)
由於@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 關於分區大小的建議。