기본적으로 어떤 커널 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_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합니다.
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. 그러나 이것은 시스템마다 다를 수 있습니다.