Логотип

Как безопасно откатить ядро Linux (GRUB, все дистрибутивы)

Как безопасно откатить ядро Linux (GRUB, все дистрибутивы)

Краткое резюме

  • Откат ядра означает переключение с текущего ядра Linux на более старую, ранее установленную версию.
  • Если новое обновление ядра приводит к сбою системы, перезагрузите компьютер и нажмите Shift (или Esc в UEFI), чтобы открыть меню GRUB. Затем выберите «Дополнительные параметры» и выберите более старое ядро.
  • Чтобы изменения вступили в силу в Debian или Ubuntu, отредактируйте /etc/default/grub (заменив GRUB_DEFAULT на более старую запись о ядре) и запустите sudo update-grub. В RHEL/Fedora вы можете использовать инструмент grubby (например, sudo grubby --set-default-index=1), чтобы установить более старую версию ядра по умолчанию.
  • Вы также можете использовать менеджер пакетов, чтобы удалить более новую версию ядра или понизить её версию (при этом должна быть установлена хотя бы одна более старая версия). Например, в Debian/Ubuntu используйте sudo apt purge linux-image-<new-version> (замените на актуальную версию). Всегда проверяйте, доступна ли более старая версия ядра.
  • Предупреждение: Откат ядра — это сложная операция. Она может привести к тому, что система станет незагружаемой или возникнут несоответствия драйверов/модулей. Прежде чем приступать к работе, всегда создавайте резервные копии и план восстановления.

 

Что означает «откат» ядра Linux

Как вы уже знаете, ядро — это основная часть Linux. Когда мы говорим об откате ядра, мы имеем в виду возврат к более ранней версии ядра Linux.

Это часто делается, если последнее ядро вызывает проблемы (например, сбои или отсутствие драйверов). Это не обычное обновление, а скорее целенаправленное понижение версии ядра операционной системы.

Во многих дистрибутивах Linux по умолчанию установлены старые ядра. При установке нового ядра старое обычно остаётся в /boot. Это позволяет при необходимости загрузиться со старого ядра.

Например, если из-за нового обновления ядра ваша система перестала загружаться, вы всегда можете выбрать для загрузки более старую версию ядра. Откат — это просто использование этой меры предосторожности и повторное использование более старой версии ядра.

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

Обратите внимание, что откат ядра Linux — это временное решение, а не постоянное исправление. Оно не устраняет основную ошибку или отсутствие функции в новом ядре. Оно просто позволяет вам пока использовать проверенную версию.

 

Когда может потребоваться откат ядра

Откат ядра обычно выполняется в экстренных случаях или при устранении неполадок. К распространённым причинам относятся:

  • Новое ядро приводит к сбоям в работе оборудования или драйверов: Например, если после обновления перестанет работать сетевая карта или видеокарта.
  • Проблемы со стабильностью: При использовании нового ядра система может аварийно завершать работу, зависать или в ней могут отказывать службы.
  • Проблемы с совместимостью: Некоторые приложения или периферийные устройства могут быть несовместимы с последней версией ядра.

 

Откат ядра Linux имеет смысл только в том случае, если новое ядро вызывает серьёзные сбои. Пожалуйста, рассмотрите возможность отката когда система становится нестабильной после обновления, критически важные службы выходят из строя или перестаёт работать оборудование.

Всегда сначала тестируйте более старую версию ядра. Например, попробуйте загрузить её один раз через меню GRUB, чтобы убедиться, что проблема устранена.

Это не стандартная операция для устранения мелких неполадок. Если возникла небольшая ошибка, возможно, лучше дождаться исправления или попробовать другую версию ядра (например, ядро с долгосрочной поддержкой).

Помните, что откат также приводит к удалению последних исправлений и обновлений системы безопасности, поэтому используйте его с осторожностью и только в крайнем случае.

 

Основной вывод:

Откат ядра Linux может спасти ситуацию, когда из-за неудачного обновления ваша система выходит из строя. Делать это нужно осторожно, с резервными копиями и проверкой. Используйте этот способ, чтобы восстановить стабильное состояние системы, а затем устраните основную причину или дождитесь исправления. При разумном использовании это полезный способ восстановления, но он не подходит для регулярного обслуживания.

Читать  Как проверить, содержит ли массив значение в Bash

 

Загрузка более старой версии ядра с помощью GRUB

Большинство дистрибутивов позволяют выбрать более старое ядро во время загрузки через меню GRUB. По умолчанию многие системы скрывают меню GRUB, чтобы ускорить загрузку.

Чтобы увидеть меню GRUB, удерживайте клавишу Shift (в системах с BIOS) или нажмите Esc (в системах с UEFI) сразу после включения питания. Откроется меню загрузки GRUB.

