Come ricreare la partizione di avvio EFI?


10

Ho installato Fedora sul mio computer con /partizione, swappartizione e ESPpartizione per l'avvio EFI.

Ora, stavo installando il sistema operativo elementare invece di Fedora.

  1. Ho formattato la /partizione (/ dev / sda3)
  2. Formattata la partizione di swap (/ dev / sda4)
  3. Ma non ha formattato la partizione di avvio EFI (/ dev / sda1)

Ora quando avvio, ottengo il mio vecchio menu GRUB che è stato installato da Fedora. Posso solo avviare nel sistema operativo elementare da:

  1. Accesso al menu di avvio.
  2. Selezione di avvio dal file EFI
  3. Navigare attraverso /dev/sda1/, per ottenere la elementarydirectory che contiene il grubx64.efifile. Quale è /boot/efi/EFI/elementary/grubx64.efi.

Come posso ripararlo ? Ho pensato di formattare la partizione di avvio /dev/sda1/con fat16o qualcosa del genere, quindi reinstallare grub su di essa.

Il mio /dev/sda1ora contiene questo:

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

Ecco il mio efibootmgroutput:

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)

Qualsiasi aiuto sarebbe apprezzato.


1
Posso solo suggerire questo set di articoli, non ho mai usato EFI da solo: rodsbooks.com/efi-bootloaders/index.html , rodsbooks.com/efi-bootloaders/index.html , rodsbooks.com/gdisk/whatsgpt.html .
Boris Burkov,

1
La tua implementazione UEFI ha qualche tipo di menu di selezione di avvio come F8 o giù di lì? Si prega di pubblicare l' efibootmgroutput in modo da poter vedere se la voce elementare è presente (sembra che non lo sia ma per essere sicuri). Potrebbe piacerti anche refind come boot manager. Nel caso in cui desideri dare una rapida occhiata a E17 su quel sistema, c'è un'immagine che funziona (collegamento ISO 490M) e istantanee settimanali . Probabilmente è inferiore rispetto a E polis
Michael Shigorin,

@MichaelShigorin Ok, ho aggiunto l' efibootmgroutput.
Rafael Adel,

Risposte:


5

Non so perché stai usando grub in primo luogo. UEFI funge da boot loader e consente di selezionare diversi sistemi operativi o singoli kernel da un menu di avvio. Sebbene ci siano alcune eccezioni, di solito non è necessario concatenare un secondo boot loader, grub in questo caso.

Hai detto che hai installato un sistema operativo elementare invece di Fedora, il che significa che devi solo caricare un sistema operativo. Qui presento un modo per farlo senza usare grub. Il kernel deve essere compilato con EFI_STUB, in tal caso è possibile verificarlo

grep EFI_STUB /boot/config-<version>

Copia il kernel e initramfs sull'ESP (partizione di 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>

Registra il kernel come opzione di avvio in 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 -

L' --diskargomento prende il nome del dispositivo del disco, ad es --disk /dev/sda. L' --partargomento prende il numero di partizione dell'ESP, ad es. 4. È possibile trovare il numero di partizione ESP con il seguente comando:

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

Assicurarsi di ripetere i passaggi dopo ogni aggiornamento del kernel

O questo manualmente (basta ripetere i passaggi precedenti) o si scrive un piccolo script che fa il lavoro. Per automatizzarlo completamente, lo script potrebbe essere collegato alla procedura post-installazione del kernel, alla procedura post-aggiornamento di initramfs e alla procedura postrm del kernel (per rimuovere la voce di avvio UEFI). In realtà, non so perché questo non sia fatto di default nelle distribuzioni, sono solo poche righe di codice.


Hmmm, l'ho fatto grep EFI_STUB /boot/config-3.2.0-49-genericma non ho ottenuto nulla.
Rafael Adel,

il kernel 3.2 è troppo vecchio (è di gennaio 2012) per supportare EFI_STUB. È necessario almeno il kernel 3.3.
Marco,

@RafaelAdel Se non si desidera creare il proprio kernel, è possibile verificare la presenza di una versione del kernel più recente nei repository software. Elementare sembra essere basato su Ubuntu e dovrebbe essere disponibile un kernel 3.5 o 3.8. È più probabile che quelli più recenti abbiano EFI_STUB abilitato.
Marco,

In realtà ora c'è il kernel 3.10.1. Ci proverò.
Rafael Adel,

2
Marco, consigliare l'uso di stub è irresponsabile a meno che tu non sia desideroso di guidare ogni utente attraverso ciò che non è supportato dalla sua distribuzione e non trasmetterlo come "fai dopo ogni aggiornamento del kernel". Va bene avere, ma non così bene da automatizzare, te lo dico come un ragazzo che è responsabile del supporto UEFI in ALT Linux.
Michael Shigorin,

2

L'ho fatto !

Prima di tutto, ho rimosso tutte le voci di avvio non necessarie da:

efibootmgr -b <entry_hex_number> -B

Quindi, Riformattazione della partizione ESP con FAT32filesystem.

mkfs.vfat -F32 /dev/sda1

Quindi installato grub su /dev/sdaNOT/dev/sda1

grub-install /dev/sda

3
Non è necessario grub-install che scrive MBR. Non so se la distro's grub fa le due cose insieme, ma ciò di cui hai bisogno è copiare grubx64.efi (o shim.efi) in / boot / efi / EFI / $ distro / e efibootmgr -c -l / boot /efi/EFI/$distro/grubx64.efi.
Lingzhu Xiang,

1
grub-install ha imparato a grok EFI (puoi forzarlo con --target = x86_64-efi ma efivars.ko deve essere comunque caricato da quel momento).
Michael Shigorin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.