Как использовать kexec в Fedora для автоматического использования самого нового установленного ядра?
Как пользоваться kexec
в Fedora Linux для быстрой перезагрузки автоматически установить новейшее установленное ядро?
kexec --load
использование командной строки довольно многословно - вы должны предоставить:
- образ ядра, как
/boot/vmlinuz-3.18.8-201.fc21.x86_64
, - соответствующий файл initrd, например
--initrd=/boot/initramfs-3.18.8-201.fc21.x86_64.img
, - аргументы командной строки ядра, например
--append="root=/dev/sda1 ro rhgb quiet LANG=en_US.UTF-8"
, от/proc/cmdline
,
Набирать все это утомительно, так как даже завершение табуляции не слишком помогает, потому что обычно установлено несколько ядер.
С системами UEFI и ноутбуком с двойной загрузкой Windows 8 легко упустить подходящий момент, чтобы прервать перезагрузку и выбрать систему, отличную от используемой по умолчанию. Если вы пропустили, то вам нужно дождаться запуска Windows 8, возможно, автоматически войдите, перезагрузите компьютер и попробуйте снова.
2 ответа
Я не думаю, что это хорошая идея повторно использовать текущие аргументы командной строки, как у вас сейчас. Вместо этого я рекомендую проверить конфигурацию GRUB, если вы настроили GRUB. grubby
Команда может получить необходимую информацию. Точный формат вывода grubby --info
немного противоречиво, но этого достаточно, чтобы его можно было использовать.
# 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"
}
Это не использует последнее доступное ядро, оно использует то, что настроено в Grub, в качестве ядра, используемого по умолчанию. У вас уже есть код для определения последнего установленного ядра, и вы можете легко изменить --info="$index"
в --info=$latestkernel
если это то, что вы хотите использовать вместо.
Я решил это, создав скрипт /usr/local/bin/kexec-load-latest
который автоматически выбирает самое последнее ядро и загружает его в 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"
Установите его в исполняемый файл chmod a+x /usr/local/bin/kexec-load-latest
так что я могу просто:
- бежать
sudo /usr/local/bin/kexec-load-latest
, - затем
sudo reboot
или используйте функцию перезагрузки моего рабочего стола.
Проверено на Fedora 21. Это также должно работать в других, недавних rpm
на основе дистрибутивов, таких как RHEL или CentOS.