Вот пример скриншота меню загрузки GRUB в Fedora:

Меню загрузки GRUB в Fedora

 

Меню загрузки GRUB в openSUSE:

Меню загрузки GRUB в openSUSE

 

Меню загрузки GRUB в Ubuntu:

Меню загрузки GRUB в Ubuntu

 

Теперь давайте переключимся на другое ядро.

В меню GRUB (Debian или Ubuntu) найдите пункт «Дополнительные параметры для Linux» или аналогичный.

Расширенные параметры в меню загрузки GRUB

 

В этом подменю вы увидите список установленных версий ядра. Выберите в списке предыдущую (более старую) версию ядра. Система загрузится с использованием этой версии ядра.

Список установленных версий ядра

 

Обратите внимание, что в Fedora нет подменю. Просто выберите ядро в меню Grub и нажмите ENTER, чтобы загрузиться с выбранным ядром.

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

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

 

Установка старого ядра по умолчанию

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

Изменение ядра по умолчанию путем редактирования конфигурации GRUB в Debian, Ubuntu и производных системах

Откройте /etc/default/grub в текстовом редакторе с помощью sudo:

sudo nano /etc/default/grub

 

Найдите строку GRUB_DEFAULT=0. Вы можете изменить её на пункт меню для более старого ядра. Например, вы можете указать GRUB_DEFAULT="1>2" для выбора третьего ядра во втором подменю. Формат "X>Y" означает X-е меню GRUB, а затем Y-й пункт.

Запутались? Что ж, позвольте мне объяснить на примере в следующем разделе.

 

Понимание пунктов меню GRUB в Ubuntu (важно)

В системах Ubuntu версии ядра не отображаются в главном меню GRUB. Они хранятся в разделе Дополнительные параметры для Ubuntu.

Это означает, что GRUB_DEFAULT должен использовать путь к подменю, а не просто число.

В целом нумерация в GRUB начинается с 0, а не с 1.

Вот пункты меню в главном меню GRUB в Ubuntu 24.04:

0  Ubuntu, with Linux 6.8.0-83-generic
1  Ubuntu, with Linux 6.8.0-83-generic (recovery)
2  Ubuntu, with Linux 6.8.0-79-generic
3  Ubuntu, with Linux 6.8.0-79-generic (recovery)

 

 

Главное меню GRUB в Ubuntu 24.04

 

Внутри Дополнительных параметров для Ubuntu:

0 Ubuntu с Linux 6.8.0-83-generic
1 Ubuntu с Linux 6.8.0-83-generic (recovery)
2 Ubuntu с Linux 6.8.0-79-generic
3 Ubuntu с Linux 6.8.0-79-generic (recovery)

 

Подменю GRUB в Ubuntu 24.04

 

Чтобы по умолчанию загружалось более старое ядро (например, 6.8.0-79-generic), вам нужно отредактировать файл /etc/default/grub

Перед внесением каких-либо изменений сделайте резервную копию файла grub:

sudo cp /etc/default/grub /etc/default/grub.bak

 

А затем отредактируйте его в своём любимом текстовом редакторе:

sudo nano /etc/default/grub

 

Найдите следующую строку:

GRUB_DEFAULT=0

 

При такой настройке ядро загружается непосредственно на первом главном экране GRUB.

Чтобы установить 6.8.0-79-generic в качестве ядра по умолчанию, измените:

GRUB_DEFAULT="1>2"

Изменение конфигурации GRUB в Ubuntu

Важное примечание: если вы используете X>Y, то они должны быть в кавычках — иначе GRUB проигнорирует их.

Это означает:

  • 1 → «Дополнительные параметры для Ubuntu»
  • 2 → более старое ядро в этом подменю

 

После сохранения /etc/default/grub выполните следующую команду, чтобы заново создать меню загрузки.

sudo update-grub

 

При следующей перезагрузке GRUB по умолчанию загрузит выбранное старое ядро.

 

Измените ядро по умолчанию с помощью grubby в RHEL, Fedora

В последних версиях Fedora и RHEL для управления ядрами используется инструмент grubby

Сначала просмотрите список установленных ядер с помощью команды:

sudo grubby --info=ALL

Список установленных ядер Linux в Fedora и RHEL

 

Здесь показан порядковый номер каждого ядра. Как я уже упоминал ранее, порядковые номера всегда начинаются с 0, а не с 1.

Затем установите значение по умолчанию по индексу. Например:

sudo grubby --set-default-index=1

 

Это сделает ядро с индексом 1 (второе в списке) ядром по умолчанию при загрузке. Вы можете проверить это с помощью команды:

