Wie verwendet man Kexec in Fedora, um automatisch den neuesten installierten Kernel zu verwenden?

1395
Tometzky

Wie kann man kexecin Fedora Linux automatisch auf den neuesten installierten Kernel rebooten?

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

  • Kernbild, 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.

Es ist mühsam, alles einzugeben, da selbst die Tab-Fertigstellung nicht zu viel hilft, da in der Regel mehrere Kernel installiert sind.

Bei UEFI-Systemen und Windows 8-Dual-Boot-Laptops ist es einfach, den richtigen Moment zu verpassen, um den Neustart zu unterbrechen, um ein nicht standardmäßiges System auszuwählen. Wenn Sie vermissen, müssen Sie warten, bis Windows 8 gestartet ist. Vielleicht melden Sie sich automatisch an, starten Sie den Computer neu und versuchen Sie es erneut.

1

2 Antworten auf die Frage

1
hvd

Ich denke nicht, dass es eine gute Idee ist, die aktuellen Befehlszeilenargumente wie jetzt zu verwenden. Ich empfehle, stattdessen die GRUB-Konfiguration zu überprüfen, vorausgesetzt, Sie haben GRUB eingerichtet. Mit dem grubbyBefehl können Sie die erforderlichen Informationen erhalten. Das genaue Ausgabeformat von grubby --infoist etwas inkonsistent, reicht aber 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" } 

Hierbei wird nicht der aktuellste verfügbare Kernel verwendet, sondern der in Grub konfigurierte Kernel wird standardmäßig als Kernel verwendet. Sie verfügen bereits über Code, um den zuletzt installierten Kernel zu ermitteln, und Sie können den Code einfach ändern --info="$index", --info=$latestkernelwenn Sie ihn stattdessen verwenden möchten.

0
Tometzky

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

#!/bin/bash  set -x  NEWEST_KERNEL_VERSION="$( rpm --query --queryformat='%-%.%\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" 

Setze es auf ausführbar, chmod a+x /usr/local/bin/kexec-load-latestdamit ich einfach:

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

Getestet auf Fedora 21. Dies sollte auch in anderen, kürzlich rpmbasierten Distributionen wie RHEL oder CentOS funktionieren .

Ich frage mich, sollte "cat / proc / cmdline" nicht aktualisiert werden, normalerweise von sed, um die neue Version des Kernels aufzunehmen? xor vor 9 Jahren 0