Как я могу загрузиться с более старой версией ядра?

Последнее ядро ​​вызывает проблемы с моим звуком, которое отлично работало со старой версией. Поскольку у меня установлена ​​только Ubuntu, Grub не отображается во время загрузки. Как я могу вручную выбрать версию своего ядра при загрузке?

11 ответов

Решение

Самый простой способ отобразить ваш Grub - нажать и удерживать кнопку SHIFT во время загрузки.

В качестве альтернативы вы всегда можете отобразить Grub без загрузки какого-либо конкретного ядра:

gksudo gedit /etc/default/grub

менять GRUB_TIMEOUT на -1 и закомментируйте GRUB_HIDDEN_TIMEOUT

добежать, бежать

sudo update-grub

Удерживая нажатой клавишу Shift во время загрузки, появится меню Grub. Теперь вы можете выбрать более старую версию ядра.

Для выбора более старого ядра в качестве ядра по умолчанию, пожалуйста, смотрите этот пост

Получите текущие установленные записи меню ядра, используя приведенную ниже команду.

      ubuntu:~$ sudo grub-mkconfig | grep -iE "menuentry 'Ubuntu, with Linux" | awk '{print i++ " : "$1, $2, $3, $4, $5, $6, $7}'

0 : menuentry 'Ubuntu, with Linux 5.4.0-80-generic' --class ubuntu
1 : menuentry 'Ubuntu, with Linux 5.4.0-80-generic (recovery mode)'
2 : menuentry 'Ubuntu, with Linux 4.15.0-159-generic' --class ubuntu
3 : menuentry 'Ubuntu, with Linux 4.15.0-159-generic (recovery mode)'
4 : menuentry 'Ubuntu, with Linux 4.15.0-45-generic' --class ubuntu
5 : menuentry 'Ubuntu, with Linux 4.15.0-45-generic (recovery mode)'

Изменить GRUB_DEFAULT=0значение в соответствии с вашими потребностями.

в настоящее время мой сервер загружается с 5.4.0-80-generic

      ubuntu:~# uname -srn
Linux ubuntu 5.4.0-80-generic

поэтому я хочу загрузить свою систему с помощью

модифицированный GRUB_DEFAULT="1>4"стоимость в /etc/default/grub

выполненная ниже команда для повторного создания файла конфигурации grub с измененными настройками настроек GRUB_DEFAULT.

sudo update-grub

перезагрузил систему убунту.

sudo systemctl reboot

после перезагрузки мой сервер Ubuntu загрузился со старым ядром 4.15.0-45-generic

      ubuntu:~# uname -srn
Linux ubuntu 4.15.0-45-generic

Если у вас есть несколько ядер в вашей системе, вы можете вручную установить, какая версия ядра будет запускаться:

  1. Перезагрузите компьютер с нажатой кнопкой Shift для отображения GRUB после запуска BIOS. Вы увидите что-то вроде: стартовая страница GRUB

  2. Выберите "Дополнительные параметры для Ubuntu" и запомните индекс этой строки меню (отсчет начинается с 0). На картинке индекс равен 1

Выберите конкретное ядро

  1. Выберите конкретное ядро ​​для загрузки, а также запомните индекс этой строки меню (отсчет начинается с 0). На картинке индекс выбранного ядра равен 2

  2. Запустить систему. Это действие для одной загрузки на конкретном ядре. Если вы хотите все время начинать с конкретного ядра, вы должны сделать следующие шаги:

4.1. Откройте и отредактируйте установочный файл GRUB:

sudo nano /etc/default/grub

4.2. Найдите строку GRUB_DEFAULT=...(по умолчанию GRUB_DEFAULT=0) и задайте в меню кавычек путь к конкретному ядру (запомните индексы меню из шагов 2 и 3). В моей системе первый индекс был 1, а второй - 2. Я установил GRUB_DEFAULT

GRUB_DEFAULT="1>2"

Сохранить файл.

4,3. Обновите информацию GRUB для применения изменений:

sudo update-grub

4.4. После перезагрузки вы автоматически загружаетесь в ядро ​​по выбранному пути меню. Пример на моей машине 1 -> 2

