¿Cómo recrear la partición de arranque EFI?

10

He instalado Fedora en mi máquina con /partición, swappartición y ESPpartición para arranque EFI.

Ahora, estaba instalando Elementary OS en lugar de Fedora.

  1. He formateado la /partición (/ dev / sda3)
  2. Formateó la partición de intercambio (/ dev / sda4)
  3. Pero no formateó la partición de arranque EFI (/ dev / sda1)

Ahora, cuando inicio, obtengo mi viejo menú de grub que fue instalado por Fedora. Solo puedo arrancar en Elementary OS:

  1. Entrar al menú de arranque.
  2. Seleccionar arranque desde archivo EFI
  3. Navegue por /dev/sda1/, para obtener el elementarydirectorio que contiene el grubx64.efiarchivo. Lo cual es /boot/efi/EFI/elementary/grubx64.efi.

Cómo puedo arreglar eso ? Pensé en el formateo de la partición de arranque /dev/sda1/con fat16o algo y luego volver a instalar GRUB en él.

Mi /dev/sda1ahora contiene esto:

root@rafael:/home/rafael# ls /boot/efi/
EFI  mach_kernel  System

root@rafael:/home/rafael# ls /boot/efi/EFI/
BOOT/       elementary/ fedora/     

root@rafael:/home/rafael# ls /boot/efi/EFI/fedora/
BOOT.CSV  fonts  gcdx64.efi  grub.cfg  grubx64.efi  MokManager.efi  shim.efi  shim-fedora.efi

root@rafael:/home/rafael# ls /boot/efi/EFI/elementary/
grubx64.efi

Aquí está mi efibootmgrsalida:

BootCurrent: 003D
Timeout: 0 seconds
BootOrder: 2001,2002,2003
Boot0000* Notebook Hard Drive
Boot0010* Internal CD/DVD ROM Drive
Boot0011* Internal CD/DVD ROM Drive (UEFI)
Boot0012* Fedora
Boot0013* Fedora
Boot0014* Fedora
Boot0015* Fedora
Boot0016* Fedora
Boot0017* Fedora
Boot0018* Fedora
Boot0019* Fedora
Boot001A* Fedora
Boot001B* Fedora
Boot001C* Fedora
Boot001D* Fedora
Boot001E* Fedora
Boot001F* elementary
Boot2001* USB Drive (UEFI)
Boot2002* Internal CD/DVD ROM Drive (UEFI)

Cualquier ayuda sería apreciada.

Rafael Adel
fuente
1
Solo puedo sugerir este conjunto de artículos, nunca usé EFI: rodsbooks.com/efi-bootloaders/index.html , rodsbooks.com/efi-bootloaders/index.html , rodsbooks.com/gdisk/whatsgpt.html .
Boris Burkov
1
¿Su implementación UEFI tiene algún tipo de menú de selección de arranque como F8 más o menos? Publique la efibootmgrsalida para que se pueda ver si la entrada de la primaria está allí (parece que no, pero para estar seguro). También es posible que desee volver a encontrar como su administrador de arranque. En caso de que desee echar un vistazo rápido a E17 en ese sistema, hay una imagen que simplemente funciona (enlace ISO 490M), así como instantáneas semanales . Probablemente sea inferior con respecto a E polis
Michael Shigorin
@MichaelShigorin Ok, he agregado efibootmgrresultados.
Rafael Adel

Respuestas:

5

No sé por qué estás usando grub en primer lugar. UEFI actúa como un cargador de arranque y permite seleccionar diferentes sistemas operativos o núcleos individuales desde un menú de arranque. Aunque hay algunas excepciones, generalmente no es necesario encadenar un segundo cargador de arranque, grub en este caso.

Usted menciona que instaló un sistema operativo primario en lugar de Fedora, lo que significa que solo necesita cargar un sistema operativo. Aquí presento una manera de hacerlo sin usar grub. El núcleo debe compilarse con EFI_STUB, si ese es el caso, puede consultar con

grep EFI_STUB /boot/config-<version>

Copie el kernel y initramfs a la ESP (partición del sistema EFI)

cp /boot/vmlinuz-<version> /boot/efi/EFI/elementary/vmlinuz-<version>.efi
cp /boot/initrd.img-<version> /boot/efi/EFI/elementary/initrd.img-<version>

Registrar el kernel como opción de arranque en UEFI

echo "root=UUID=<disk_uuid> ro quiet rootfstype=ext4 add_efi_memmap initrd=\\EFI\\elementary\\initrd.img-<version>" |
  iconv -f ascii -t ucs2 |
  efibootmgr \
    --create --gpt \
    --disk /dev/<disk> --part <partition_number> \
    --label "Elementary OS" \
    --loader "\\EFI\\elementary\\vmlinuz-<version>.efi" \
    --write-signature --append-binary-args -

El --diskargumento toma el nombre del dispositivo del disco, por ejemplo --disk /dev/sda, el --partargumento toma el número de partición del ESP, por ejemplo 4. Puede encontrar el número de partición ESP con el siguiente comando:

gdisk -l /dev/sda | awk '$6=="EF00" {print $1}'

Asegúrese de repetir los pasos después de cada actualización del kernel

O haces esto manualmente (solo repite los pasos anteriores) o escribes un pequeño script que hace el trabajo. Para automatizarlo completamente, la secuencia de comandos podría conectarse al procedimiento posterior a la instalación del núcleo, al procedimiento de actualización posterior de initramfs y al procedimiento postrm del núcleo (para eliminar la entrada de arranque UEFI). En realidad, no sé por qué esto no se hace por defecto en las distribuciones, son solo unas pocas líneas de código.

Marco
fuente
Hmmm, lo hice grep EFI_STUB /boot/config-3.2.0-49-genericpero no obtuve nada.
Rafael Adel
kernel 3.2 es demasiado antiguo (es de enero de 2012) para admitir EFI_STUB. Necesita al menos el núcleo 3.3.
Marco
@RafaelAdel Si no desea construir su propio núcleo, puede buscar una versión más nueva del núcleo en los repositorios de software. Elementary parece estar basado en Ubuntu y debería estar disponible un kernel 3.5 o 3.8. Los más nuevos tienen más probabilidades de tener EFI_STUB habilitado.
Marco
En realidad ahora hay el kernel 3.10.1. Lo voy a intentar.
Rafael Adel
2
Marco, aconsejar que el uso del código auxiliar sea irresponsable a menos que esté ansioso por guiar a cada usuario a través de lo que no es compatible con su distribución y no pasarlo como "hacer después de cada actualización del núcleo". Está bien tenerlo pero no tan bien automatizarlo, te lo digo como un tipo responsable del soporte UEFI en ALT Linux.
Michael Shigorin
2

Lo hice !

En primer lugar, eliminé todas las entradas de arranque innecesarias:

efibootmgr -b <entry_hex_number> -B

Luego, formatea la partición ESP con el FAT32sistema de archivos.

mkfs.vfat -F32 /dev/sda1

Luego instalado grub para /dev/sdaNO/dev/sda1

grub-install /dev/sda
Rafael Adel
fuente
3
No necesita grub-install que escribe MBR. No sé si el grub de distro hace las dos cosas juntas, pero lo que necesita es copiar grubx64.efi (o shim.efi) a / boot / efi / EFI / $ distro / y efibootmgr -c -l / boot /efi/EFI/$distro/grubx64.efi.
Lingzhu Xiang
1
grub-install ha aprendido a asimilar EFI (puede forzarlo con --target = x86_64-efi pero de todos modos efivars.ko debe estar cargado para entonces).
Michael Shigorin