LINUX.ORG.RU

Не могу установить загрузчик в EFI

 ,


0

1

Купил вчера ноутбук с проклятой EFI, вот мучаюсь уже почти сутки, пытаясь поставить Gentoo и прописать в нее загрузчик. Пробовал все: GRUB2 с поддержкой efi-64, efibootmgr, ничего не получается. Он попросту не видит его. Перед этим устанавливал Ubuntu, там все с этим в порядке, но мне пришлось ее снести, т.к в драйверах от вай-фая обнаружился баг, который вызывал kernel panic. А в Gentoo мучаюсь с этим загрузчиком. Так вот, запись от Ubuntu осталась, и я даже не знаю, как ее снести. В разделе с efi нашел папку ubuntu. Снес ее, а она обратно восстановилась.
Gentoo устанавливал по хендбуку, только единственный участок проигнорировал

With UEFI systems, create the /boot/efi/boot/ location, and then copy the kernel into this location, calling it bootx64.efi:

root #mkdir -p /boot/efi/boot
root #cp /boot/vmlinuz-* /boot/efi/boot/bootx64.efi
Потому что у меня в разделе эта папка уже существовала и в ней уже имелся такой файл, я побоялся его затирать. Потом просмотрел его, он конечно бинарный, но среди крякозябр встречается «Microsoft Corporation», значит это явно от них. Вместо этого я скопировал ядро в папку \efi\gentoo\bootx64.efi но это не помогло.
Есть ли простой способ прописать Gentoo в эту efi? Я уже все перерыл, уже хочется либо самому об стену головой, либо ноут об нее.

★★★★★

Ответ на: комментарий от beresk_let

Но мне же еще желательно чтобы и оффтопик тоже мог грузиться. Это по-моему его загрузчик.

Rinaldus ★★★★★
() автор топика

Так вот, запись от Ubuntu осталась, и я даже не знаю, как ее снести.

http://mykubik.blogspot.com.es/2013/12/uefiefi.html

только аккуратно смотри не промахнись.

/boot/efi/boot

у нас в федорах bootx64.efi лежит в

/boot/efi/EFI/BOOT/

spichka ★★★
()
Последнее исправление: spichka (всего исправлений: 2)
Ответ на: комментарий от Rinaldus

А, про дуалбут не увидел. У меня семёрочка прописалась в /boot/efi/EFI/Microsoft. Приду домой, посмотрю точно, как у меня устроено (тоже гента с виндой и без GRUB).

beresk_let ★★★★★
()
Ответ на: комментарий от targitaj

Да, действительно, уже все сливается перед глазами. Прописал как сделано в хендбуке, установил GRUB в /boot/efi. Появилась запись Gentoo, появилось меню GRUB, но при загрузке появляется строка

Загружается Linux 4.1.6-Gentoo ...
и больше ничего. Вот grub.cfg: http://pastebin.com/eiq7dHXV
Как теперь быть?
P.S. Кстати, убунта мне сама прописала в GRUB загрузку Windows 8.1, а в Gentoo как это сделать? os-prober поставил, но с efi он не работает, насколько я вижу.

Rinaldus ★★★★★
() автор топика

Пару дней назад перевел свой десктоп на UEFI и GPT (материнка поддерживает и классический MBR). Я дуалбутчик, так что переставлял винду. Она создала несколько системных разделов, в том числе и EFI System Partition. Затем восстановил линуксовые разделы с помощью dd. ESP я банально примотировал в /boot и прописал в fstab (таким образом, главный efi-файл лежит в /boot/EFI/Boot/bootx64.efi, а GRUB в /boot/grub). Пересобрал GRUB с GRUB_PLATFORMS=«efi-64». Установил следующей командой:

grub2-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck -v
cp /boot/EFI/grub/grubx64.efi /boot/EFI/Boot/bootx64.efi
В настройках UEFI выставил загрузку с UEFI OS (это значит будет использоваться EFI/Boot/bootx64.efi). Хотя на самом деле заменять bootx64.efi не обязательно, можно просто создать запись с загрузкой grubx64.efi с помощью efibootmgr, но это зависит от конкретной реализации UEFI, способ с bootx64.efi самый универсальный.

grub2-mkconfig и os-prober без проблем нашли ядро и efi-загрузчик винды (лежащий в EFI/Microsoft/Boot/bootmgfw.efi).

Давай сюда вывод efibootmgr -v.

equeim ★★
()
Последнее исправление: equeim (всего исправлений: 3)
Ответ на: комментарий от equeim

