web-dev-qa-db-ja.com

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

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が起動するのを待つ必要があります。おそらく、自動的にログインして再起動し、再試行してください。

1
Tometzky

現在のように現在のコマンドライン引数を再利用するのは良い考えではないと思います。 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に簡単に変更できます。

1
hvd

スクリプトを作成してこれを解決しました/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ベースのディストリビューションでも機能するはずです。

0
Tometzky