В интернете есть множество разных статей о том как изменить загружаемое по умолчанию ядро в Ubuntu 18.04 и 20.04
В основном все статьи описывают сложный и не удобный способ через указание ID подменю в опции GRUB_DEFAULT файла /etc/default/grub, но есть способ проще.
Исходные данные: ОС Ubuntu 18.04 и 20.04
Задача: Смена ядра по умолчанию в Ubuntu 18.04 и 20.04
По умолчанию если мы обновляем Linux-ядро, то Ubuntu сохраняет предыдущую версию и в случае каких-то проблем с новым ядром мы всегда можем загрузить более старое, но чтобы это сделать нужно попасть в меню загрузчика. Попасть мы туда можем если во время загрузки сервера будем постоянно (часто) нажимать клавишу TAB и меню GRUB будет показано на экране, далее мы идем в пункт «Advanced options for Ubuntu» и выбираем там нужное нам Linux-ядро. Все это хорошо, но нам нужно чтобы предыдущая версия Linux-ядра выбиралась сама и была использована GRUB по умолчанию.
Для достижения нашей цели мы будем редактировать файл /etc/default/grub, поэтому прежде чем его менять Вам нужно понимать что Вы меняете и для чего. Рекомендую для начала ознакомиться с официальной документацией на GRUB в части некоторых основных опций.
Все редактирование будет осуществляться с правами root, так что перейдите в консоль под пользователем root.
Откройте файл /etc/default/grub в привычном Вам редакторе, это может быть vim или например mcedit. Я использую vim.
Ниже представлен файл /etc/default/grub по умолчанию (комментарии удалены):
GRUB_DEFAULT=0 GRUB_TIMEOUT_STYLE=hidden GRUB_TIMEOUT=0 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity" GRUB_CMDLINE_LINUX=""
Добавим перед GRUB_DEFAULT опцию
GRUB_SAVEDEFAULT=true
Опция GRUB_SAVEDEFAULT=true заставляет сохранять выбранную в меню загрузчика запись как запись по умолчанию, но это работает только если GRUB_DEFAULT=saved
Далее изменим GRUB_DEFAULT=0 на
GRUB_DEFAULT=saved
Опция GRUB_DEFAULT может быть числом или специальным типом saved. Число указывает номер элемента в списке меню (возможно указание номера под элемента, например так 1>2), по умолчанию стоит GRUB_DEFAULT=0
Далее изменим GRUB_TIMEOUT_STYLE=hidden на
GRUB_TIMEOUT_STYLE=menu
Опция GRUB_TIMEOUT_STYLE указывает на тип меню выбора во время отчета времени указанном в GRUB_TIMEOUT по истечении которого будет загружена запись по умолчанию. По умолчанию меню загрузчика скрыто, но нам нужно чтобы оно отображалось для выбора ядра.
Далее изменим GRUB_TIMEOUT=0 на
GRUB_TIMEOUT=30
Опция GRUB_TIMEOUT устанавливает таймаут показа меню загрузчика, мы поставили 30 секунд, этого нам хватит чтобы выбрать какое ядро загружать. Вы можете поставить и меньше, например 3 секунды.
Так же я хочу упомянуть про опцию GRUB_DISABLE_SUBMENU, которая в случае указания ‘y’ убирает в меню GRUB иерархию и делает его плоским. Мы не будем использовать эту опцию, но если Вы захотите, то можете это сделать. Опция ниже:
GRUB_DISABLE_SUBMENU=y
Итого файл /etc/default/grub стал таким (комментарии удалены):
GRUB_SAVEDEFAULT=true GRUB_DEFAULT=saved GRUB_TIMEOUT_STYLE=menu GRUB_TIMEOUT=30 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity" GRUB_CMDLINE_LINUX=""
Далее нужно сохранить параметры загрузчика, вызываем команду:
update-grub
После этого можно перезагрузить сервер и сразу после прохождения процедуры POST мы попадем в меню загрузчика GRUB, см. скриншот ниже:
В нижней части интерфейса GRUB мы видим тикающее время, те самые 30 секунд, а в верхней части в меню выбран первый пункт, чуть ниже присутствует пункт «Advanced options for Ubuntu». Туда то нам и нужно успеть зайти (жмем стрелку вниз и Enter), см. скриншот ниже:
Мы видим список доступных для загрузки Linux-ядер. Выбираем например ядро 5.4.0-52 и жмем Enter. В этот момент GRUB запомнит Ваш выбор и будет использовать его по умолчанию при следующих загрузках. А нам это и нужно.
После загрузки мы можем проверить, что действительно загрузилось ядро 5.4.0-52 командой uname:
user@srv-01:~$ uname -a Linux srv-02 5.4.0-52-generic #57-Ubuntu SMP Thu Oct 15 10:57:00 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
При следующих перезагрузках сервера GRUB выведет нам меню, но по умолчанию будет уже выбран пункт «Advanced options for Ubuntu», а в нем то Linux-ядро, что мы выбрали ранее.
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.
✊ мужик! все четко, выручил
Спасибо!
Это не сработает если диск RAID или LVM
Спасибо, Михаил! Вы очень помогли мне. У меня Ubuntu 22.04.5 LTS, после обновления на ядро 6.8.0-47 иногда не выключается компьютер (горит светодиод питания), а также во время работы иногда гаснет экран и через некоторое время сам загорается (видеокарта встроенная). Я загрузился с ядром 6.5.0-45 и эти эффекты не проявились. Но я не знал, как прописать в загрузчик это ядро by default. Вы выручили.