
Wie verwende ich kexec
in Fedora Linux einen automatischen Schnellneustart mit dem neusten installierten Kernel?
kexec --load
Die 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 grubby
Befehl kann Ihnen die erforderlichen Informationen liefern. Das genaue Ausgabeformat grubby --info
ist 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=$latestkernel
Sie 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 reboot
oder verwenden Sie die Neustartfunktion meiner Desktopumgebung.
Getestet auf Fedora 21. Dies sollte auch auf anderen, aktuelleren rpm
Distributionen wie RHEL oder CentOS funktionieren.