sudo grubby --default-title

 

Используйте dnf (или yum) в Fedora/RHEL

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

dnf install kernel-<version>

 

Читать  The Flying Penguin: бортовые развлекательные системы Linux

После установки вы можете использовать grubby как описано выше или вручную отредактировать конфигурацию GRUB. После этого вы можете удалить неисправное новое ядро с помощью sudo dnf remove kernel-core-<bad-version>, убедившись, что осталось хотя бы одно старое ядро.

 

Используйте блокировку пакетов/привязку

Чтобы предотвратить установку более новой версии ядра при обновлении, можно заблокировать пакет ядра.

Например, в Debian/Ubuntu используйте:

sudo apt-mark hold linux-image-<версия>

 

Подробную информацию о закреплении пакетов в Ubuntu можно найти в следующем руководстве:

В Fedora вы можете использовать команду dnf versionlock для предотвращения обновления ядра.

Выберите ядро, которому вы доверяете. Пример:

6.17.3-300.fc43.x86_64

 

Чтобы заблокировать его, просто введите:

sudo dnf versionlock add kernel-6.17.3-300.fc43.x86_64

 

Проверить:

sudo dnf versionlock list

 

Это гарантирует, что автоматические обновления не заменят выбранное вами ядро до тех пор, пока вы не снимете блокировку.

 

Проверка:

После внесения изменений перезагрузите систему, чтобы убедиться, что по умолчанию используется более старая версия ядра.

Запустите uname -r, чтобы проверить активную версию ядра.

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

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

 

Использование менеджера пакетов для возврата к предыдущему ядру

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

Debian/Ubuntu

Список доступных ядер можно получить с помощью команды:

dpkg -l 'linux-image-*'

 

Удалите проблемный элемент с помощью:

sudo apt purge linux-image-<new-version>

 

Замените <new-version> на точное название пакета.

Не удаляйте файлы из /boot вручную. Если вы удалите пакеты ядра с помощью apt, загрузчик обновится автоматически или вам будет предложено выполнить команду:

sudo update-grub

 

Если вы не использовали менеджер пакетов (например, установили пользовательское ядро), вы должны запустить sudo update-grub после удаления.

Всегда следите за тем, чтобы оставался установленным хотя бы один старый образ ядра, иначе система может перестать загружаться.

 

Fedora / CentOS /RHEL

Для отката к старому ядру вы можете использовать либо dnf, либо yum.

Например, для понижения версии до ядра 6.12 вы можете запустить:

sudo dnf install kernel-6.12*

 

Или чтобы удалить новый:

sudo dnf remove kernel-core-<new-version>

 

Обратите внимание, что работающее ядро нельзя удалить во время его использования. Если вы попытаетесь удалить текущее ядро (без предварительной загрузки другого), система предупредит вас, что она может стать недоступной для загрузки. Всегда перезагружайтесь на более старом ядре, прежде чем удалять новое.

 

Arch Linux

В Arch Linux по умолчанию обычно устанавливается только одно ядро. Вы можете установить долгосрочный пакет ядра (LTS) (linux-lts) вместе с основным ядром.

После установки обновите GRUB:

sudo grub-mkconfig -o /boot/grub/grub.cfg

 

и выберите LTS-ядро при загрузке.

Для понижения версии ядра Arch вам может потребоваться использовать Arch Archive для получения старых пакетов или пакет AUR.

 

SUSE/openSUSE

Если вы используете файловую систему Btrfs, вы можете использовать Snapper для отката к снимку состояния (который включает в себя ядро). Кроме того, openSUSE часто по умолчанию сохраняет два последних ядра, и вы можете выбрать более старое в меню загрузки или установить его с помощью zypper.

В каждом дистрибутиве есть свои особенности, но принцип один и тот же: убедитесь, что установлен более старый пакет ядра, удалите или проигнорируйте проблемный пакет и обновите загрузчик. После этого проверьте uname -r и lsblk или lsmod , чтобы убедиться, что всё в порядке.

 

Другие варианты отката

Снимки системы

Такие инструменты, как Timeshift (или Btrfs/Snapper для создания снимков), могут откатывать систему до предыдущего состояния, включая ядро. Это более широкий подход. Однако он позволяет откатывать все системные файлы, а не только ядро.

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

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

 

Установка ядра вручную

В крайнем случае вы можете скачать и скомпилировать более старую версию ядра с kernel.org. Это сложный процесс, который не рекомендуется новичкам.

Если вы это сделаете, устанавливайте его осторожно (используя make install или пользовательские .deb/.rpm) и убедитесь, что GRUB обновлён. Опять же, будьте осторожны при установке ядер вручную, так как они могут некорректно интегрироваться с системой пакетов вашего дистрибутива.

