GRUB에서 기본 커널 설정


49

기본적으로 어떤 커널 GRUB2를로드해야합니까? 최근에 Linux 실시간 커널을 설치했으며 이제 기본적으로로드됩니다. 기본적으로 일반을로드하고 싶습니다.

지금까지 나는 기본 OS 만 선택했습니다. 어떤 이유로 /boot/grub.cfg이미 rt-kernel을로드하고 일반 Linux 메뉴 항목 (제 경우에는 Linux Linux)에 넣기를 원한다고 가정합니다.


2
grub2-set-default <제목 또는 숫자>?
taliezin

1
그러나 숫자를 어떻게 알 수 있습니까? 숫자 grub.cfg는 OS에만 해당하며 커널은 아닙니다.
TomTom

어떤 경우에는이 작품은 : askubuntu.com/questions/216398/... /boot/grub/grub.cfg :이 파일을 통해보고 메뉴 이름을 찾을 수 있습니다
TekOps

답변:


41

TomTom이 그의 아치에서 발견 한 것처럼 대부분의 배포판 에서이 시점에서 추가 커널을 고급 옵션 하위 메뉴로 옮겼습니다.

이전 커널을 기본값으로 선택하기 위해 최상위 메뉴 구조를 변경하고 싶지 않았습니다. 나는 여기서 답을 찾았습니다.

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) 현재 기본 그룹을 주석 처리하고 1 단계 /etc/default/grub의 하위 메뉴 $menuentry_id_option$menuentry_id_option2 단계에서 선택한 커널로 교체하십시오 >.

필자의 경우 수정 된 내용 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을 업데이트하여 변경합니다. 데비안의 경우 다음과 같이 수행됩니다.

$ 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에 두 줄 추가

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

sudo update-grub, 재부팅을 하고 , grub 메뉴로 들어가서 필요한 메뉴 또는 하위 메뉴 항목을 선택하십시오. 선택 사항이 저장되고 다음에 컴퓨터가 자동으로 부팅됩니다.


2
훌륭한! 너무 간단합니다!
Egor Skriptunoff

아, 훨씬 더 간단합니다. 감사합니다.
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이고 두 번째는 1입니다.


1
Fedora 21에서는 /boot/grub2/grub.cfg입니다.
somethingSomething

3
이것은 나를 위해 작동하지 않습니다. 내 설치의 최신 커널은 4.4.0-64-generic (메뉴 항목 0)이지만 4.4.0-59-generic (메뉴 항목 9)이 기본 부팅 커널이 되기를 원합니다 . 내가 실행 grub-set-default 9한 후 grub-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
Luis

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

해당 파일을 검색하는 방법에 약간의 개선을 제안하고 싶습니다 : use 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의 답변에 대한 의견을 남기는 것이 더 똑똑 할 수 있습니다.
Aleksandr Dubinsky

2

jkt123은 내가 생각하는 대부분의 배포판에서 작동합니다. 그러나 아치 리눅스의 경우 적어도 내가 사용할 수있는 패키지로는 작동하지 않았습니다.

설정할 수있는 인덱스 grub-set-default는 주 메뉴 항목에만 해당합니다. 그러나 커널 옵션은 하위 메뉴에 있습니다. 따라서 하위 메뉴에서 커널 메뉴 항목을 주 메뉴로 옮기거나 하위 메뉴 목록의 맨 위에 항목을 놓고 하위 메뉴를 선택하십시오.

내 메뉴

  • 아치 리눅스
  • Arch Linux의 고급 옵션
    • 커널 1
    • 커널 2
  • 윈도우

커널 2를 부팅하려면 커널 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

데비안 스트레치 :

구성 파일을 엉망으로 만들지 않고 폴더를 만들고 /noot(원하는대로 호출하십시오) 일치하는 구성 및 시스템 파일과 함께 원하는 커널을 남겨두고 /boot나머지는이 새 폴더로 이동하십시오.

를 실행하십시오 update-grub.

/boot커널 버전과 일치하는 구성 및 시스템 파일이 여전히 있는 폴더를 다시 확인하고 (필요하지 않은 것을 복사 한 경우) 재부팅하십시오.

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