Fedora で kexec を使用して、インストールされている最新のカーネルを自動的に使用するにはどうすればよいですか?

Fedora で kexec を使用して、インストールされている最新のカーネルを自動的に使用するにはどうすればよいですか?

kexecFedora 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、デスクトップ環境の再起動機能を使用します。

rpmFedora 21 でテスト済み。RHEL や CentOS などの他の最近のディストリビューションでも動作するはずです。

関連情報