如何在Fedora中使用kexec自動使用最新安裝的核心?

如何在Fedora中使用kexec自動使用最新安裝的核心?

如何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"、 from /proc/cmdline

全部輸入起來很乏味,因為即使是製表符補全也沒有太大幫助,因為通常安裝了多個核心。

對於 UEFI 系統和 Windows 8 雙啟動筆記型電腦,很容易錯過中斷重新啟動以選擇非預設系統的最佳時機。如果您錯過了,那麼您必須等待 Windows 8 啟動,也許會自動登錄,重新啟動並重試。

答案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

答案2

我透過建立一個腳本來解決這個問題/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

相關內容