Как использовать 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.

Другие вопросы по тегам