![EFI 부팅 파티션을 공유하는 방법](https://rvso.com/image/1520700/EFI%20%EB%B6%80%ED%8C%85%20%ED%8C%8C%ED%8B%B0%EC%85%98%EC%9D%84%20%EA%B3%B5%EC%9C%A0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
gummiboot로 설정된 EFI 시스템에 두 개의 Archlinux가 설치되어 있습니다. 하나는 /dev/sda2에 뿌리를 두고 있고, 다른 하나는 /dev/sdb1에 뿌리를 두고 있습니다. 둘 다 EFI 시스템 파티션인 /dev/sda1을 /boot 파티션으로 사용하지만 커널 이미지를 다른 위치에 배치합니다.
/boot/loader/entries/arch.conf:
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=/dev/sda2 rw
/boot/loader/entries/arch-here.conf:
title HERE Arch Linux
linux /here-img/vmlinuz-linux
initrd /here-img/intel-ucode.img
initrd /here-img/initramfs-linux.img
options cryptdevice=/dev/sdb1:cryptroot root=/dev/mapper/cryptroot rw
NET에서 커널을 4.8.13에서 4.9로 업데이트하기 전까지는 괜찮았습니다 sdb
. 다음에 으로 부팅했을 때 sda
실패했습니다.
Warning: /lib/modules/4.8.13-1-ARCH/modules.devname not found
...
ERROR: device '/dev/sda2 not found. Skipping fsck.
...
로 다시 부팅하고 sdb
커널 4.8.13을 다시 설치했는데 다시 부팅할 수 있다는 것을 알았습니다 sda
. 그러나 이제 sdb
/dev/sdb1을 여는 데 필요한 암호화 후크를 로드하지 못했기 때문에 더 이상 으로 부팅할 수 없습니다 .
이 문제는 /dev/sdb1로 chroot하고 sda
4.9를 다시 설치하여 해결했습니다. 이로 인해 로 부팅할 수는 sdb
있었지만 sda
.
이제 설치 간에 전환할 때마다 커널 이미지를 다시 빌드해야 하는 루프에 갇혔습니다. 두 커널이 어떻게든 간섭하고 있는 것 같습니다.
sda
부팅할 때마다 설치 과정 에서 수행하는 단계는 다음과 같습니다 sdb
.
sudo cryptsetup open /dev/sdb1 cryptroot
sudo mount /dev/mapper/cryptroot /mnt/
sudo mount /dev/sda1 /mnt/boot/
chroot /mnt/
sudo pacman -U /var/cache/pacman/pkg/linux-4.8.13-1-x86_64.pkg.tar.xz /var/cache/pacman/pkg/nvidia-375.20-3-x86_64.pkg.tar.xz /var/cache/pacman/pkg/nvidia-utils-375.20-3-x86_64.pkg.tar.xz
sdb
이사하고 싶을 때 거치는 단계는 sda
비슷하지만 실패합니다.
/lib/modules/4.8.13-1-ARCH is not a valid kernel module directory
/lib/modules/4.9-1-ARCH를 /lib/modules/4.8.13-1-ARCH로 심볼릭 링크하여 이 문제를 해결했습니다.
나는 여기서 잘못된 일이 많지는 않더라도 적어도 하나의 일을 하고 있다고 확신합니다(그 심볼릭 링크는 끔찍한 해킹처럼 보입니다). 내 커널이 어떻게 든 간섭하는 것 같습니다. 이 문제를 어떻게 해결할 수 있나요?
답변1
나는 성공했다도움을 좀 받아Arch 포럼에서 이 내용을 여기에서 공유하고 싶었습니다.
각 시스템은 서로 다른 initramfs 이미지에 쓰고 있었지만 둘 다 동일한 커널을 덮어쓰고 있었습니다. 그만큼리눅스저장소에 포함된 패키지는 항상 /boot/vmlinuz-linux에 이미지를 배치합니다. 몇 가지 옵션이 논의되었습니다.
- 한 시스템에 다른 메인라인 Linux 패키지를 설치하십시오.
- 커널 이름을 바꾸는 AUR에서 사용자 정의 Linux 패키지를 빌드합니다.
- 각 시스템마다 별도의 EFI 파티션을 사용하십시오.
저는 1을 선택했는데 가장 단순해 보였습니다. 하나의 시스템에 설치하는 linux-lts
대신 linux
커널이 간섭하는 것을 방지했습니다. 이제 부팅 항목은 다음과 같습니다.
/boot/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=/dev/sda2 rw
/boot/loader/entries/arch-here.conf
title HERE Arch Linux
linux /vmlinuz-linux-lts
initrd /initramfs-linux-lts.img
options cryptdevice=/dev/sdb1:cryptroot root=/dev/mapper/cryptroot rw
이 접근 방식을 사용하려는 NVIDIA 사용자 nvidia-lts
는 nvidia
.