1

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

1

Я не думаю, что это хорошая идея повторно использовать текущие аргументы командной строки, как у вас сейчас. Вместо этого я рекомендую проверить конфигурацию 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 если вы хотите использовать его вместо этого.

0

Я решил эту проблему, создав скрипт /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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .