Kernel 버전
커널버전은 항상 설치된 버전 중에서 최 상위 버전으로 항상 default로 선택 가능하게 되어 있다.
드라이버는 커널 버전에 정확한 숫자에 의존성을 가지고 있기 때문에 사용하는 드라이버가 특정 버전 커널에만 의존적이거나 지원이 된다면, 커널 버전이 올라갈 경우 해당 디바이스는 사용이 불가하기 때문에 가끔 특정 커널 버전에 고정을 해야 하는 경우가 있따.
Kernel 과거 버전 고정하기
현재 설치된 커널 버전 확인
$ sudo dpkg --list | egrep -i --color 'linux-image|linux-headers'
이 명령어로 앞에 ii 또는 ic 라고 나올 수 있는데 각 의미는 아래와 같다.
- ii : ‘It should be installed and it is installed’
- rc : ‘It’s removed/uninstalled but it’s configuration files are still there’
당연하지만 이미 설치된 커널 버전 으로 고정이 가능하다.
설치가 되지 않았을 경우에는 원하는 커널을 설치 후에 진행해야 한다.
명령어를 시행하면 아래의 형식으로 내용이 출력된다.
ii linux-headers-6.5.0-18-generic 6.5.0-18.18~22.04.1 amd64 Linux kernel headers for version 6.5.0 on 64 bit x86 SMP
ii linux-headers-6.8.0-48-generic 6.8.0-48.48~22.04.1 amd64 Linux kernel headers for version 6.8.0 on 64 bit x86 SMP
ii linux-headers-generic-hwe-22.04 6.8.0-48.48~22.04.1 amd64 Generic Linux kernel headers
ii linux-image-6.5.0-18-generic 6.5.0-18.18~22.04.1 amd64 Signed kernel image generic
ii linux-image-6.8.0-48-generic 6.8.0-48.48~22.04.1 amd64 Signed kernel image generic
ii linux-image-generic-hwe-22.04 6.8.0-48.48~22.04.1 amd64 Generic Linux kernel image
$menuentry_id_option
menuentry_id_option은 GRUB에서 설정에서 사용되는 옵션으로 각 부팅의 항목의 UUID로 사용된다. 이것은 GRUB Bootloader에서 여러개의 커널 항목에서 특정 항목에 사용되는 ID를 정의한다. 여기에 특정 커널의 UUID로 지정을 해줄 경우 Bootloader에서 해당 커널로 Boot sequence를 진행하게 된다.
$ grep submenu /boot/grub/grub.cfg
명령어를 실행하면 아래와 같은 형식으로 출력된다.
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
위의 출력 내용 중 gnulinux-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282 내용을 아래에서 사용하니 저장해둔다.
Kernel 정보 확인
$ grep gnulinux /boot/grub/grub.cfg
커널에서 원하는 커널 정보를 확인한다.
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
menuentry 'Ubuntu, with Linux 5.4.0-42-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-42-generic-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
menuentry 'Ubuntu, with Linux 5.4.0-42-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-42-generic-recovery-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
menuentry 'Ubuntu, with Linux 5.4.0-39-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-39-generic-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
menuentry 'Ubuntu, with Linux 5.4.0-39-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-39-generic-recovery-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282' {
만약에 위의 커널 정보 중에서 5.4.0-42-generic 을 사용하고 싶을 경우 gnulinux-5.4.0-42-generic-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282을 사용하면 된다.
grub 설정
grub에 default에 대한 항목을 아래와 같이 설정해준다.
$ sudo vi /etc/default/grub
기본적으로 GRUB_DEFAULT=0으로 되어 있는데, 기본으로 가장 상위 버전으로 부팅이 되는 것으로 생각하면 된다.
GRUB_DEFAULT="gnulinux-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282>gnulinux-5.4.0-42-generic-advanced-b7e9ad35-1a1f-45e3-9cfd-084a7ce27282"
아래와 같이 변경한 내용을 grub에 적용해준다.
$ sudo update-grub
$ reboot
부팅 이후에 원하는 버전으로 부팅이 되었는지 확인해보자
$ uname -a