GRUBでデフォルトカーネルを設定する


49

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

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


2
grub2-set-default <タイトルまたは番号>?
タリエジン

1
しかし、どうすればその番号を知ることができますか?の数字grub.cfgはOS にのみ対応し、カーネルには対応していません。
トムトム

いくつかのケースでは、この作品は:askubuntu.com/questions/216398/... /boot/grub/grub.cfg:あなたはこのファイルを見てメニュー名を見つけることができます
TekOps

回答:


41

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

私の場合、変更されるの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から再実行するだけupdate-grubです。


31

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

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

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

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


2
素晴らしい!とても簡単!
エゴールスクリプチュノフ

ああ、とても簡単です。ありがとうございました。
user207863

21

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

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

grep menuentry /boot/grub/grub.cfg

GRUBブートメニューに表示される名前で各カーネルが一覧表示されます。最初のものは0、2番目は1などです。


1
Fedora 21ではになり/boot/grub2/grub.cfgます。
somethingSomething

3
これは私のために働いていません。私のインストールの最新のカーネルは4.4.0-64-generic(menuentry 0)ですが、4.4.0-59-generic(menuentry 9)をデフォルトのブートカーネルにしたいです。走ったgrub-set-default 9grub-update、再起動しました。デフォルトのカーネルでgrubをブートし、それでも4.4.0-64-genericでブートします。また、編集/etc/default/grubして設定GRUB_DEFAULT=9して実行しましたgrub-update。何も変更せずに再起動しても、システムは4.4.0-64-genericで起動します。たぶん私は何かを逃した、誰かが私を助けることができますか?
Dronacharya

これも私にはうまくいきませんでした。ここで説明するように私には不要なカーネルを削除:askubuntu.com/a/764242/456247
ルイス・

8

単純に実行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


2
これは答えではありません。コメントのように見えます。答えは、「これがGRUBのデフォルトエントリを設定する方法です」ではなく、「別の答えの補遺を作成してください」と言う必要があります。これを適切な回答に簡単に編集できますが、grepの代わりにawkを使用することに関するjkt123の回答にコメントを残す方が賢明かもしれません。
アレクサンドルドゥビンスキー

2

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

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

マイグラブメニュー

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

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

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

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

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


0

CentOS-6.6のgrub.confが最近のように見えたので、デフォルトの選択を変更するために手動で編集できます。

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

0

Debianストレッチ:

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

を実行しますupdate-grub

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.