
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 が起動するまで待機し、自動的にログインして再起動し、再試行する必要があります。
答え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
、デスクトップ環境の再起動機能を使用します。
rpm
Fedora 21 でテスト済み。RHEL や CentOS などの他の最近のディストリビューションでも動作するはずです。