Wie erstelle ich eine EFI-Bootpartition neu?

10

Ich habe Fedora auf meinem Computer mit /Partition, swapPartition und ESPPartition für das EFI-Booten installiert .

Jetzt habe ich Elementary OS anstelle von Fedora installiert.

  1. Ich habe die /Partition formatiert (/ dev / sda3)
  2. Formatierte die Swap-Partition (/ dev / sda4)
  3. Aber nicht formatieren Sie die EFI - Boot - Partition (/ dev / sda1)

Wenn ich jetzt starte, bekomme ich mein altes Grub-Menü, das von Fedora installiert wurde. Ich kann Elementary OS nur starten, indem ich:

  1. Aufrufen des Startmenüs.
  2. Boot aus EFI-Datei auswählen
  3. Navigieren Sie durch /dev/sda1/, um das elementaryVerzeichnis abzurufen , das die grubx64.efiDatei enthält . Welches ist /boot/efi/EFI/elementary/grubx64.efi.

Wie kann ich das beheben? Ich dachte daran, die Boot-Partition /dev/sda1/mit fat16oder etwas zu formatieren und dann grub darauf neu zu installieren.

Mein /dev/sda1jetzt enthält dies:

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

Hier ist meine efibootmgrAusgabe:

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)

Jede Hilfe wäre dankbar.

Rafael Adel
quelle
1
Ich kann nur diese Artikel vorschlagen, die EFI selbst nie verwendet hat: rodsbooks.com/efi-bootloaders/index.html , rodsbooks.com/efi-bootloaders/index.html , rodsbooks.com/gdisk/whatsgpt.html .
Boris Burkov
1
Verfügt Ihre UEFI-Implementierung über ein Boot-Auswahlmenü wie F8 oder so? Bitte poste die efibootmgrAusgabe, damit du sehen kannst, ob der Eintrag von Elementary vorhanden ist (anscheinend nicht, aber um sicher zu sein). Möglicherweise möchten Sie auch als Boot-Manager erneut suchen . Nur für den Fall, dass Sie einen kurzen Blick auf E17 auf diesem System werfen möchten , gibt es ein funktionierendes Bild (490M ISO-Link) sowie wöchentliche Schnappschüsse . Es ist wahrscheinlich minderwertig in Bezug auf E polis
Michael Shigorin
@ MichaelShigorin Ok, ich habe efibootmgrAusgabe hinzugefügt .
Rafael Adel

Antworten:

5

Ich weiß nicht, warum Sie Grub überhaupt verwenden. UEFI fungiert als Bootloader und ermöglicht die Auswahl verschiedener Betriebssysteme oder einzelner Kernel aus einem Boot-Menü. Obwohl es einige Ausnahmen gibt, ist es normalerweise nicht erforderlich, einen zweiten Bootloader zu verketten, in diesem Fall grub.

Sie erwähnen, dass Sie anstelle von Fedora ein elementares Betriebssystem installiert haben , was bedeutet, dass Sie nur ein Betriebssystem laden müssen . Hier präsentiere ich einen Weg, dies ohne Verwendung von Grub zu tun . Der Kernel muss mit EFI_STUB kompiliert werden, wenn dies der Fall ist, können Sie dies überprüfen

grep EFI_STUB /boot/config-<version>

Kopieren Sie den Kernel und initramfs in das ESP (EFI-Systempartition).

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

Registrieren Sie den Kernel als Boot-Option 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 -

Das --diskArgument nimmt den Gerätenamen der Festplatte an, z. B. --disk /dev/sdadas --partArgument die Partitionsnummer des ESP, z. B. 4. Sie können die ESP-Partitionsnummer mit dem folgenden Befehl ermitteln:

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

Stellen Sie sicher, dass Sie die Schritte nach jedem Kernel-Update wiederholen

Entweder Sie dies manuell (wiederholen Sie einfach die obigen Schritte) oder Sie schreiben ein kleines Skript, das die Arbeit erledigt. Um es vollständig zu automatisieren, könnte das Skript in die Nachinstallationsprozedur des Kernels, in die Nachaktualisierungsprozedur von initramfs und in die Postrm-Prozedur des Kernels eingebunden werden (um den UEFI-Starteintrag zu entfernen). Eigentlich weiß ich nicht, warum dies in den Distributionen nicht standardmäßig gemacht wird, es sind nur ein paar Codezeilen.

Marco
quelle
Hmmm, ich habe grep EFI_STUB /boot/config-3.2.0-49-genericaber nichts bekommen.
Rafael Adel
Kernel 3.2 ist zu alt (ab Januar 2012), um EFI_STUB zu unterstützen. Sie benötigen mindestens Kernel 3.3.
Marco
@RafaelAdel Wenn Sie keinen eigenen Kernel erstellen möchten, können Sie in den Software-Repositorys nach einer neueren Kernel-Version suchen. Elementary scheint auf Ubuntu zu basieren und ein Kernel 3.5 oder 3.8 sollte verfügbar sein. Bei den neueren ist es wahrscheinlicher, dass EFI_STUB aktiviert ist.
Marco
Eigentlich gibt es jetzt Kernel 3.10.1. Ich werde es versuchen.
Rafael Adel
2
Marco, es ist unverantwortlich , die Verwendung von Stubs zu empfehlen, es sei denn, Sie möchten jeden Benutzer durch das führen, was von seiner Distribution nicht unterstützt wird, und es nicht wie "Nach jedem Kernel-Upgrade ausführen" weitergeben. Es ist in Ordnung zu haben, aber nicht so gut zu automatisieren. Ich sage Ihnen dies als ein Typ, der für die UEFI-Unterstützung in ALT Linux verantwortlich ist.
Michael Shigorin
2

Ich habe es gemacht !

Zunächst entfernte ich alle unnötigen Starteinträge durch:

efibootmgr -b <entry_hex_number> -B

Anschließend die ESP-Partition mit dem FAT32Dateisystem neu formatieren.

mkfs.vfat -F32 /dev/sda1

Dann installierte Maden auf /dev/sdaNICHT/dev/sda1

grub-install /dev/sda
Rafael Adel
quelle
3
Sie brauchen keine Grub-Installation, die MBR schreibt. Ich weiß nicht, ob Ihr Distribution-Grub die beiden Dinge zusammen macht, aber Sie müssen grubx64.efi (oder shim.efi) nach / boot / efi / EFI / $ distro / und efibootmgr -c -l / boot kopieren /efi/EFI/$distro/grubx64.efi.
Lingzhu Xiang
1
grub-install hat gelernt, EFI zu groken (Sie können es mit --target = x86_64-efi erzwingen, aber efivars.ko muss sowieso zu diesem Zeitpunkt geladen sein).
Michael Shigorin