正しいGRUB 2のデフォルトメニューエントリを正しくセットアップする方法


27

Gentoo LinuxシステムでGRUB 2.00を実行しています。

私は手動で自分のカーネルをコンパイルした後、私はそれらをインストール/bootしてmake install/boot現時点では次のカーネルがあります。

# ls -1 /boot/vmlinuz*
/boot/vmlinuz-3.7.4-gentoo-5
/boot/vmlinuz-3.7.4-gentoo-first
/boot/vmlinuz-3.7.4-gentoo-fourth
/boot/vmlinuz-3.7.4-gentoo-third

実行grub2-mkconfigすると、次の出力が得られます。

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.7.4-gentoo-third
Found linux image: /boot/vmlinuz-3.7.4-gentoo-fourth
Found linux image: /boot/vmlinuz-3.7.4-gentoo-first
Found linux image: /boot/vmlinuz-3.7.4-gentoo-5
done

結果の/boot/grub2/grub.cfgファイルを読むと、次のエントリが作成されていることがわかります。

  • 開始するメインのデフォルトエントリ vmlinuz-3.7.4-gentoo-third
  • grub2-mkconfigコマンドと同じ順序で、他のすべてのエントリ(回復エントリを含む)を含むサブメニュー

問題は、起動時にデフォルトでカーネルvmlinuz-3.7.4-gentoo-5の3 番目のリビジョン()ではなく5番目のリビジョン()をロードすることですvmlinuz-3.7.4-gentoo-third。また、ロードする適切なカーネルを選択するためのサブメニューにアクセスしないことも好みます。

この動作を変更するにはどうすればよいですか?GRUBに、古い3番目のリビジョンではなく、デフォルトで5番目のカーネルを実行したいことを伝えるにはどうすればよいですか?一般に、GRUBによって選択された一見ランダムなカーネルではなく、必要なカーネルに一致するようにデフォルトのエントリ行を変更するにはどうすればよいですか?

また、次の行を入れてみました/etc/default/grub

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

これで問題が解決するわけではありません。しかし、少なくともGRUBは、私が起動した最新のカーネルを記憶しており、サブメニューから自動的に選択します。サブメニューにアクセスしたくないというだけです。


-o /boot/grub2/grub.cfg出力ファイルとして指定していることに気付きました。ディレクトリは/boot/grub/まだ存在しますか?
ott--

回答:


12

サブメニュー「詳細オプション」の下のメニュー項目を選択するには、GRUB_DEFAULT = "1> 3"を設定します。これで、grub2-mkconfigを実行してgrub構成ファイルを生成できます。次回の再起動で、vmlinuz-3.7.4-gentoo-5が起動するはずです。

:これは、grubメニューのデフォルトエントリを変更しません。つまり、デフォルトエントリは現在と同じエントリを示します。ただし、デフォルトで起動されるイメージは、「詳細オプション」の下の4番目のイメージになります。grubメニューのデフォルトエントリとしてvmlinuz-3.7.4-gentoo-5を作成するには、grub2-mkconfigの実行時にvmlinuz-3.7.4-gentoo-5が最初のイメージになるように、イメージの順序を設定する必要があります。


2
引用符は重要であることに注意してください。つまり、GRUB_DEFAULT = 1> 3は機能しません。
-ctuffli

7

grub.cfgにサブメニューがある場合、次のように2桁を使用する必要があります。

grub-reboot '1>3'

1はメニューインデックスで、2つ目はサブメニューインデックスです。

たとえば、次のような構成から最後のエントリを起動するには:

grep menu /boot/grub/grub.cfg

menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 4.6.0-0.bpo.1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.6.0-0.bpo.1-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-advanced-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (sysvinit)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-init-sysvinit-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {
    menuentry 'Debian GNU/Linux, with Linux 3.16.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-4-amd64-recovery-1ffa16a9-fda2-43b5-91b9-c91a08ff190f' {

あなたが使用する必要があります:

grub-reboot '1>5'

そして再起動します。


奇妙な。サブメニューインデックスは1からしばらくメインメニュー、0で始まる
VarunAgw

5

を使用することもできますGRUB_DEFAULT=saved。この場合、使用します

$ grub2-set-default -h
Usage: grub2-set-default [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

または、次のブートのみの場合:

$ grub2-reboot -h
Usage: grub2-reboot [OPTION] MENU_ENTRY
Set the default boot menu entry for GRUB, for the next boot only.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --boot-directory=DIR    expect GRUB images under the directory DIR/grub2
                          instead of the /boot/grub2 directory

MENU_ENTRY is a number, a menu item title or a menu item identifier.

2

試して

mkdir -p /boot/grub/backup
mv -v /boot/grub/vmlinuz-3.7.4-gentoo-{first,third,fourth} /boot/grub/backup

これにより、すべての未使用カーネルがバックアップディレクトリに移動されます。

grub2-mkconfig -o /boot/grub/grub.cfg

これはr5メニューに選択肢を追加するだけです。その後、このリンクを読ん でから、バックアップディレクトリ内のすべてのカーネルを保持します(vmlinuz以外の場合)。


2

centos7(またはRHEL7)とgrub2の場合:

grubはデフォルトとしてgrubenvの「saved_entry」エントリを使用し、/ boot / grub2 / grub.cfgのスニペットを起動します。

if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

「saved_entry」が何であるかを確認するには、私のビルドです:

grub2-editenv list

saved_entry=CentOS Linux (3.10.0-693.2.2.el7.ari.x86_64) 7 (Core)

たとえば、デバッグビルドに変更するには:

grub2-editenv - set saved_entry='CentOS Linux 3.10.0-693.2.2.el7.ari.x86_64.debug) 7 (Core)'

1

望んだ結果を達成するために私がしたことは:

  • ヘルプでGRUB_DEFAULT=saved説明されているように設定しgrub-set-defaultます

    grub-set-default Menu entry not specified. Usage: grub-set-default [OPTION] MENU_ENTRY Set the default boot menu entry for GRUB. This requires setting GRUB_DEFAULT=saved in /etc/default/grub. -h, --help print this message and exit -V, --version print the version information and exit --boot-directory=DIR expect GRUB images under the directory DIR/grub instead of the /boot/grub directory MENU_ENTRY is a number, a menu item title or a menu item identifier.

  • デフォルト値を設定する

    grub-set-default "1>2"

    / boot / grubにgrubenvという名前の新しいファイルが必要な情報とともに作成されます。

  • その後、構成ファイルを再作成します

    grub-mkconfig > /boot/grub/grub.cfg

そして、保存された状態を使用するように設定が変更されたことを見ました:

if [ "${next_entry}" ] ; then set default="${next_entry}" set next_entry= save_env next_entry set boot_once=true else set default="${saved_entry}" fi


0

デフォルトの選択肢は数値で設定できます。設定した場合

`GRUB_DEFAULT=3` 

in /etc/default/grub
デフォルトをgentoo-5エントリに設定します。
GRUB_DEFAULTオフセットはゼロなので、3は必要に応じて4番目のエントリを選択します。


2
理由はわかりませんが、うまくいかないようです。GRUB_DEFAULT=3あなたが言ったように設定し、再実行しgrub2-mkconfigます。ただし、ブート時のデフォルトのエントリはまだvmlinuz-3.7.4-gentoo-thirdです。
フランチェスコターコ

1
コメントアウトしGRUB_SAVEDEFAULT=trueてみてください問題ではありませんが、数値では必要ありません。
bsd

2
/etc/default/grubファイルにそのオプションがありません。
フランチェスコターコ

0

grub2-mkconfigカーネルには主に単調に増加するバージョン番号が含まれていると仮定して、カーネルを逆順にソートしていると思われます。そのため、その規則に合わせてタグの選択を開始してください。


0

/ boot内のこれらの新しい/使用されていないバージョンのファイルを、たとえば/ boot / back initrd.img-3.13.0-xx-genericなどのバックアップディレクトリにmv
vmlinuz-3.13.0-xx-generic config-3.13.0-xx-genericなど System.map-3.13.0-xx-generic

システムをレスキューモードで再起動し、レスキューダイアログでgrubを選択すると、すべてが正常になります。

最適な方法だと思います。私はubuntu 14.04を使用しています。


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