4,5. Проверьте версию ядра после перезагрузки:

uname -r

Во время загрузки, когда появляется GRUB с записями, выберите вторую запись, т. Е. В разделе " Дополнительные параметры" для Ubuntu вы можете увидеть различные старые версии ядра, которые были установлены ранее, вы можете выбрать одну из них, которая вам подходит. В противном случае вы идете в grub.cfg и вставляете нужную версию ядра поверх установленной в данный момент записи ядра. В обоих случаях это работает

Пожалуйста, установите предыдущее ядро ​​с помощью следующей команды:

sudo apt-get install linux-image-3.0.0-12-generic linux-headers-3.0.0-12-generic

Затем перезагрузите компьютер. Вам будет предложено выбрать ядро.

Дайте мне знать, если это сработало.

С уважением

  1. Сразу после заставки BIOS/UEFI во время загрузки с BIOS быстро нажмите и удерживайте клавишу Shift, которая вызовет меню GNU GRUB. (Если вы видите логотип Ubuntu, вы пропустили точку, в которой вы можете войти в меню GRUB.) С помощью UEFI нажмите (возможно, несколько раз) клавишу Esc, чтобы попасть в меню GRUB. Иногда заставка производителя является частью загрузчика Windows, поэтому, когда вы включаете компьютер, он сразу переходит к экрану GRUB, а затем нажимать Shift не нужно.

  2. На экране GRUB выберите Дополнительные параметры для Ubuntu и нажмите Enter.

  3. Появится новый фиолетовый экран со списком ядер. Используйте клавиши ↑ и ↓, чтобы выбрать, какая запись будет выделена. Нажмите Enter для загрузки выбранного ядра, "e" для редактирования команд перед загрузкой или "c" для командной строки. Нажмите Esc, чтобы вернуться в предыдущее меню.

По https://help.ubuntu.com/community/Grub2:

GRUB_HIDDEN_TIMEOUT = 0

Этот параметр определяет, как долго будет отображаться экран без меню GRUB 2. Пока экран пуст, пользователь может нажать любую клавишу для отображения меню.

Поведение по умолчанию - скрывать меню, если присутствует только одна операционная система. Если пользователь только с Ubuntu желает отобразить меню, поместите символ # в начале этой строки, чтобы отключить функцию скрытого меню.

Понизить ядро: как понизить ядро ​​до 11.10

Обновление ядра: Как я могу обновить ядро ​​до 3.1?

Ответ Джеккобека описывает метод просмотра grub.cfg и прокручивая исходный код, чтобы найти номер меню. Более простой способ с этим сценарием:

Grub Version: 2.02~beta2-36ubuntu3.22


         ┌───────────┤ Use arrow, page, home & end keys. Tab toggle option ├────────────┐
         │ Menu No.     ----------- Menu Name -----------                               │ 
         │                                                                              │ 
         │  1>3  Ubuntu, with Linux 4.15.0-55-generic                                  ↑│ 
         │  1>6  Ubuntu, with Linux 4.15.0-54-generic                                  ▒│ 
         │  1>9  Ubuntu, with Linux 4.14.134-0414134-generic                           ▒│ 
         │  1>12 Ubuntu, with Linux 4.14.120-0414120-generic                           ▮│ 
         │  1>15 Ubuntu, with Linux 4.14.114-0414114-generic                           ▒│ 
         │  1>18 Ubuntu, with Linux 4.14.110-0414110-generic                           ▒│ 
         │  1>21 Ubuntu, with Linux 4.14.98-041498-generic                             ▒│ 
         │  1>24 Ubuntu, with Linux 4.14.89-041489-generic                             ▒│ 
         │  1>27 Ubuntu, with Linux 4.14.78-041478-generic                             ▒│ 
         │  1>30 Ubuntu, with Linux 4.14.70-041470-generic                             ▒│ 
         │  1>33 Ubuntu, with Linux 4.4.0-157-generic                                  ▒│ 
         │  1>36 Ubuntu, with Linux 3.16.60-031660-generic                             ▒│ 
         │  1>36 Ubuntu, with Linux 3.16.60-031660-generic                             ▒│ 
         │  2    Ubuntu 18.04.1 LTS (18.04) (on /dev/nvme0n1p10)                       ▒│ 
         │  3    Advanced options for Ubuntu 18.04.1 LTS (18.04) (on /dev/nvme0n1p10)  ▒│ 
         │  3>0  Ubuntu (on /dev/nvme0n1p10)                                           ↓│ 
         │                                                                              │ 
         │                                                                              │ 
         │                     [Display Grub Boot]            Exit                      │ 
         │                                                                              │ 
         └──────────────────────────────────────────────────────────────────────────────┘ 



