FedoraLinuxでkexec
を使用して、インストールされている最新のカーネルを自動的に高速で再起動するにはどうすればよいですか?
kexec --load
コマンドラインの使用法はかなり冗長です—以下を提供する必要があります。
/boot/vmlinuz-3.18.8-201.fc21.x86_64
のようなカーネルイメージ、--initrd=/boot/initramfs-3.18.8-201.fc21.x86_64.img
などの対応するinitrdファイル、--append="root=/dev/sda1 ro rhgb quiet LANG=en_US.UTF-8"
からの/proc/cmdline
のようなカーネルコマンドライン引数。通常は複数のカーネルがインストールされているため、タブ補完でもあまり役に立たないため、すべてを入力するのは面倒です。
UEFIシステムとWindows8デュアルブートラップトップでは、再起動を中断してデフォルト以外のシステムを選択するのにちょうどいいタイミングを逃しがちです。見逃した場合は、Windows 8が起動するのを待つ必要があります。おそらく、自動的にログインして再起動し、再試行してください。
現在のように現在のコマンドライン引数を再利用するのは良い考えではないと思います。 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でテスト済み。これは、RHELやCentOSなどの他の最近のrpm
ベースのディストリビューションでも機能するはずです。