Читать  Ansible. Роли в Ansible

В целом, самые простые и безопасные способы отката используют инструменты вашего дистрибутива (меню GRUB и менеджер пакетов), а не ручное копирование файлов.

Кроме того, вы можете использовать Mainline — графическое приложение, специально разработанное для установки сборок ядра Ubuntu Mainline в дистрибутивах на основе Debian. Подробнее см. по ссылке:

⚠️ Предупреждение: Изменение ядер сопряжено с риском. Удаление или неправильная настройка ядер могут привести к тому, что ваша система перестанет загружаться. Не удаляйте файлы ядра вручную из /boot. При удалении работающего образа ядра будут удалены /boot/vmlinuz-… и его модули, и исправить это можно будет только путем восстановления этих файлов. Прежде чем что-либо удалять, убедитесь, что старое ядро загружается корректно. Сначала сделайте резервную копию данных и настроек. Держите наготове живой USB-накопитель или режим восстановления на случай, если система не запустится.

 

Проверьте версии ядра и протестируйте всё

После отката ядра всегда проверяйте результат:

Проверьте версию ядра:

Запустите uname -r, чтобы убедиться, что вы используете более старую версию ядра.

Протестируйте оборудование и службы:

Убедитесь, что проблема устранена и что аппаратное обеспечение (Wi-Fi, графика, USB и т. д.) и службы (сеть, драйверы хранилища и т. д.) корректно работают с более старой версией ядра.

Проверьте порядок загрузки:

Убедитесь, что по умолчанию GRUB указывает на более старое ядро. Затем повторно выполните следующую команду, чтобы заново создать меню загрузки:

sudo update-grub

 

или

grub2-mkconfig

 

Чтобы проверить систему RHEL, выполните команду:

grubby --default-kernel

 

Просмотрите логи:

Проверьте dmesg или /var/log/syslog, чтобы узнать, не возникает ли ошибок, связанных с модулями ядра.

 

Спланируйте дальнейшие действия:

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

 

Распространённые ошибки, которых следует избегать

1. Забыли обновить GRUB:

Если вы редактируете /etc/default/grub, не забудьте запустить: sudo update-grub (Debian/Ubuntu) или sudo grub2-mkconfig -o /boot/grub2/grub.cfg (RHEL/CentOS). Без этого GRUB не узнает о ваших изменениях.

2. Удаление всех ядер:

Никогда не удаляйте все образы ядра. Всегда оставляйте хотя бы одно работающее ядро. Если вы удалите текущее ядро, сначала перезагрузите систему с другим ядром. Система может предупредить вас, если вы попытаетесь удалить работающее ядро.

3. Удаление файлов вручную:

Не удаляйте вручную файлы vmlinuz или initramfs в /boot. Для удаления ядер используйте менеджер пакетов. Прямое удаление файлов может привести к сбою в работе меню загрузчика и затруднить восстановление.

4. Неверная запись в GRUB:

При настройке GRUB_DEFAULT убедитесь, что вы используете правильную запись в меню. Легко ошибиться в подсчёте индексов. Вы можете вывести список записей с помощью grep menuentry /boot/grub/grub.cfg. Использование функции «сохранено» (с GRUB_DEFAULT=saved и grub-set-default) менее подвержено ошибкам, чем жёсткое кодирование индексов.

5. Несоответствие оборудования или модулей:

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

 

Когда (и когда не) следует откатывать ядро

Когда следует использовать откат:

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

Когда не следует использовать откат:

Для устранения незначительных неудобств или косметических дефектов. Не выполняйте откат из-за незначительных проблем, которые можно решить другими способами (например, переустановив драйверы, дождавшись обновлений или изменив параметры ядра).

 

Заключение

Откат ядра Linux должен быть вашим крайним средством. Делайте это, когда новое обновление ядра приводит к серьёзным сбоям в работе системы или проблемам с оборудованием. Это поможет быстро восстановить работоспособность.

Однако это не заменяет собой полноценные обновления и исправления: основная проблема по-прежнему требует решения, и вы не получите никаких новых исправлений в обновлённом ядре.

Не выполняйте откат в производственных системах, если у вас нет плана безопасного обновления.

Всегда действуйте осторожно. При неправильном выполнении отката система может стать незагружаемой или небезопасной. Держите под рукой резервные копии. После возврата к стабильному ядру следите за обновлениями.

Когда выйдет новое исправление для ядра (или после того, как вы диагностируете проблему), вы сможете вернуться к более новой версии ядра контролируемым образом.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Редактор: AndreyEx

Рейтинг: 5 (1 голос)
Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала