Вопрос или проблема
Я недавно обновил ядро на CentOS 6.7. Это также очистило все старые версии, что также обновило мой /boot/grub/grub.conf, в нем теперь только одна запись (нового ядра). Теперь, когда я перезагрузил систему, загрузка завершается с ошибкой “файл не найден”, и причина в том, что система все еще пытается загрузиться с помощью старого ядра, которого больше нет в /boot. Когда я захожу на страницу со списком ядер, там указано только старое ядро (которое, опять же, больше нет), ни следа нового ядра в этом списке. В конце концов, мне пришлось загрузиться с помощью командной строки grub, все сработало хорошо. Я проверил /etc/grub.conf, это символическая ссылка на /boot/grub/grub.conf. Также есть еще один grub.conf в /boot/efi/EFI/redhat/, но он также идентичен /boot/grub/grub.conf. Я искал строку версии ядра, чтобы проверить, ссылается ли оно еще где-то, но нет. Затем я понял, что это выше моих сил, что-то все еще не так. Пожалуйста, дайте совет.
Обновление
Это может быть связано с последним обновлением BIOS, где теперь включена загрузка uefi. Когда я вручную выбираю загрузочный диск, я вижу 2 варианта: один начинается с UEFI aaaaaa OS Bootloader и другой, который начинается с SATA aaaaaaaa Boot Drive. Когда я выбираю загрузочный диск, он загружается с последним ядром. Нужно ли мне что-то изменять после обновления BIOS?
Вы можете загрузиться через командную строку grub? Просто отредактируйте grub.conf, чтобы он соответствовал исправлениям, которые вы сделали для одноразовой загрузки, сделайте резервную копию и смотрите ниже про grub-mkconfig.
—- Я перечитал и нашел больше деталей; ниже предполагалось, что вы не можете загрузиться —-
Поскольку вы не можете загрузиться, вы можете попробовать два варианта: отредактировать boot.cfg вручную или загрузиться с помощью диска для восстановления/живого CD и запустить grub-mkconfig.
Первый вариант требует, чтобы вы знали имя нового файла ядра или могли его найти (например, с помощью диска для восстановления/живого CD). Отредактируйте /boot/grub/grub.cfg (или нажмите клавишу быстрого доступа в меню grub, чтобы просто отредактировать строку загрузки для одноразовой загрузки) и найдите строку, содержащую “linux […] vmlinuz[…]. Вам нужно изменить часть vmlinuz в строке, чтобы она соответствовала новому имени файла. Если применимо, вам также придется изменить раздел initramfs на соответствующее новое имя файла. Сохраните изменения и посмотрите, сможете ли вы загрузиться (или внесите изменения в grub и посмотрите, загрузится ли система, затем отредактируйте его, когда вы войдете в систему).
Команда grub-mkconfig перезапишет эти изменения, если она не сработает правильно, поэтому, если вы добьетесь загрузки, сохраните работающий grub.cfg как резервную копию.
Последний шаг — убедиться, что (sudo) grub-mkconfig -o /boot/grub/grub.cfg правильно сгенерирует нужные строки загрузки. Если вы находитесь на живом CD и еще не смогли загрузиться в ОС, используйте chroot, чтобы изменить корень на ваш фактический диск, чтобы он подобрал правильные загрузочные файлы (и не забудьте смонтировать /boot, если это отдельный раздел). Запустите команду и посмотрите, загрузится ли система.
Шаг с grub-mkconfig не является строго необходимым, если вам удалось сделать систему загрузочной, но это хорошая практика, и обновления, вероятно, снова сломают вашу загрузку, если grub-mkconfig не будет работать.
Если выяснится, что grub-mkconfig не функционирует, вам нужно будет углубиться в /etc/grub(.d), чтобы выяснить, какой конфигурационный файл работает неправильно. Эти конфигурационные файлы очень сложные, чтобы иметь возможность справляться со множеством ситуаций, поэтому вы можете упростить, закомментировать и жестко закодировать свои собственные вещи, чтобы снова заставить это работать для вас.
Удачи.
Моя среда все еще использует устаревший grub (0.97), поэтому нет возможности выполнить grub-mkconfig.
Согласны ли вы на обновление с grub legacy до grub2?
Тогда вы можете обновить с помощью apt-get, затем:
sudo grub-install /dev/sdX --boot-directory=/ваша_папка_загрузки.
Затем выполните уже обсужденную команду: sudo grub-update (grub-mkconfig…)
Ответ или решение
Проблема, с которой вы столкнулись, связана с тем, что после обновления ядра в CentOS 6.7 конфигурация GRUB не была обновлена должным образом, что и привело к тому, что при загрузке система пытается загрузить отсутствующее старое ядро.
Вот несколько шагов, которые помогут вам решить проблему:
-
Редактирование grub.conf: Если у вас есть доступ к командной строке GRUB, загрузитесь через неё и отредактируйте конфигурационный файл. Используя команду
e
, можете изменить параметры загрузки. Найдите строку с параметрамиlinux
иinitrd
, и укажите правильные имена файлов для нового ядра. -
Запуск в режиме восстановления: Если вы не можете воспользоваться командной строкой GRUB, загрузитесь с живого диска (live CD) или диска восстановления. После этого выполните следующие действия:
- Смонтируйте ваш корневой раздел и, если это необходимо, раздел
/boot
:mount /dev/sdXn /mnt # замените sdXn на ваш корневой раздел mount /dev/sdYn /mnt/boot # если /boot на отдельном разделе
- Затем выполните команду
grub
для запуска интерфейса GRUB и введите следующую команду для загрузки вашей системы:root (hd0,0) # замените hd0,0 на корректный номер вашего загрузочного раздела kernel /vmlinuz-<новая_версия_ядра> # укажите файл нового ядра initrd /initramfs-<новая_версия_ядра>.img # укажите файл initramfs boot
- Смонтируйте ваш корневой раздел и, если это необходимо, раздел
-
Обновление grub.conf: Чтобы исправить конфигурацию GRUB на постоянной основе, вам нужно вручную обновить файл
/boot/grub/grub.conf
. Вас может заинтересовать следующая структура:default=0 timeout=5 title CentOS (новое ядро) root (hd0,0) kernel /vmlinuz-<новая_версия_ядра> ro root=/dev/sdXn initrd /initramfs-<новая_версия_ядра>.img
Убедитесь, что вы правильно указали путь к новому ядру и initramfs.
-
Использование
grub-mkconfig
(если возможно): Если ваш GRUB поддерживаетgrub-mkconfig
, вы можете выполнить команду, чтобы обновить конфигурацию:sudo grub-mkconfig -o /boot/grub/grub.conf
Однако, судя по вашему сообщению, ваша версия GRUB — это Legacy GRUB (0.97), и эта команда может быть недоступна. В этом случае вы можете рассмотреть возможность обновления до GRUB2, если это допустимо в вашей среде.
-
Обновление BIOS и UEFI: После обновления BIOS и активации UEFI убедитесь, что ваше устройство корректно настроено для загрузки через UEFI. Вы можете попробовать отключить UEFI и использовать режим UEFI/Legacy, если у вас есть такая возможность. Также проверьте порядок загрузки в BIOS: убедитесь, что загрузка происходит с правильного диска.
Рекомендуется сделать резервные копии важных данных перед внесением каких-либо изменений в конфигурацию системы или BIOS.
Если после выполнения этих шагов проблема не устраняется, пожалуйста, предоставьте дополнительные сведения о версии ядра, конфигурации системы и любых сообщениях об ошибках, которые вы наблюдаете. Удачи!