기본적으로 어떤 커널 GRUB2를로드해야합니까? 최근에 Linux 실시간 커널을 설치했으며 이제 기본적으로로드됩니다. 기본적으로 일반을로드하고 싶습니다.
지금까지 나는 기본 OS 만 선택했습니다. 어떤 이유로 /boot/grub.cfg
이미 rt-kernel을로드하고 일반 Linux 메뉴 항목 (제 경우에는 Linux Linux)에 넣기를 원한다고 가정합니다.
grub.cfg
는 OS에만 해당하며 커널은 아닙니다.
기본적으로 어떤 커널 GRUB2를로드해야합니까? 최근에 Linux 실시간 커널을 설치했으며 이제 기본적으로로드됩니다. 기본적으로 일반을로드하고 싶습니다.
지금까지 나는 기본 OS 만 선택했습니다. 어떤 이유로 /boot/grub.cfg
이미 rt-kernel을로드하고 일반 Linux 메뉴 항목 (제 경우에는 Linux Linux)에 넣기를 원한다고 가정합니다.
grub.cfg
는 OS에만 해당하며 커널은 아닙니다.
답변:
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_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을 업데이트하여 변경합니다. 데비안의 경우 다음과 같이 수행됩니다.
$ 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
합니다.
2 시간 동안 고군분투 한 후에, 나는 이것을 달성하는 훨씬 쉬운 방법을 발견했다. 난 그냥 RTFM입니다. ;)
/ etc / default / grub에 두 줄 추가
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은 첫 번째 (맨 위) 항목입니다. 일반적으로 menuentry
에서 다음 /boot/grub/grub.cfg
과 같이 행을 찾아서 올바른 숫자를 찾을 수 있습니다 .
grep menuentry /boot/grub/grub.cfg
GRUB 부팅 메뉴에 표시된 이름과 함께 각 커널이 표시됩니다. 첫 번째는 0이고 두 번째는 1입니다.
/boot/grub2/grub.cfg
입니다.
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로 부팅됩니다 . 어쩌면 내가 뭔가를 놓쳤을 수도 있습니다.
단순히 수행 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
jkt123은 내가 생각하는 대부분의 배포판에서 작동합니다. 그러나 아치 리눅스의 경우 적어도 내가 사용할 수있는 패키지로는 작동하지 않았습니다.
설정할 수있는 인덱스 grub-set-default
는 주 메뉴 항목에만 해당합니다. 그러나 커널 옵션은 하위 메뉴에 있습니다. 따라서 하위 메뉴에서 커널 메뉴 항목을 주 메뉴로 옮기거나 하위 메뉴 목록의 맨 위에 항목을 놓고 하위 메뉴를 선택하십시오.
내 메뉴
커널 2를 부팅하려면 커널 1로 바꾸거나 아치 리눅스 나 윈도우와 같은 레벨에서 하위 메뉴 외부에 놓아야합니다. 그런 다음 기본 번호를 기본 메뉴 인덱스 중 하나로 설정하십시오. 예를 들어 위의 메뉴에서 "0"은 "Arch Linux"를 부팅하고 "1"은 커널 1을 부팅합니다.
계층과 스왑을 변경하려면 /boot/grub/grub.cfg
이동하려는 항목을 열고 이동하십시오. 항목은 다음과 같습니다
menuentry 'ENTRY NAME'
... some code ...
}
그런 다음 변경 사항을 적용해야합니다. 내 경우에는 grub-mkconfig
. 그러나 이것은 시스템마다 다를 수 있습니다.