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

Вопрос или проблема

Я управляю сервером на Red Hat Enterprise Linux версии 7.8 и только что обновил минорную версию до 7.9, используя официальные установочные ISO-образы RHEL версии 7.9, и перезагрузил после обновления.

(Обратите внимание, что сервер работает на виртуальной машине VMware vSphere 7.)

Теперь проблема следующая.
Вывод команды cat /etc/os-release показывает:

NAME="Red Hat Enterprise Linux Server"
VERSION="7.9 (Maipo)"
ID="rhel"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.9"
PRETTY_NAME="Red Hat Enterprise Linux Server 7.9 (Maipo)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:7.9:GA:server"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
REDHAT_BUGZILLA_PRODUCT_VERSION=7.9
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="7.9"

Однако вывод команды uname -srm показывает:

Linux 3.10.0-1127.el7.x86_64 x86_64

А команда yum list installed kernel сообщает, что установлены два ядра, как показано ниже:

Загружены плагины: langpacks, product-id, search-disabled-repos, subscription-
              : manager
Установленные пакеты
kernel.x86_64                   3.10.0-1127.el7                    @anaconda/7.8
kernel.x86_64                   3.10.0-1160.el7                    @local-iso

Я не понимаю. Почему после обновления и перезагрузки ОС всё ещё загружается версия 7.8, а версия 7.9 даже не отображается в меню загрузки?

Итак, чтобы ускорить диагностику, я собрал некоторую информацию из ОС, указанную ниже, которая может быть полезна:
Вывод команды awk -F\' '==menuentry {print i++ : }' /boot/grub2/grub.cfg:

0 : Red Hat Enterprise Linux Server (3.10.0-1127.el7.x86_64) 7.8 (Maipo)
1 : Red Hat Enterprise Linux Server (0-rescue-71be072259f245f5b1a7cc30b3746e8f) 7.8 (Maipo)

Вывод команды grub2-editenv list:

saved_entry=Red Hat Enterprise Linux Server (3.10.0-1127.el7.x86_64) 7.8 (Maipo)

Вывод команды grubby --info ALL:

index=0
kernel=/boot/vmlinuz-3.10.0-1127.el7.x86_64
args="ro crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet LANG=en_US.UTF-8"
root=/dev/mapper/rhel-root
initrd=/boot/initramfs-3.10.0-1127.el7.x86_64.img
title=Red Hat Enterprise Linux Server (3.10.0-1127.el7.x86_64) 7.8 (Maipo)
index=1
kernel=/boot/vmlinuz-0-rescue-71be072259f245f5b1a7cc30b3746e8f
args="ro crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet"
root=/dev/mapper/rhel-root
initrd=/boot/initramfs-0-rescue-71be072259f245f5b1a7cc30b3746e8f.img
title=Red Hat Enterprise Linux Server (0-rescue-71be072259f245f5b1a7cc30b3746e8f) 7.8 (Maipo)
index=2
non linux entry

Вывод команды grubby --info DEFAULT:

index=0
kernel=/boot/vmlinuz-3.10.0-1127.el7.x86_64
args="ro crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet LANG=en_US.UTF-8"
root=/dev/mapper/rhel-root
initrd=/boot/initramfs-3.10.0-1127.el7.x86_64.img
title=Red Hat Enterprise Linux Server (3.10.0-1127.el7.x86_64) 7.8 (Maipo)

Вывод команды lsblk:

NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   150G  0 диск
├─sda1            8:1    0     2M  0 раздел
├─sda2            8:2    0   200M  0 раздел /boot
└─sda3            8:3    0 149.8G  0 раздел
  ├─rhel-root   253:0    0 117.8G  0 lvm  /
  └─rhel-swap   253:1    0    32G  0 lvm  [SWAP]
sdb               8:16   0   300G  0 диск
└─dataVG-dataLV 253:3    0   300G  0 lvm  /Data
sdc               8:32   0   300G  0 диск
└─bkpVG-bkpLV   253:2    0   300G  0 lvm  /Backup
sr0              11:0    1  1024M  0 rom

Вывод команды df -Th:

Файловая система            Тип      Размер Использовано Доступно Использовано% Смонтировано в
devtmpfs                  devtmpfs  7.8G     0  7.8G   0% /dev
tmpfs                     tmpfs     7.8G  8.0K  7.8G   1% /dev/shm
tmpfs                     tmpfs     7.8G   13M  7.8G   1% /run
tmpfs                     tmpfs     7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/mapper/rhel-root     xfs       118G   13G  106G  11% /
/dev/sda2                 xfs       197M  173M   25M  88% /boot
/dev/mapper/bkpVG-bkpLV   xfs       300G   33M  300G   1% /Backup
/dev/mapper/dataVG-dataLV xfs       300G   33M  300G   1% /Data
tmpfs                     tmpfs     1.6G   12K  1.6G   1% /run/user/42
tmpfs                     tmpfs     1.6G     0  1.6G   0% /run/user/0

Вывод команды ls /boot:

