다음 파티션 레이아웃으로 Debian 11을 설치했습니다.
길 | 체재 | 마운트 포인트 |
---|---|---|
/dev/nvme0n1p7 |
ext4 (암호화 없음) |
/boot (데비안 11) |
/dev/nvme0n1p8 |
dm-crypt LUKS2 |
LVM2 (이름 vg_main ) |
/dev/mapper/vg_main-lv_swap |
swap |
- |
/dev/mapper/vg_main-lv_debian |
ext4 |
/ (데비안 11) |
/dev/mapper/vg_main-lv_ubuntu |
ext4 |
/ (우분투 22.04) |
Ubuntu 의 경우 /boot
루트 파일 시스템( /dev/mapper/vg_main-lv_ubuntu
) 내에 있습니다. 파티션 /boot
잠금을 해제하는 암호화되지 않은 파티션에 있는 Debian 커널을 부팅한 후 Ubuntu 커널을 kexec하고 싶습니다 LUKS2
.
나는 사용하고 싶다systemd kexec 전략은 여기에 설명되어 있습니다..
특정 커널 매개변수를 Debian 11에 전달하여( GRUB2
이 작업을 위해 특별히 작성된 항목에서 이 작업을 수행하겠습니다) systemd에게 Ubuntu 22.04 커널을 간단히 kexec하도록 지시할 수 있는 방법이 있습니까?
해결책:
따라 일하다@텔콤권장 사항은 다음과 같습니다.
/etc/systemd/system/ubuntu-kexec.target
[Unit]
Description=Ubuntu kexec target
Requires=sysinit.target ubuntu-kexec.service
After=sysinit.target ubuntu-kexec.service
AllowIsolate=yes
/etc/systemd/system/ubuntu-kexec.service
[Unit]
Description=Ubuntu kexec service
DefaultDependencies=no
Requires=sysinit.target
After=sysinit.target
Before=shutdown.target umount.target final.target
[Service]
Type=oneshot
ExecStart=/usr/bin/mount -o defaults,ro /dev/mapper/vg_main-lv_ubuntu /mnt
ExecStart=/usr/sbin/kexec -l /mnt/boot/vmlinuz --initrd=/mnt/boot/initrd.img --command-line="root=/dev/mapper/vg_main-lv_ubuntu resume=UUID=[MY-UUID-HERE] ro quiet splash"
ExecStart=/usr/bin/systemctl kexec
[Install]
WantedBy=ubuntu-kexec.target
답변1
ubuntu-kexec.target
기본적 으로 다음과 같은 간단한 버전을 설정하고 싶을 수도 있습니다 multi-user.target
.
[Unit]
Description=Kexec an Ubuntu kernel from within an encrypted partition
Requires=basic.target #You might get by with just sysinit.target here
Conflicts=rescue.service rescue.target
Wants=ubuntu-kexec.service
After=basic.target rescue.service rescue.target ubuntu-kexec.service
AllowIsolate=yes
ubuntu-kexec.service
그러면 kexec 명령을 실행하기 위해 생성할 항목이 호출됩니다 .
커널 매개변수는 systemd.unit=ubuntu-kexec.target
, 호출 방법과 유사하거나 필요한 경우 입니다 rescue.target
.emergency.target
아이디어는 파일 시스템을 마운트하기 위해 ubuntu-kexec.target
끌어들이 basic.target
거나 그냥 끌어들이는 것입니다. 그런 다음 파일 시스템을 끌어와 실제 명령줄을 실행합니다.sysinit.target
ubuntu-kexec.service
kexec
내가 아는 한 옵션은 하나만 지정할 수 있고 , "보통대로 / 로 부팅 한 다음 끌어오기 " systemd.unit=
를 지정해야 하므로 필요한 모든 세부 사항을 지정하려면 유형 단위가 필요합니다 .sysinit.target
basic.target
ubuntu-kexec.service
*.target