web-dev-qa-db-ja.com

GRUB

デフォルトでロードするGRUB2カーネルを選択するにはどうすればよいですか?最近Linuxリアルタイムカーネルをインストールしましたが、デフォルトでロードされます。デフォルトで通常のものをロードしたいのですが。

これまでのところ、デフォルトのOSを選択することに成功しました。そして、何らかの理由で/boot/grub.cfgは、rt-kernelをロードして汎用のLinuxメニューエントリ(私の場合はArch Linux)に配置することをすでに想定しています。

61
TomTom

jkt123は、私が推測するほとんどのディストリビューションで機能します。ただし、Arch Linuxの場合は機能しませんでした。少なくとも、入手可能なパッケージでは機能しませんでした。

grub-set-defaultで設定できるインデックスは、メインメニューのエントリにのみ対応しています。ただし、カーネルオプションはサブメニューにあります。したがって、カーネルエントリをサブメニューからメインメニューに移動するか、エントリをサブメニューリストの一番上に置いて、サブメニューを選択します。

マイグラブメニュー

  • Arch Linux
  • Arch Linuxの詳細オプション
    • カーネル1
    • カーネル2
  • ウィンドウズ

カーネル2を起動できるようにするには、カーネル2をカーネル1と交換するか、Arch LinuxまたはWindowsと同じレベルのサブメニューの外に置く必要があります。そして、デフォルトの数をメインメニューのインデックスの1つに設定します。たとえば、上のメニューでは、「0」は「Arch Linux」を起動し、「1」はカーネル1を起動します。

階層を変更してスワップするには、/boot/grub/grub.cfgを開き、移動するエントリを移動します。エントリは次のようになります

menuentry 'ENTRY NAME'
   ... some code ...
}

次に、変更を適用する必要があります。私の場合はgrub-mkconfigです。ただし、これはシステムによって異なる場合があります。

2
TomTom

TomTomが彼のArchのケースであることがわかったので、ほとんどのディストリビューションはこの時点で追加のカーネルを詳細オプションサブメニューに移動したと思います。

以前のカーネルをデフォルトとして選択するために、トップレベルのメニュー構造を変更したくありませんでした。私はここで答えを見つけました:

http://www.humans-enabled.com/2014/08/how-to-set-default-grub-kernel-boot.html

要約する:

1)サブメニューの$menuentry_id_optionを見つけます:

$ grep submenu /boot/grub/grub.cfg
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

2)使用するカーネルのメニューエントリの$menuentry_id_optionを見つけます。

$ grep gnulinux /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-AMD64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-rt-AMD64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-rt-AMD64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-AMD64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.18.0-0.bpo.1-AMD64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-0.bpo.1-AMD64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-AMD64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.17.0-0.bpo.1-AMD64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.17.0-0.bpo.1-AMD64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-AMD64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {
    menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-AMD64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-8-AMD64-recovery-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc' {

3)/etc/default/grubの現在のデフォルトgrubをコメントアウトし、サブメニューのステップ1の$menuentry_id_optionと、ステップ2の選択したカーネルの$menuentry_id_option>で区切って置き換えます。

私の場合、変更されたGRUB_DEFAULTは次のとおりです。

#GRUB_DEFAULT=0

GRUB_DEFAULT="gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc>gnulinux-4.18.0-0.bpo.1-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc"

4)grubを更新して変更を加えます。 Debianの場合、これは次のように行われます。

$ Sudo update-grub

できました。起動すると、詳細メニューにアスタリスクが表示され、選択したカーネルで起動するはずです。これはunameで確認できます。

$ uname -a
Linux NAME 4.18.0-0.bpo.1-AMD64 #1 SMP Debian 4.18.0-0 (2018-09-13) x86_64 GNU/Linux

これを最新のカーネルに戻すのは、新しい行をコメントアウトして#GRUB_DEFAULT=0のコメントを外すだけです。

GRUB_DEFAULT=0

#GRUB_DEFAULT="gnulinux-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc>gnulinux-4.18.0-0.bpo.1-AMD64-advanced-38ea4a12-6cfe-4ed9-a8b5-036295e62ffc"

次にupdate-grubを再実行します。

56
William L-K

2時間苦労した後、これを達成するはるかに簡単な方法を見つけました。私はただRTFMです。 ;)

/ etc/default/grubに2行追加します

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

Sudo update-grub、再起動して、GRUBメニューに入り、必要なメニューまたはサブメニュー項目を選択します。選択は保存され、次回コンピュータが自動的に起動します。

54
Jimmy Falcon

コメントで述べたように、grub-set-default Xコマンドを使用して、起動するデフォルトのカーネルを設定できます。Xは、起動するカーネルの番号です。一部のディストリビューションでは、/etc/default/grubファイルを編集してGRUB_DEFAULT=Xを設定し、次にupdate-grubを実行して、この数を設定することもできます。

番号は、起動時にGRUBメニューに表示されるカーネル/カーネル設定の配列へのインデックスであり、0が最初の(一番上の)エントリです。通常、次のようにして正しい番号を見つけることができます。次のように、/boot/grub/grub.cfgmenuentry行を探します。

grep menuentry /boot/grub/grub.cfg

GRUBブートメニューに表示される名前でリストされた各カーネルが表示されます。最初のカーネルは0、2番目は1、以下同様です。

22
jkt123

単にgrep 'menuentry' /boot/grub/grub.cfgを実行すると、実際のカーネルまたはOSバージョンに関連しない追加のエントリがリストされます。たとえば、

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option

そのファイルを検索する方法に小さな改善を提案したいと思います:awkを使用してください

$ awk '/menuentry/ && /class/ {count++; print count-1"****"$0 }' /boot/grub/grub.cfg                                            
0****menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-86df21bf-d95f-435c-9292-273bdbcba056' {
1****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
2****   menuentry 'Ubuntu, with Linux 3.19.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.19.0-26-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {
3****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-advanced-86df21bf-d95f-435c-9292-273bdbcba056' {
4****   menuentry 'Ubuntu, with Linux 3.13.0-62-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-62-generic-recovery-86df21bf-d95f-435c-9292-273bdbcba056' {

以下のコマンドとその出力を使用すると、awkコードが実際のOSバージョンと一致することを確認し、/etc/default/grubファイルで使用できる番号を取得できます。

/etc/default/grubファイルを手動で編集することに加えて、sedを使用することをお勧めします。以下のコマンドで、Xを上記のawkコマンドから取得した適切な番号に置き換えます。

Sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=X/g' /etc/default/grub; Sudo update-grub

10

最近、CentOS-6.6のgrub.confは、手動で編集してデフォルトの選択を変更できるようになりました。

default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
0
Mike

Debianストレッチ:

設定ファイルをいじるのではなく、/nootにフォルダーを作成し(必要な名前を付けます)、一致する設定ファイルとシステムファイルと共に、必要なカーネルを/bootに残し、残りを移動します。この新しいフォルダに。

update-grubを実行します。

/bootフォルダーを再確認して、カーネルバージョンと一致する構成ファイルとシステムファイルがまだあることを確認し(必要のないものをコピーした場合)、再起動します。

0
Pinkie Perie