Вопрос или проблема
tl;dr
Мой компьютер ASRock не может загрузить мою систему Gentoo Linux, которая находится на единственном диске, отформатированном в GPT. Когда CSM выключен в UEFI, никакие записи загрузки не отображаются, и я постоянно возвращаюсь в UEFI. Когда CSM включен, мой жесткий диск отображается (без разделов), но не может загрузиться (“перезагрузите и выберите правильное устройство для загрузки”), я предполагаю, что система считает диск MBR, а он не таков, и поэтому не может загрузить его, используя устаревший BIOS.
Контекст
Недавно мой загрузчик (grub2) сломался, но ошибка казалась довольно распространенной и, возможно, разрешима путем обновления grub. Теперь, когда я добрался до попытки исправить это, я загрузил живую USB флешку с Linux, смонтировал оригинальную файловую систему, chroot’овал и обновил grub. Все прошло нормально, пока я не попытался выполнить grub-install
(это может быть важно): система сказала “EFI переменные не поддерживаются на этом устройстве”. Некоторые исследования предположили, что это может быть проблемой, когда вы загружаете свою живую дистрибутив с BIOS вместо UEFI. После некоторой отладки я в конечном итоге перепрошил свою USB флешку в GPT вместо MBR, но это на самом деле сделало ее не загрузочной (“Ошибка: BIOS/Legacy Boot of UEFI-only Media” по версии Rufus). Тем не менее, она загрузилась, после того как я отключил CSM в UEFI. Затем мне удалось успешно выполнить grub-install
и grub-mkconfig
.
Теперь, вероятно, самая странная часть заключается в том, что после этого я выключил систему и отключил живую USB флешку. Когда я снова загрузился, все работало отлично. GRUB загрузился нормально, и я смог загрузиться в Gentoo без проблем (так что я действительно исправил свою установку grub). Но затем я решил перезагрузить еще раз и оказался там, где я нахожусь сейчас:
- Когда CSM отключен в UEFI, не отображается ни одна запись загрузки, и я могу только получить доступ к UEFI или к меню загрузки. Я все еще могу загрузить живую USB флешку, когда она подключена, но только когда CSM отключен.
- Когда CSM включен, одна запись загрузки отображается в UEFI, но это только сам диск и никаких разделов. Попытка загрузить диск приводит к ошибке “перезагрузите и выберите правильное устройство для загрузки”.
Мне кажется, что по определенной причине UEFI считает, что мой диск отформатирован в MBR (поэтому он не отображается, когда CSM отключен), но когда он на самом деле пытается загрузить его, используя устаревший BIOS, он не может это сделать, потому что он отформатирован в GPT.
Обновление
После комментариев от @daniel-b и @grawity-u1686 я продолжил исследовать и попробовал несколько дополнительных вещей. Сначала я проверил с помощью efibootmgr
, какие записи загрузки уже присутствуют. Действительно, запись grub отсутствовала.
Еще одной вещью, которую я попробовал, было повторное выполнение grub-mkconfig
, который в своих логах говорит, что добавляет записи загрузки, но после этого все еще ничего не появилось.
Я решил добавить запись вручную, используя efibootmgr
, поэтому я проверил свою раскладку EFI-раздела (смонтированного в /boot
):
/boot
├── amd-uc.img
├── config-6.6.21-gentoo(.old)
├── initramfs-6.6.21-gentoo.img
├── intel-uc.img
├── System.map-6.6.21-gentoo(.old)
├── vmlinuz-6.6.21-gentoo(.old)
├── /EFI
│ └── /gentoo
│ └── grubx64.efi
└── /grub
├── grub.cfg
├── grubenv
├── /fonts [...]
├── /themes [...]
└── /x86_64-efi [...]
Мне это кажется немного странным, но в любом случае, я затем выполнил следующую команду efibootmgr
:
efibootmgr -c -d /dev/sda -p 1 -L "Grub" -l '\boot\EFI\gentoo\grubx64.efi'
Эта запись теперь отображается в UEFI, но она не может загрузиться (просто возвращается в UEFI, я не нашел никаких сообщений об ошибках). Изменил ли я что-то не так в этой команде?
Дополнительные данные
- Версия UEFI “N3000-NUC P1.30”
- Я пытаюсь загрузить Gentoo Linux
- Живая USB дистрибуция SystemRescue 11.02
- Я подтвердил через GParted, что диск разделен с использованием GPT, и что
/dev/sda1
является загрузочным разделом, отформатированным в fat32
Мне кажется, что по какой-то причине UEFI считает, что мой диск отформатирован в MBR (поэтому он не отображается, когда CSM отключен), но когда он на самом деле пытается загрузить его, используя устаревший BIOS, он не может это сделать, потому что он отформатирован в GPT.
Это не так. Разделение GPT и код BIOS для загрузки не исключают друг друга – на самом деле каждый диск с разделами GPT обязан иметь “защитный” MBR, и этот MBR может содержать код устаревшего BIOS, который понимает разделение GPT. (И наоборот, диски с MBR-разделами могут иметь раздел EFI для загрузки UEFI.)
Это означает, что в режиме CSM более-менее любой диск будет отображаться, даже если у него нет кода запуска для устаревших систем (но у него может быть устаревший код загрузки от двух переустановок назад).
Фактическая причина, по которой ваш диск не отображается как загрузимый UEFI, заключается в следующем:
-
Согласно спецификации, внутренние (фиксированные) диски не должны отображаться вообще, поскольку концепция “загрузочного диска” в EFI существует только для съемных дисков – USB-флешек, CD и т.д. – в то время как внутренние диски не должны быть загрузочными сами по себе.
Вместо загрузки внутреннего диска вы должны загружать ОС из этого диска, через специальные записи загрузки ОС (такие, как те, которые вы добавили с помощью
efibootmgr
), которые указывают непосредственно на конкретный файл загрузки. -
Практически большинство прошивок на самом деле не беспокоят различие между “внутренними и съемными” дисками и действительно будут отображать внутренние диски как загрузочные – пока на них есть правильное содержимое.
Таким образом, ваш диск не отображается, потому что он не имеет загрузчика, установленного по адресу
\EFI\boot\bootx64.efi
, который является “умолчательным” местоположением для загрузчика EFI. Когда записи загрузки отсутствуют, прошивка не будет сканировать EFI-раздел диска на наличие любого .efi файла – она ищет только этот конкретный файл.
Итак, у вас есть два способа заставить UEFI распознать внутренний диск как загрузочный: а) добавить индивидуальную запись через efibootmgr или б) установить загрузчик (GRUB) по умолчанию в снимаемом пути. Предпочтительнее первое, так как второе может выйти из синхронизации с основной копией, если выполнено вручную.
Эта запись теперь отображается в UEFI, но она не может загрузиться (просто возвращается в UEFI, я не нашел никаких сообщений об ошибках). Изменил ли я что-то не так в этой команде?
Пути загрузочных записей EFI относительны по отношению к корню EFI-раздела – а не к корню файловой системы Linux, так как EFI совершенно не осведомлен о вашей конфигурации монтирования Linux. Таким образом, путь EFI к вашему grubx64.efi будет \EFI\gentoo\grubx64.efi
.
Ответ или решение
Ваша проблема с загрузкой Gentoo Linux на системе ASRock, использующей GPT-разделы, связана с тем, как UEFI обрабатывает загрузочные устройства и записи. Давайте рассмотрим шаги, которые вы можете предпринять для решения этой проблемы.
Основные проблемы
-
Отсутствие загрузочных записей при отключенном CSM: Это происходит из-за того, что UEFI не видит загрузочные записи для вашей ОС. Это может быть связано с тем, что загрузчик (GRUB) не был установлен в стандартное место (например, в
\EFI\boot\bootx64.efi
), или что загрузочные записи не были правильно созданы. -
Отображение жесткого диска без разделов при включенном CSM: Это указывает на то, что UEFI рассматривает диск не как GPT, а как MBR-совместимый, что недопустимо для GPT-форматированного диска.
Решение проблемы
-
Проверка структуры EFI-раздела:
Убедитесь, что ваш EFI-раздел правильно структурирован. Используйте командуls /boot/EFI
для проверки. Вы должны увидеть папкуgentoo
, содержащуюgrubx64.efi
. -
Создание записи загрузки с помощью efibootmgr:
Вы уже попытались создать запись загрузки с помощьюefibootmgr
, но путь необходимо указать правильно. Поскольку EFI пути относительны корня EFI-раздела, вы должны использовать:efibootmgr -c -d /dev/sda -p 1 -L "Grub" -l '\EFI\gentoo\grubx64.efi'
Пожалуйста, убедитесь, что
\
используется для создания пути в Windows стиле, и путь начинается с корня EFI-раздела. -
Установка загрузчика GRUB в стандартное место:
В дополнение к созданной записи загрузки, чтобы избежать путаницы, можно установить GRUB в стандартное место, используя следующую команду:grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Grub
Убедитесь, что вы находитесь в chroot окружении Gentoo, когда выполняете эту команду. Также проверьте, что ваше EFI-раздел доступно и смонтировано правильно.
-
Обновление конфигурации GRUB:
После успешной установки GRUB выполните обновление конфигурации:grub-mkconfig -o /boot/grub/grub.cfg
-
Проверка наличия загрузочной записи:
После выполнения всех вышеуказанных шагов, снова проверьте наличие загрузочной записи черезefibootmgr
. Необходимо убедиться, что записи указаны правильно и соответствуют установленному на вашем диске загрузчику. -
Дополнительные проверки:
- Убедитесь, что Secure Boot отключен в UEFI, если это требуется для вашего дистрибутива.
- Проверьте, правильно ли настроены параметры загрузки (напоминаем, что параметры CSM должны быть отключены для загрузки в UEFI-режиме с GPT).
Заключение
Ваша проблема связана с неправильными записями загрузки и путями к EFI-файлам в UEFI. Следуя вышеперечисленным шагам, вы сможете решить проблему и загрузить вашу систему Gentoo с GPT-раздела. Если все еще возникают проблемы, возможно, стоит проверить обновления для вашей UEFI (BIOS) и обратиться к документации ASRock для специфичной поддержки.