it-swarm.com.de

Wie lade ich den Kernel mit dem EFI-Stub-Loader (efistub)?

Ich habe Ubuntu 14.04 im UEFI-Modus als einziges Betriebssystem ausgeführt, kein Dual-Boot hier. Die Kernelversion ist 3.13.0-24-generisch. Es gibt eine EFI-Partition. In diesem Fall hat die EFI-Partition nicht den Standardwert /dev/sda1, sondern den Standardwert /dev/sda3, da ich tatsächlich BIOS-Modus in EFI-Modus konvertieren . Ich habe das grub-efi-AMD64 -Paket verwendet, das jedoch das GRUB -Bootmenü aus dem UEFI-Firmware-Bootmenü lädt (UEFI-Boot lädt \EFI\ubuntu\grubx64.efi).

Ich möchte diesen doppelten Ladeschritt überspringen und schneller direkt von UEFI in den Kernel booten. Die buntu-Kernel seit 12.10 haben "Kernel EFI Stub Loader" Funktion.

Ich weiß, dass ich den Ubuntu-Kernel auf die EFI-Partition kopieren (möglicherweise umbenennen) und einen Eintrag im UEFI-Startmenü erstellen muss (zum Beispiel mit efibootmgr). Welche genauen Terminalbefehle sind dazu erforderlich?

14
Pro Backup

Die folgenden Befehle sind allgemeiner als nur für die Kernelversion 3.13.0-35.

1. Hängen Sie die efi-Partition ein und kopieren Sie die Kerneldateien dorthin

$ mount /dev/sda3 /boot/efi

$ mkdir -pv /boot/efi/EFI/ubuntu/

$ cp -uv /boot/vmlinuz-* /boot/initrd.img-* /boot/efi/EFI/ubuntu/
'/boot/vmlinuz-3.13.0-35-generic' -> '/boot/efi/EFI/ubuntu/vmlinuz-3.13.0-35-generic'
'/boot/initrd.img-3.13.0-35-generic' -> '/boot/efi/EFI/ubuntu/initrd.img-3.13.0-35-generic'

2. Ändern Sie den Namen der Kerneldatei

Kürzen Sie den Namen der Kerneldatei, indem Sie -generic entfernen, da anscheinend eine Pfadbeschränkung von 39 Zeichen besteht und benennen Sie die Kerneldatei (en) um, um mit .efi zu enden. Dadurch wird die Kompatibilität mit sichergestellt die meisten Systeme

$ for f in /boot/efi/EFI/ubuntu/vmlinuz-*-generic; do mv -uv -- "$f" "${f//-generic/}.efi"; done
'/boot/efi/EFI/ubuntu/vmlinuz-3.13.0-35-generic' -> '/boot/efi/EFI/ubuntu/vmlinuz-3.13.0-35-generic.efi'`

Die oben genannte Abkürzung des Namens der Kerneldatei reicht nicht für einen dpkg installierten Hauptleitungskernel aus, da zum Beispiel /EFI/ubuntu/vmlinuz-3.16.0-031600rc6.efi ohne -generic ist immer noch 40 Zeichen lang.

3. Fügen Sie dem EFI-Startmenü einen neuen Eintrag hinzu

Ersetzen Sie in diesem Beispiel 3.13.0-35 durch Ihre spezifische Kernel-Version

$ kv=3.13.0-35;efibootmgr -c -p 3 -L $kv -l \EFI\ubuntu\vmlinuz-$kv.efi -u root=/dev/sda1 initrd=\\EFI\\ubuntu\\initrd.img-$kv-generic ro rootfstype=ext4 debug ignore_loglevel libata.force=dump_id crashkernel=384M-:128M

Dieser neue Startmenüeintrag wird zu Ihrer neuen Standardstartoption.

Möglicherweise benötigen Sie die zusätzlichen Debug-Parameter debug, ignore_loglevel, libata.force=dump_id und crashkernel=384M-:128M nicht. Initrd muss vorhanden sein, sonst hängt boot bei " Switched to clocksource tsc. ", da das Root-Gerät sda1 nicht geöffnet werden kann.

14
Pro Backup

Laut dem Debian-Wiki kann dies in wenigen einfachen Schritten geschehen, damit ein Kernel-Update überlebt .

Hinweis: Dies setzt voraus, dass Sie eine EFI-Partition unter /boot/efi gemountet haben.

  1. Erstelle /etc/kernel/postinst.d/zz-update-efistub mit folgendem Inhalt:

    #!/bin/sh
    cp /vmlinuz /initrd.img /boot/efi/EFI/ubuntu/
    

    Dies ist ein Hook, der beim Kernel-Update ausgeführt wird, um das neueste Kernel-Image und initrd an den entsprechenden Speicherort zu kopieren. Dann mache es ausführbar und starte es:

    Sudo chmod +x /etc/kernel/postinst.d/zz-update-efistub
    Sudo /etc/kernel/postinst.d/zz-update-efistub
    
  2. Fügen Sie den Boot-Eintrag hinzu:

    Sudo efibootmgr -c -d /dev/sdb -p 1 -L "Ubuntu (efistub)" -l /EFI/ubuntu/vmlinuz -u "root=/dev/sdb2 rw initrd=/EFI/ubuntu/initrd.img quiet splash"
    

    Vergessen Sie nicht, die Argumente -d und -p zu ändern, je nachdem, wo sich Ihre EFI-Systempartition befindet. In meinem Fall ist es/dev/sdb1, aber dies ist wahrscheinlich für Sie anders. Möglicherweise müssen Sie auch den Wert root= in der Kernel-Cmdline in Ihre Root-Partition ändern.

    (Sie können die Bezeichnung beliebig ändern, indem Sie den Parameter -L ändern.)

    Der soeben hinzugefügte Starteintrag wird zum Standardeintrag. Und es wird nach einem Kernel-Update nicht kaputt gehen, da der Hook sicherstellt, dass vmlinuz und initrd.img immer aktualisiert werden.

5
Léo Lam