Wie verwende ich kexec in Fedora, um automatisch den neuesten installierten Kernel zu verwenden?

Wie verwende ich kexec in Fedora, um automatisch den neuesten installierten Kernel zu verwenden?

Wie verwende ich kexecin Fedora Linux einen automatischen Schnellneustart mit dem neusten installierten Kernel?

kexec --loadDie Verwendung der Befehlszeile ist ziemlich ausführlich – Sie müssen Folgendes angeben:

  • Kernel-Image, wie /boot/vmlinuz-3.18.8-201.fc21.x86_64,
  • entsprechende initrd-Datei, wie --initrd=/boot/initramfs-3.18.8-201.fc21.x86_64.img,
  • Kernel-Befehlszeilenargumente, wie --append="root=/dev/sda1 ro rhgb quiet LANG=en_US.UTF-8", von /proc/cmdline.

Das alles einzutippen ist mühsam und selbst die Tab-Vervollständigung hilft nicht viel, weil meist mehrere Kernel installiert sind.

Bei UEFI-Systemen und Windows 8 Dual-Boot-Laptops kann es leicht passieren, dass Sie den richtigen Moment verpassen, um den Neustart zu unterbrechen und ein anderes System als das Standardsystem auszuwählen. Wenn Sie ihn verpassen, müssen Sie warten, bis Windows 8 gestartet ist, sich möglicherweise automatisch anmelden, neu starten und es erneut versuchen.

Antwort1

Ich glaube nicht, dass es eine gute Idee ist, die aktuellen Befehlszeilenargumente wie jetzt wiederzuverwenden. Ich empfehle stattdessen, die GRUB-Konfiguration zu überprüfen, vorausgesetzt, Sie haben GRUB eingerichtet. Der grubbyBefehl kann Ihnen die erforderlichen Informationen liefern. Das genaue Ausgabeformat grubby --infoist etwas inkonsistent, aber es reicht aus, um verwendbar zu sein.

# cat /usr/local/bin/kexec-load
#!/bin/sh
set -eu
index=$(grubby --default-index)
grubby --info="$index" | {
  IFS==
  while read field value
  do
    case $value in
    \"*\")
      eval "$field=$value" ;;
    *)
      eval "$field=\$value" ;;
    esac
  done
  unset IFS

  set -x
  kexec -l --initrd="$initrd" --append="root=$root $args" -- "$kernel"
}

Dabei wird nicht der neueste verfügbare Kernel verwendet, sondern der in Grub als standardmäßig zu verwendende Kernel konfigurierte. Sie haben bereits Code, um den neuesten installierten Kernel zu ermitteln, und Sie können dies ganz einfach in ändern, --info="$index"wenn --info=$latestkernelSie stattdessen diesen verwenden möchten.

Antwort2

Ich habe dies gelöst, indem ich ein Skript erstellt habe /usr/local/bin/kexec-load-latest, das automatisch den aktuellsten Kernel auswählt und ihn lädt kexec.

#!/bin/bash

set -x

NEWEST_KERNEL_VERSION="$(
  rpm --query --queryformat='%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel \
  | sort --version-sort --reverse \
  | head --lines=1
)"
kexec --load --append="`cat /proc/cmdline`" \
  --initrd="/boot/initramfs-$NEWEST_KERNEL_VERSION.img" \
  "/boot/vmlinuz-$NEWEST_KERNEL_VERSION"

Legen Sie es als ausführbar fest chmod a+x /usr/local/bin/kexec-load-latest, sodass ich einfach Folgendes tun kann:

  • laufen sudo /usr/local/bin/kexec-load-latest,
  • dann sudo rebootoder verwenden Sie die Neustartfunktion meiner Desktopumgebung.

Getestet auf Fedora 21. Dies sollte auch auf anderen, aktuelleren rpmDistributionen wie RHEL oder CentOS funktionieren.

verwandte Informationen