암호화를 사용한 Arch Linux 설정(LUKS의 LVM)

암호화를 사용한 Arch Linux 설정(LUKS의 LVM)

Arch Linux에 대한 암호화를 설정하고 싶습니다. 튜토리얼을 찾았습니다.아치스 위키, 두 번째 옵션(LUKS의 LVM)이 나에게는 최선의 선택이라고 생각합니다. 제가 사용하고 싶은 파티션은 다음과 같습니다(Thinkpad X1 Carbon, ~500GB SSD, 16GB RAM).

  1. [정렬 간격] 1MB
  2. /boot256MB(FAT 32)
  3. 16GB 스왑(메모리 크기)
  4. /(루트) 64GB(ext4)
  5. /var8GB(ext4)
  6. /tmp4GB(확장4)
  7. /home~400GB(ext4, 나머지)

디스크 이름은 입니다 nvme0n1. 설치 프로그램(2020년 9월 버전)을 시작하고 WiFi에 연결한 후 디스크를 임의의 데이터로 덮어씁니다.

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

그런 다음 새 GPT 파티션 스키마를 설정합니다.

# parted -s /dev/nvme0n1 mklabel gpt

다음으로, 앞에 1MB의 정렬 간격이 있는 부팅 파티션을 만들고 포맷했습니다.

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

이제 Wikipedia가 불분명한 부분이 나옵니다. (다른 장치에서 사용할 수 있다는 것만 언급되어 있지만 /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

Wiki에서 언급한 대로 후크를 추가 encrypt하고 다음을 추가했습니다 lvm2./etc/mkinitcpio.conf

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

일반적인 설정 작업(루트 비밀번호 설정, 기본 패키지 설치, 시간대, 로케일, 언어, 호스트 이름 설정)을 진행합니다.

# 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

이제 부트로더가 나옵니다. 여기서는 전통적으로 grub 대신 systemd 부트로더를 사용합니다. 설정 방법은 다음과 같습니다.

# 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두 번째 파티션( )을 생성해야 한다는 것입니다. 또 다른 의심은 내 부트로더에 뭔가 문제가 있다는 것입니다. 일반 설정에서는 항상 UUID 대신 PARTUUID를 사용합니다. (단, 출력에는 PARTUUID가 없으므로 blikd문제가 아닐 수도 있습니다.)

답변1

@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에게도 감사드립니다.

관련 정보