Como compartilhar uma partição de inicialização EFI

Como compartilhar uma partição de inicialização EFI

Eu tenho duas instalações do Archlinux em um sistema EFI configurado com gummiboot. Um está enraizado em /dev/sda2, o outro em /dev/sdb1. Ambos usam /dev/sda1, a partição do sistema EFI, como partição /boot, mas colocam suas imagens de kernel em locais diferentes:

/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

Tudo bem até que eu atualizei o kernel de 4.8.13 para 4.9 no sdb. Na próxima vez que inicializei sda, ele falhou com

Warning: /lib/modules/4.8.13-1-ARCH/modules.devname not found
...
ERROR: device '/dev/sda2 not found. Skipping fsck.
...

Inicializei novamente sdb, reinstalei o kernel 4.8.13 e descobri que poderia inicializar sdanovamente. No entanto, agora eu não conseguia mais inicializar sdb, pois ele não conseguiu carregar o gancho de criptografia necessário para abrir/dev/sdb1.

Resolvi isso fazendo chroot em /dev/sdb1 sdae instalando o 4.9 novamente. Isso me permitiu inicializar, sdbmas não sda.

Agora estou preso em um loop onde preciso reconstruir minha imagem do kernel toda vez que quiser alternar entre instalações. Parece que os dois kernels estão interferindo de alguma forma.

Aqui estão as etapas que executo na minha sdainstalação sempre que desejo inicializar 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

As etapas que sigo sdbquando quero mudar sdasão semelhantes, mas falham com

/lib/modules/4.8.13-1-ARCH is not a valid kernel module directory

Eu resolvo isso vinculando /lib/modules/4.9-1-ARCH a /lib/modules/4.8.13-1-ARCH.

Tenho certeza de que estou fazendo pelo menos uma, senão muitas coisas erradas aqui (esse link simbólico parece um hack horrível). Parece que meus kernels estão interferindo de alguma forma. Como posso consertar isso?

Responder1

Eu conseguiObter ajudanos fóruns do Arch e queria compartilhá-lo aqui.

Embora cada sistema estivesse gravando em uma imagem initramfs diferente, ambos estavam sobrescrevendo o mesmo kernel. OlinuxO pacote incluído nos repositórios sempre coloca a imagem em /boot/vmlinuz-linux. Algumas opções foram discutidas:

  1. Instale um pacote Linux principal diferente em um sistema.
  2. Crie um pacote Linux personalizado a partir do AUR que renomeie o kernel.
  3. Use uma partição EFI separada para cada sistema.

Optei por 1, pois parecia o mais simples. A instalação linux-ltsem vez de linuxem um sistema evitou a interferência dos kernels. As entradas de inicialização agora ficam assim:

/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

Observe que os usuários da nvidia que desejam adotar essa abordagem precisarão instalar nvidia-ltsem vez do nvidia.

informação relacionada