Все сделал так же, как у тебя, разве что не стал копировать загрузчик во 2-й строке, потому что не хочу затирать. Он сам мне сделал запись под названием grub и GRUB загрузился. Но ядро по-прежнему загружать не хочет, опять зависшая строчка.
Если не разберусь завтра днем, придется завтра вечером опять установить Ubuntu или Linux Mint или что-нибудь вроде этого.

Rinaldus ★★★★★
() автор топика
Ответ на: комментарий от equeim

Вот вывод efibootmgr -v:

BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0004,0000,2001,2002,2003
Boot0000* Windows Boot Manager	HD(2,GPT,2cbd9ee4-f768-45cd-8ce3-b09cdfaa2478,0x12c800,0x96000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}....................
Boot0001* USB HDD: JetFlashTS8GJFV20	PciRoot(0x0)/Pci(0x12,0x2)/USB(0,0)/HD(1,MBR,0x115,0x1,0xf3bfff)RC
Boot0002* ST1000LM014-1EJ164              	BBS(HD,,0x500)................-...........A......................................:........A.........................
Boot0003* MATSHITA DVD-RAM UJ8HC          	BBS(CDROM,,0x500)................-...........A......................................:........A.........................
Boot0004* grub	HD(2,GPT,2cbd9ee4-f768-45cd-8ce3-b09cdfaa2478,0x12c800,0x96000)/File(\EFI\grub\grubx64.efi)
Boot2001* EFI USB Device	RC
Boot2002* EFI DVD/CDROM	RC
Boot2003* EFI Network	RC

Rinaldus ★★★★★
() автор топика
Ответ на: комментарий от Rinaldus

У тебя все же другая конфигурация. Я так понял, что /boot лежит на том же разделе, что и корень (у меня /boot это ESP), а устанавливал GRUB ты, указывая в качестве --efi-directory точку монтирования ESP. Однако оба варианта работоспособны, ошибок вроде нет.

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

Сделай cat .config | grep EFI.

Странно, что grub2-mkconfig не видит efi-загрузчик винды. Попробуй перед этим примонтировать ESP.

equeim ★★
()
Последнее исправление: equeim (всего исправлений: 1)
Ответ на: комментарий от equeim

Странно, что grub2-mkconfig не видит efi-загрузчик винды. Попробуй перед этим примонтировать ESP.

Так я этот раздел ESP и монтирую сразу же в /boot, как у тебя. Когда по хендбуку делал, то монтировал его в /boot/efi. ESP (он же /boot) у меня находится на /dev/sda2, а корневой каталог - /dev/sda5.
Но кстати, когда я устанавливал Ubuntu, у меня и в мыслях не было выносить /boot на отдельный раздел. У меня на отдельном разделе был только /home. Его установщик мне сам волшебным образом все поставил, нашел винду и прописал ее и у меня ровным счетом никаких проблем не было с загрузкой системы. Вот это «волшебство» и доводит меня сегодня весь день до белого каления, почему у него получается, а у меня нет, и что я не так делаю?!

Сделай cat .config | grep EFI.

Сделаю завтра вечером, скорее всего.

Rinaldus ★★★★★
() автор топика
Последнее исправление: Rinaldus (всего исправлений: 1)
Ответ на: комментарий от Rinaldus

Т.е. ESP у тебя прописан как /boot в fstab? Значит конфиг GRUB'а отсюда либо не рабочий, либо устаревший.

Переделай лучше заново. Отмонтируй /boot, удали все оттуда (на всякий случай). Примонтируй ESP в /boot и пропиши в fstab. Удали /boot/grub и /boot/EFI/grub. Скопируй ядро в /boot. Удали из UEFI запись grub (efibootmgr -b 0004 -B). Сделай

grub2-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck -v
grub2-mkconfig -o /boot/grub/grub.cfg

У меня таким способом все получилось без проблем с первого раза.

equeim ★★
()
Ответ на: комментарий от equeim

Спасибо, завтра еще раз попробую.

Скопируй ядро в /boot

Под каким именем? По-старинке, kernel-4.1.6-gentoo? Без этих новомодных bootx64.efi?

Rinaldus ★★★★★
() автор топика
Ответ на: комментарий от Rinaldus

Как и раньше. Загрузкой ядра занимается GRUB.

Включив CONFIG_EFISTUB, можно сделать ядро efi-приложением (как grubx64.efi или загрузчик винды) и вообще избавиться от GRUB'а, сделав запись с помощью efibootmgr. Но это неудобно, если в имени файла ядра стоит его версия (придется пересоздавать запись при каждом обновлении). Я не стал с этим заморачиваться и просто поставил GRUB.

