デフォルトでロードするGRUB2カーネルを選択するにはどうすればよいですか?最近Linuxリアルタイムカーネルをインストールしましたが、デフォルトでロードされます。デフォルトで通常のものをロードしたいのですが。
これまでのところ、デフォルトのOSを選択することに成功しました。そして、何らかの理由で/boot/grub.cfg
は、rt-kernelをロードして汎用のLinuxメニューエントリ(私の場合はArch Linux)に配置することをすでに想定しています。
jkt123は、私が推測するほとんどのディストリビューションで機能します。ただし、Arch Linuxの場合は機能しませんでした。少なくとも、入手可能なパッケージでは機能しませんでした。
grub-set-default
で設定できるインデックスは、メインメニューのエントリにのみ対応しています。ただし、カーネルオプションはサブメニューにあります。したがって、カーネルエントリをサブメニューからメインメニューに移動するか、エントリをサブメニューリストの一番上に置いて、サブメニューを選択します。
マイグラブメニュー
カーネル2を起動できるようにするには、カーネル2をカーネル1と交換するか、Arch LinuxまたはWindowsと同じレベルのサブメニューの外に置く必要があります。そして、デフォルトの数をメインメニューのインデックスの1つに設定します。たとえば、上のメニューでは、「0」は「Arch Linux」を起動し、「1」はカーネル1を起動します。
階層を変更してスワップするには、/boot/grub/grub.cfg
を開き、移動するエントリを移動します。エントリは次のようになります
menuentry 'ENTRY NAME'
... some code ...
}
次に、変更を適用する必要があります。私の場合はgrub-mkconfig
です。ただし、これはシステムによって異なる場合があります。
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
を再実行します。
2時間苦労した後、これを達成するはるかに簡単な方法を見つけました。私はただRTFMです。 ;)
/ etc/default/grubに2行追加します
GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved
Sudo update-grub
、再起動して、GRUBメニューに入り、必要なメニューまたはサブメニュー項目を選択します。選択は保存され、次回コンピュータが自動的に起動します。
コメントで述べたように、grub-set-default X
コマンドを使用して、起動するデフォルトのカーネルを設定できます。Xは、起動するカーネルの番号です。一部のディストリビューションでは、/etc/default/grub
ファイルを編集してGRUB_DEFAULT=X
を設定し、次にupdate-grub
を実行して、この数を設定することもできます。
番号は、起動時にGRUBメニューに表示されるカーネル/カーネル設定の配列へのインデックスであり、0が最初の(一番上の)エントリです。通常、次のようにして正しい番号を見つけることができます。次のように、/boot/grub/grub.cfg
でmenuentry
行を探します。
grep menuentry /boot/grub/grub.cfg
GRUBブートメニューに表示される名前でリストされた各カーネルが表示されます。最初のカーネルは0、2番目は1、以下同様です。
単に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
最近、CentOS-6.6のgrub.confは、手動で編集してデフォルトの選択を変更できるようになりました。
default=1
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
Debianストレッチ:
設定ファイルをいじるのではなく、/noot
にフォルダーを作成し(必要な名前を付けます)、一致する設定ファイルとシステムファイルと共に、必要なカーネルを/boot
に残し、残りを移動します。この新しいフォルダに。
update-grub
を実行します。
/boot
フォルダーを再確認して、カーネルバージョンと一致する構成ファイルとシステムファイルがまだあることを確認し(必要のないものをコピーした場合)、再起動します。