Примечание: в этом примере grub-menu.sh short был использован для вызова сценария. short Параметр подавляет эти строки:

     │  1>10 Ubuntu, with Linux 4.14.134-0414134-generic (upstart)                 ▒│ 
     │  1>11 Ubuntu, with Linux 4.14.134-0414134-generic (recovery mode)           ▒│ 

Управляющие клавиши

После прокрутки записей (вы можете использовать колесо прокрутки мыши или клавиши со стрелками) нажмите Escape, чтобы вернуться в командную строку.

Если вы нажмете Enter, отобразятся команды связывания grub для записи:

menuentry 'Ubuntu, with Linux 4.14.134-0414134-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.134-0414134-generic-advanced-b40b3925-70ef-447f-923e-1b05467c00e7' {
recordfail
savedefault
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root b40b3925-70ef-447f-923e-1b05467c00e7
else
search --no-floppy --fs-uuid --set=root b40b3925-70ef-447f-923e-1b05467c00e7
fi
echo 'Loading Linux 4.14.134-0414134-generic ...'
linux /boot/vmlinuz-4.14.134-0414134-generic root=UUID=b40b3925-70ef-447f-923e-1b05467c00e7 ro noplymouth fastboot acpiphp.disable=1 pcie_aspm=force vt.handoff=7 i915.fastboot=1 nopti nospectre_v2 nospec mem_sleep_default=deep
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-4.14.134-0414134-generic
}
Press <Enter> to continue

Обновление grub для загрузки предыдущего ядра

Набор команд Grub существует для каждого пункта меню. Все скомпилированные записи хранятся в /boot/grub/grub.cfg файл.

В этом примере мы хотим, чтобы номер меню `1>9> был установлен по умолчанию, поэтому мы используем:

sudo -H gedit /etc/default/grub

и найдите эту строку:

GRUB_DEFAULT=0

и измените это на это:

GRUB_DEFAULT="1>9"

Затем сохраните файл и запустите

sudo update-grub

Перезагрузитесь в определенное ядро, номер версии и тип которого можно узнать из ls /boot | grep vmlinuz выполнение команды.

Создайте сценарий со следующим содержимым: $ vim.tiny kernboot.sh

    kernel="5.3.0-40-generic"
    kernlist="$(grep -i "menuentry '" /boot/grub/grub.cfg|sed -r "s|--class .*$||g")"
    printf "%s$kernlist\n" | logger
    menuline="$(printf "%s$kernlist\n"|grep -ne $kernel | grep -v recovery | cut -f1 -d":")"
    menunum="$(($menuline-2))"
    grub-reboot "1>$menunum"
    echo "The next grub's menu entry will be choosen after the reboot:\n 1>$menunum" | logger

    reboot

Добавьте к скрипту права на выполнение и запустите его:

$ chmod +x kernboot.sh
$ sudo ./kernboot.sh

Скрипт может быть помещен в cron с помощью sudo crontab -e а также @reboot /path/to/script

Я пробовал его 19.10 и 20.04, и он работает, как ожидалось. Этот скрипт, но безreboot команда может быть даже помещена в корневой каталог cron с участием sudo crontab -e: @reboot /pathto/kernboot.sh В результате при следующей загрузке ОС загрузится с ядром, указанным в скрипте.

Мне было проще всего это сделать с помощью grub-customizer: http://ubuntuhandbook.org/index.php/2014/04/install-grub-customizer-ubuntu-1404/

Другие вопросы по тегам