Arch Linux에 대한 암호화를 설정하고 싶습니다. 튜토리얼을 찾았습니다.아치스 위키, 두 번째 옵션(LUKS의 LVM)이 나에게는 최선의 선택이라고 생각합니다. 제가 사용하고 싶은 파티션은 다음과 같습니다(Thinkpad X1 Carbon, ~500GB SSD, 16GB RAM).
- [정렬 간격] 1MB
/boot
256MB(FAT 32)- 16GB 스왑(메모리 크기)
/
(루트) 64GB(ext4)/var
8GB(ext4)/tmp
4GB(확장4)/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에게도 감사드립니다.