올바른 GRUB 2 기본 메뉴 항목을 올바르게 설정하는 방법은 무엇입니까?


27

Gentoo Linux 시스템에서 GRUB 2.00을 실행하고 있습니다.

내가 수동으로 내 자신의 커널을 컴파일하고 나는 그들을 설치 /bootmake 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)이 아닌 내 커널의 다섯 번째 개정판 ( ) 을로드하고 싶습니다 vmlinuz-3.7.4-gentoo-third. 또한로드 할 올바른 커널을 선택하기 위해 하위 메뉴에 액세스하지 않는 것이 좋습니다.

이 행동을 어떻게 바꿀 수 있습니까? GRUB에 이전 세 번째 개정판이 아닌 기본적으로 커널의 다섯 번째 개정판을 실행하고 싶다고 어떻게 알 수 있습니까? 일반적으로 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 메뉴에서 기본 항목을 변경하지 않습니다. 즉, 기본 항목은 여전히 ​​현재와 동일한 항목을 나타냅니다. 그러나 기본적으로 부팅되는 이미지는 "고급 옵션"아래의 네 번째 이미지입니다. grub 메뉴에서 vmlinuz-3.7.4-gentoo-5를 기본 항목으로 설정하려면 grub2-mkconfig를 실행할 때 vmlinuz-3.7.4-gentoo-5가 첫 번째 이미지가되도록 이미지 순서를 정해야합니다. .


2
인용 부호가 중요합니다. 즉 GRUB_DEFAULT = 1> 3이 작동하지 않습니다.
ctuffli

7

grub.cfg에 하위 메뉴 가있는 경우 다음 과 같이 두 자리 숫자를 사용해야합니다.

grub-reboot '1>3'

첫 번째 메뉴의 인덱스 및 인 는 하위 메뉴 인덱스입니다.

예를 들어, 다음과 같이 구성에서 마지막 항목을 부팅하려면

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'

재부팅합니다.


기묘한. 하위 메뉴 색인은 0으로 시작하는 반면 주 메뉴는 1
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 이외의 백업 디렉토리 뭔가에있는 모든 커널을 reame


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_DEFAULT0은 오프셋이므로 3은 원하는대로 네 번째 항목을 선택합니다.


2
이유를 모르겠지만 작동하지 않는 것 같습니다. GRUB_DEFAULT=3당신이 말한대로 설정 한 다음 다시 실행하십시오 grub2-mkconfig. 그러나 부팅시 기본 항목은 여전히 vmlinuz-3.7.4-gentoo-third입니다.
Francesco Turco

1
시도 주석 GRUB_SAVEDEFAULT=true상관 안하지만,이 수치 필요하지입니다.
bsd

2
/etc/default/grub파일에 해당 옵션이 없습니다 .
Francesco Turco

0

나는 의심 grub2-mkconfig그들이 주로 버전 번호를 증가 단조 포함한다고 가정 역순으로 커널을 정렬합니다. 따라서 해당 규칙에 맞게 태그를 선택하십시오.


0

mv / boot에있는 새 / 미사용 버전 파일을 백업 디렉토리로 mv (예 : / boot / back initrd.img-3.13.0-xx-generic)
vmlinuz-3.13.0-xx-generic config-3.13.0-xx-generic System.map-3.13.0-xx- 일반

시스템을 복구 모드로 재부팅 한 다음 복구 대화 상자에서 grub을 선택하면 모든 것이 정상입니다.

내가 생각하는 가장 적합한 방법입니다. 우분투 14.04를 사용하고 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.