저는 기본 커널 버전 4.9.6 및 ZoL 버전 0.7.0이 포함된 업데이트된 버전의 Arch Linux를 실행하고 있으며 부팅 시 암호화된 비루트 풀을 가져오고 싶습니다. 수영장은 레이드 1 미러입니다.
암호화된 컨테이너는 다음에 의해 만들어집니다.
cryptsetup -y -v luksFormat /dev/nvme0n1p3
그리고
cryptsetup -y -v luksFormat /dev/nvme1n1p3
모든 비밀번호에 동일한 비밀번호를 사용했습니다.
컨테이너를 수동으로 열고 다음을 통해 풀을 가져올 수 있습니다.
cryptsetup open /dev/nvme0n1p3 enc0
cryptsetup open /dev/nvme1n1p3 enc1
zpool import -d /dev/mapper zeb
cryptosetup 명령을 실행하면 비밀번호를 입력하고 수락하라는 메시지가 표시됩니다.
내 mkinitcpio 파일에는 systemd
, zfs
및 sd-encrypt
후크가 포함되어 있습니다. 또한 모듈 및 가 포함 되어 있습니다 dm_mod
. 이것은 내가 온라인에서 찾은 정보의 일부에 대한 맹목적인 시도와 같습니다. dm_crypt
aes_x86_64
raid1
systemd-boot를 사용하고 있지만 mkinitcpio 구성을 올바르게 설정하는 것이 핵심인 것 같습니다. 내 부팅 파티션이 암호화되지 않았습니다.
여기서도 나의 유일한 목표는 부팅 시 암호화된 ZFS 풀을 자동으로 가져오는 것입니다(비밀번호를 묻는 메시지 표시). 암호화되지 않은 풀에서는 이 작업을 수행하는 데 아무런 문제가 없습니다.
답변1
댓글을 달 수 있는 평판이 50개가 없어서 여기에 질문을 게시하겠습니다. 당신의 rootfs는 암호화되지 않았나요? 그러면 부팅할 때 cryptsetup 프롬프트가 표시되지 않습니까? 비밀번호 프롬프트가 표시되지 않으면 initramfs의 압축을 풀고 init 파일을 수정하고 rootfs를 설치한 후 어딘가에 다음 줄을 추가하는 것이 좋습니다. cryptsetup open /dev/nvme0n1p3 enc0 && cryptsetup open /dev/nvme1n1p3 enc1 && zpool import -d /dev/mapper zeb
얼마 전 원격 서버에서 ZFS를 사용하여 LUKS 암호화 ROOTFS의 원격 SSH 잠금 해제를 추가해야 했습니다. init 파일을 수정하고 여기에 dropbear를 추가하고 시작한 다음 fifo에서 비밀번호를 허용하도록 cryptsetup 명령을 수정하는 것 외에는 선택의 여지가 없었습니다. 이를 위해 bash 스크립트를 만들었으므로 initramfs를 업데이트하면 bash 스크립트는 initramfs의 압축을 풀고 변경 사항을 넣은 다음 다시 패키지합니다. 하지만 저는 아름다운 genkernel인 gentoo를 사용하고 있습니다. Genkernel에는 ZFS 및 cryptsetup(지정한 경우)에 대한 후크가 포함되어 있습니다. 아치 리눅스에서는 어떤지 모르겠습니다. genkernel/dracut을 사용하여 커널을 빌드하도록 선택하면 initramfs에 cryptsetup 및 zfs 후크가 아직 포함되지 않은 경우 쉽게 포함할 수 있습니다. 어쨌든, init 파일을 수정하면 쉽게 할 수 있습니다. 한번 시도해 보고 여기에 결과를 게시하세요. initramfs는 다른 방법을 사용하여 압축될 수 있으므로 Archlinux에서 압축을 푸는 방법을 배우십시오. 내 입장에서는 genkernel을 수정하여 cpio로 생성하고 cpio 명령을 사용하여 압축을 풀거나 다시 압축했습니다.
고쳐 쓰다: mkinitcpio.conf를 편집하고 HOOKS의 "파일 시스템" 앞에 2개의 후크 "encryption zfs"를 추가해야 합니다. 그런 다음 /etc/crypttab.initramfs#에서 잠금을 해제해야 하는 luks 장치를 정의해야 합니다( google crypttab ) 이 파일은 차세대 initramfs에 포함될 것이므로 이제 최소한 잠금을 해제할 수 있습니다. 다음 재부팅 시 ZFS가 자동 가져오기를 수행할 수도 있지만, 그렇지 않은 경우 다음을 수행하십시오.
/usr/lib/initcpio/install/zfsmount 파일을 생성합니다.
#!/bin/bash
build() {
add_runscript
}
/usr/lib/initcpio/hooks/zfsmount 파일 생성
#!/usr/bin/ash
run_hook() {
zpool import mypool
}
그리고 mkinitcpio.conf의 HOOKS에 있는 "Filesystem" 앞이나 뒤에 "zfsmount"를 추가하세요.
물론 mkinitcpio를 사용하여 initramfs를 재생성하세요.
참고자료: https://wiki.archlinux.org/index.php/Installing_Arch_Linux_on_ZFS