config-3.10.0-1127.el7.x86_64  initramfs-0-rescue-71be072259f245f5b1a7cc30b3746e8f.img  System.map-3.10.0-1127.el7.x86_64
config-3.10.0-1160.el7.x86_64  initramfs-3.10.0-1127.el7.x86_64.img                     System.map-3.10.0-1160.el7.x86_64
efi                            initramfs-3.10.0-1127.el7.x86_64kdump.img                vmlinuz-0-rescue-71be072259f245f5b1a7cc30b3746e8f
extlinux                       symvers-3.10.0-1127.el7.x86_64.gz                        vmlinuz-3.10.0-1127.el7.x86_64
grub2                          symvers-3.10.0-1160.el7.x86_64.gz                        vmlinuz-3.10.0-1160.el7.x86_64

Вывод команды ls /boot/efi/EFI/redhat/:

BOOT.CSV  BOOTX64.CSV  fw  fwupia32.efi  fwupx64.efi  mmx64.efi  shim.efi  shimx64.efi  shimx64-redhat.efi

==============================================================================

Я попробовал два метода,
Первый – выполнение следующих 2 команд и затем перезагрузка системы:

grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg

Другой – выполнение следующих 3 команд и затем перезагрузка системы:

dracut -f initramfs-3.10.0-1160.el7.x86_64.img
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg

Обратите внимание, что вывод команды grub2-mkconfig -o /boot/grub2/grub.cfg таков:

Генерация файла конфигурации grub ...
Файловый дескриптор 6 (/dev/pts/0) утек в команду vgs. Родительский PID 3352: /usr/sbin/grub2-probe
Файловый дескриптор 6 (/dev/pts/0) утек в команду vgs. Родительский PID 3352: /usr/sbin/grub2-probe
Обнаружено linux-образ: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Обнаружено linux-образ: /boot/vmlinuz-3.10.0-1127.el7.x86_64
Обнаружено initrd-образ: /boot/initramfs-3.10.0-1127.el7.x86_64.img
Обнаружено linux-образ: /boot/vmlinuz-0-rescue-71be072259f245f5b1a7cc30b3746e8f
Обнаружено initrd-образ: /boot/initramfs-0-rescue-71be072259f245f5b1a7cc30b3746e8f.img
Файловый дескриптор 6 (/dev/pts/0) утек в команду vgs. Родительский PID 3651: /usr/sbin/grub2-probe
Файловый дескриптор 6 (/dev/pts/0) утек в команду vgs. Родительский PID 3651: /usr/sbin/grub2-probe
готово

Оба решения в итоге не привели к успешной загрузке ОС, и ошибки на экране во время загрузки были аналогичны тому, что корневая файловая система не может быть смонтирована, как показано ниже:

Kernel panic - не синхронизируется: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 1 PID: 1 Comm: swapper/0 Not tainted 3.10.0-1160.el7.x86_64 #1

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

Ответ или решение

Добро пожаловать в сложный, но весьма характерный случай, с которым сталкиваются системные администраторы при обновлении операционных систем на базе Linux, таких как Red Hat Enterprise Linux. Давайте разберемся в проблеме и найдем пути ее решения.

Проблема

После обновления с RHEL 7.8 до RHEL 7.9 система продолжает загружаться с ядром старой версии (3.10.0-1127.el7.x86_64). Хотя, как говорит cat /etc/os-release, у вас уже установлена версия 7.9 (Maipo). Наиболее вероятной причиной этого является то, что загрузочная запись GRUB для нового ядра не обновлена или отсутствует в конфигурации GRUB.

Анализ предоставленных данных

  1. Вывод uname -srm: указывает, что загружено старое ядро – 3.10.0-1127.
  2. grubby --info ALL и awk -F\' '==menuentry {print i++ : }' /boot/grub2/grub.cfg: показывают, что в конфигурации GRUB нет записи для нового ядра (3.10.0-1160.el7.x86_64).
  3. ls /boot: указывает, что все файлы для нового ядра присутствуют (/boot/vmlinuz-3.10.0-1160.el7.x86_64 и initramfs).
  4. df -Th: указывает на высокий уровень заполненности /boot, что могло препятствовать успешной генерации нового initramfs.

Возможные Решения

  1. Освободите Место на /boot:
    Убедитесь, что в /boot достаточно места для файлов нового ядра. Удалите старые или ненужные файлы (например, более старые версии ядра).

  2. Перегенерация initramfs:
    Убедитесь, что образ initramfs сгенерирован верно:

    dracut -f /boot/initramfs-3.10.0-1160.el7.x86_64.img 3.10.0-1160.el7.x86_64
  3. Обновление Конфигурации GRUB:
    Пересоздайте конфигурацию загрузчика GRUB:

    grub2-mkconfig -o /boot/grub2/grub.cfg
  4. Установите Новое Ядро по Умолчанию:
    Убедитесь, что новое ядро установлено по умолчанию:

    grub2-set-default "Red Hat Enterprise Linux Server (3.10.0-1160.el7.x86_64) 7.9 (Maipo)"
  5. Диагностика Ошибок Монтирования:
    Если после выполнения всех шагов вы все еще сталкиваетесь с проблемой монтирования, возможно, проблема связана с параметрами загрузки:

    • Убедитесь, что GUID/UUID в /etc/fstab верны.
    • Проверьте параметры загрузки в конфигурации GRUB и убедитесь, что они соответствуют логическому тому.

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...