Кстати, gentoo-sources умеет make install (автоматически копирует ядро и конфиг в /boot).

equeim ★★
()
Ответ на: комментарий от equeim

Но это неудобно, если в имени файла ядра стоит его версия (придется пересоздавать запись при каждом обновлении). Я не стал с этим заморачиваться и просто поставил GRUB.

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

Andrew ★★★
()
Ответ на: комментарий от equeim

Получилось!!!

Сделал все, как ты сказал в предыдущем посте. Обнаружил, что забыл вчера в fstab поменять точку монтирования с /boot/efi на /boot. Посмотрел в конфиге ядра все записи, которые касались EFI. Обнаружил, что кое-что не включено, в частности EFI_FB (фреймбуфер) и EFIVARS и что-то еще, не помню что. Все включил, что касалось EFI. После этого все заработало! Появилась консоль. Вошел под рутом, проверил вай-фай. Интерфейс поднимается, точки доступа сканирует нормально. Правда подключаться еще не пробовал, т.к опаздывал на работу. В общем, надеюсь, что эта проблема была единственной и больше проблем не будет.
Совет тем страждущим, которые тоже будут ломать голову и найдут эту тему в поисковике. Включите в ядре абсолютно все, что касается EFI!
P.S. Кстати, винду он мне так и не нашел. Но это не очень принципиально. Я могу при запуске ноута нажать на клавишу F12, тогда появится меню, в котором я могу выбрать для загрузки пункт Windows Boot Manager. Тогда сразу загрузится винда. А по умолчанию грузится GRUB с Gentoo.
Спасибо огромное за помощь!

Rinaldus ★★★★★
() автор топика
Последнее исправление: Rinaldus (всего исправлений: 1)

Нужно ещё добавить загрузочную запись в прошивку материнки.

man efibootmgr

anonymous
()
Ответ на: Получилось!!! от Rinaldus

Включите в ядре абсолютно все, что касается EFI!

Все включать необязательно, нужно только то, что дефолтном конфиге. У меня это

CONFIG_EFI_PARTITION=y
CONFIG_EFI=y
CONFIG_EFI_VARS=y
CONFIG_EFI_RUNTIME_MAP=y
CONFIG_EFI_RUNTIME_WRAPPERS=y
CONFIG_FB_EFI, например, при использовании свободных видеодрайверов и KMS совершенно не нужен. Лично я при каждом крупном обновлении ядра сравниваю свой конфиг с make defconfig на пример новых дефолтов.

Кстати, винду он мне так и не нашел.

Странно. Файлы /boot/EFI/Microsoft/Boot/bootmgfw.efi, /boot/EFI/Microsoft/Boot/BCD и /usr/lib/os-probes/mounted/efi/20microsoft существуют?

equeim ★★
()
Ответ на: комментарий от equeim

Странно. Файлы /boot/EFI/Microsoft/Boot/bootmgfw.efi, /boot/EFI/Microsoft/Boot/BCD и /usr/lib/os-probes/mounted/efi/20microsoft существуют?

В процессе настройки ноута мне пришлось несколько раз пересобирать ядро и когда я сделал в очередной раз grub-mkconfig, он неожиданно все же нашел винду и прописал ее в GRUB. Удивительно еще вот что. Я обнаружил, что у меня почему-то не монтируется ESP раздел в /boot, хотя в fstab все прописано и прописано правильно. Возможно, потому что раздел vfat, а он на этой стадии загрузки не умеет ее поддерживать, ядро-то еще не загрузилось. Странно также, что он тем не менее правильно загружает систему, хоть и с пустым /boot. Можно наверное было приделать initramfs, но если он и так нормально загружает ее, то зачем? Когда я пересобираю ядро, я просто вручную монтирую этот раздел в /boot и копирую туда ядро.
Основная система полностью готова: systemd, SDDM, MATE, Network Manager для вай-фая. Предстоит еще понаставить кучу программ, но это уже мелочи. 3 дня устанавливал систему. :) Когда будет все готово, выложу из нее скриншот здесь в галерее, если утвердят.

Rinaldus ★★★★★
() автор топика
Ответ на: комментарий от Rinaldus

Возможно, проблема с автомонтированием /boot кроется в systemd (я пользуюсь OpenRC)

раздел vfat, а он на этой стадии загрузки не умеет ее поддерживать, ядро-то еще не загрузилось.

Монтированием разделов из fstab занимается система инициализации, уже после загрузки ядра.

equeim ★★
()
Ответ на: комментарий от equeim

Так я тоже настраивал ее преимущественно в OpenRC, на systemd перевел чуть ли не в самом конце.

Rinaldus ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.