如何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
。