Как я могу загрузиться с более старой версией ядра?
Последнее ядро вызывает проблемы с моим звуком, которое отлично работало со старой версией. Поскольку у меня установлена только 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
Если у вас есть несколько ядер в вашей системе, вы можете вручную установить, какая версия ядра будет запускаться:
Перезагрузите компьютер с нажатой кнопкой Shift для отображения GRUB после запуска BIOS. Вы увидите что-то вроде: стартовая страница GRUB
Выберите "Дополнительные параметры для Ubuntu" и запомните индекс этой строки меню (отсчет начинается с 0). На картинке индекс равен 1
Выберите конкретное ядро для загрузки, а также запомните индекс этой строки меню (отсчет начинается с 0). На картинке индекс выбранного ядра равен 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
Затем перезагрузите компьютер. Вам будет предложено выбрать ядро.
Дайте мне знать, если это сработало.
С уважением
Сразу после заставки BIOS/UEFI во время загрузки с BIOS быстро нажмите и удерживайте клавишу Shift, которая вызовет меню GNU GRUB. (Если вы видите логотип Ubuntu, вы пропустили точку, в которой вы можете войти в меню GRUB.) С помощью UEFI нажмите (возможно, несколько раз) клавишу Esc, чтобы попасть в меню GRUB. Иногда заставка производителя является частью загрузчика Windows, поэтому, когда вы включаете компьютер, он сразу переходит к экрану GRUB, а затем нажимать Shift не нужно.
На экране GRUB выберите Дополнительные параметры для Ubuntu и нажмите Enter.
Появится новый фиолетовый экран со списком ядер. Используйте клавиши ↑ и ↓, чтобы выбрать, какая запись будет выделена. Нажмите 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/