Как переустановить GRUB2 EFI?

56

После успешного обновления моего BIOS, что-то пошло не так, и я получил мигающий курсор в верхнем левом углу черного экрана. Нет ошибок, нет ничего. В BIOS теперь указан только SATA: <disc name>вариант загрузки вместо обычного UEFI ubuntu. Я использую схему разбиения GPT.

В конце концов я обнаружил, что рабочим решением было правильно переустановить grub-efi-amd64. Итак, как мне это сделать?

PS: На самом деле мне удалось переустановить GRUB2 EFI самостоятельно, и я опубликую свой ответ здесь, так как я не смог найти полное руководство по этому вопросу.

Максим Р.
источник
У меня были проблемы с двойной загрузкой: ноутбук с Windows 10 / PCLinuxOS. Я как-то потерял загрузчик grub2 или функциональность. После неудачных попыток многих из перечисленных выше способов, я наткнулся на Grub2 Boot Rescue iso, записал его на диск и оставил в дисководе. Было немного утомительно проходить процесс загрузки каждый раз, но, по крайней мере, это сработало. Затем я нашел диск восстановления загрузочного диска iso и записал его на DVD. На этом этапе мой диск был очень слабым, поэтому я переформатировал и переустановил все, на этот раз Windows 10 и Mint Sonya. Затем загрузил Boot Repair Disk и установил Grub2 ov
Кит Кребьел

Ответы:

87
  • Загрузите компьютер с live-USB / CD в режиме UEFI . У меня было два варианта загрузки, <flash_drive>и UEFI: <flash_drive>второй нужен для того, чтобы выставить переменные efi, /sys/firmware/efi/чтобы efibootmgrпотом не потерпеть неудачу. Загрузка с первым вариантом дает мне следующую ошибку:

    Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
    Try 'modprobe efivars' as root.
    

    modprobe efivars не работал для меня

  • Перейдите в сломанную систему (похоже на справку по ubuntu grub2, но с особенностями efi):

    sudo mount /dev/sda2 /mnt #sda2 is the root partition
    sudo mount /dev/sda1 /mnt/boot/efi #sda1 is the efi partition
    for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
    sudo cp /etc/resolv.conf /mnt/etc/ #makes the network available after chrooting
    modprobe efivars # make sure this is loaded
    sudo chroot /mnt
    
  • В зависимости от вашего дистрибутива Linux, вы теперь делаете разные вещи.

    • Для Ubuntu / Debian :

      apt-get install --reinstall grub-efi-amd64
      

      или альтернативно:

      apt-get install --reinstall grub-efi
      update-grub
      

      Если вышеизложенное даст вам личинку, но не загрузочную

    • Для Fedora (до 16, может работать для других):

      yum reinstall grub-efi
      

      В следующей команде вы должны заменить sdX на устройство с разделом EFI, с которого вы хотите загрузиться. При этом --part Yвы должны заменить на Y номер раздела EFI (как в /dev/sdXY).

      efibootmgr -c --disk /dev/sdX --part Y
      efibootmgr -v # verify a new record called Linux is there
      
  • Теперь нажмите Ctrl + D, чтобы выйти из chroot, размонтировать все и перезагрузиться:

    for i in /sys /proc /dev/pts /dev; do sudo umount /mnt$i; done
    sudo umount /mnt/boot/efi #please do this. Corrupted efi partitions are not nice
    sudo umount /mnt
    sudo reboot
    

Возможно, вам придется адаптировать это к вашим потребностям (другая таблица разделов, отдельный раздел / boot и т. Д.), И это может быть не единственный вариант, но для меня это сработало очень хорошо.

Подходящей live-системой для исправления вещей является grml . Существует также обширное руководство по настройке загрузочного USB-устройства, из которых раздел Mac является наиболее полезным на самом деле (просто создайте раздел FAT32, скопируйте файлы, перезагрузите компьютер, готово).

Максим Р.
источник
4
Чувак! Большое спасибо! Это только спасло меня после того, как мой Lenovo X220 больше не захотел загружаться после сброса, который активировал последние обновления пакета и в то же время видел, как я делал сброс BIOS, потому что это якобы решает проблемы соединения с картой 3G. После этого загрузка стала невозможной по любой причине. Пока я не использовал ваш гид. Кстати, часть, где вы копировали, resolv.conf не работал для меня, потому что это символическая ссылка в /run/resolvconf...(в Ubuntu 12.04), вместо этого я просто использовал mount --bind /run /mnt/runдля монтирования всего /runкаталога в среде chroot.
nem75
Я расширил ответ своим опытом по Fedora 16 и ссылкой на grml. Если бы вы могли просмотреть и принять изменения, я был бы счастлив.
Йонас Шефер
1
В Ubuntu (по крайней мере, на 12.04) update-grubне будет копировать последний образ grub2 в ваш раздел EFI, он только обновит grub.cfg. Поэтому лучший способ сделать это apt-get install --reinstall grub-efi(или grub-efi-amd64) это также вызовет update-grub в конце.
number5
3
Спас мой медиаплеер вчера. 300 интернет-очков для вас.
Стефано Борини
2
После запуска update-grubмоя /boot/efiпапка все еще была пустой (я создал этот новый раздел). Только после запуска grub-installреальные файлы были записаны там. Это руководство помогло мне (немецкий): wiki.ubuntuusers.de/EFI_Problembehebung
Филипп Гербер
8

В качестве потенциального упрощения первого метода можно напрямую загружаться в систему на жестком диске, только используя grub live CD. Протестировано на xubuntu 13.10 с живым CD xubuntu 13.10.

Убедитесь, что Безопасная загрузка отключена в вашем BIOS. Вставьте live CD и загрузите его через UEFI. Появится меню GRUB на компакт-диске. Нажмите «С», чтобы попасть в командную строку.

configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg

Примените приведенную выше команду grub, если у вас другой системный раздел EFI.

После того, как ваша система загрузится с жесткого диска, этого должно быть достаточно, чтобы переустановить grub на системный раздел EFI и зарегистрировать его в прошивке через grub-install.

sudo grub-install

источник
Не работает configfile (hd0,gpt1)/EFI/ubuntu/grub.cfgничего не делает. Как мне загрузиться после выдачи этой команды?
Автодидакт
3
Ух ты. Я не ожидал, что это будет так просто! Это один адский ответ! Я запустил, sudo grub-install --target=x86_64-efi --efi-directory=/boot/efiа не предложенную выше команду (но приведенная выше может просто сработать - я не знаю). И после этого вы снова можете получить доступ к вашей ОС Linux. Тогда просто беги sudo update-grubи все должно быть загрузочным.
Zorawar
@SandeepDatta: ваш каталог efi, вероятно, находится на другом диске / разделе. Мой был на / Dev / sdb1, поэтому я побежал: configfile (hd1,gpt1)/EFI/ubuntu/grub.cfg. Загрузите LiveCD и запустите, sudo gpartedчтобы найти раздел efi.
Zorawar
5

Как и в случае с Maxine, я обнаружил, что мои настройки UEFI в BIOS повреждены, и моя машина не загружается.

В моем случае это Lenovo ThinkServer RD430 с Linux Mint Debian, и мне казалось, что все, что я буду делать с update-grub или заменой любых жестких дисков на сервере, приведет к тому, что он не загрузится. Операционная система в моем случае - linuxmint-201403-mate-dvd-64bit, установленная через USB. (полное описание событий, которые могут привести к неработоспособности UEFI, приведено ниже)

Выполнение точно таких же шагов на ThinkServer TS140 не привело к тому, что UEFI ни разу не сошел с ума. Посмотрел страницу драйвера RD430 и мой биос - две версии старые. Раньше мне никогда не приходилось обновлять BIOS на материнской плате, поэтому я не могу автоматически обновлять его при появлении новых версий. После обновления биоса, ответ Максин выше работал, только с изюминкой ...

# efibootmgr -c --disk /dev/sdX --part Y
# efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0002,0000,0003,0001,0004
Boot0000* linuxmint HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\EFI\linuxmint\grubx64.efi)
Boot0001* LMDE Linux Mint Debian    HD(1,800,15d505800,934c598c-fe3c-fd43-84a1-fa38e4f72552)File(\EFI\linuxmint\grubx64.efi)
Boot0002* Linux HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\elilo.efi)
Boot0003* UEFI: Built-in EFI Shell  Vendor(5023b95c-db26-429b-a648-bd47664c8012,)AMBO
Boot0004* UEFI: VerbatimSTORE N GO 1.00 ACPI(a0341d0,0)PCI(1a,0)USB(1,0)USB(4,0)HD(1,80,1d70780,00000000)AMBO
mint / # 

Команда efibootmgr -cдобавила две записи 0000и 0002!
Первая Boot0002* Linux HDзапись в порядке загрузки неверна . Запись является правильной.
0000

Чтобы проверить это, я попытался загрузить без каких-либо перерывов, что является 0002записью. Как и ожидалось, это не сработало. Я перезапустил сервер, нажал F12 и выбрал linuxmint. Как и ожидалось, он загрузился с моей установкой LMDE.

Способ удаления нежелательных записей через efibootmgr:

# efibootmgr -b 2 -B

Я использовал эту команду для удаления записей 0001и 0002. Вариант 0001был из последней из моих многочисленных попыток восстановить ОС.


UEFI отмечает

Если вы читаете это и так же разочарованы UEFI, как и я, вот некоторые заметки и ресурсы:
»Загрузка в оболочку UEFI похожа на использование оболочки DOS.
»Intel создала справочное руководство в формате PDF для команд оболочки efi .
» Документ Lenovo UEFI_on_TS430 - единственный ресурс, который я видел, объясняющий использование оболочки efi.
» Еще одна ссылка на оболочку uefi из Руководства администратора nPartition .
»Вы можете попробовать загрузиться с раздела из оболочки efi, перейдя к загрузчику и выполнив его.
»UEFI хочет, чтобы на диске была таблица разделов GPT, а не таблица частей msdos.
»UEFI хочет, чтобы первый раздел на вашем диске был отформатирован fat32 или vfat.
»Для« общей »загрузки должен быть /EFI/bootкаталог с корнем, bootx64.efiв котором он находится.
»Некоторые люди копируют их grubx64.efiс того места, где они были установлены, /EFI/boot/bootx64.efiи этот чит работал для них.
»Каждый раз, когда вы вносите изменения в grub, используйте efibootmgr -vдо и после, чтобы убедиться, что перезагрузка в порядке.


Мой опыт работы с RD430

За последнюю неделю я переустанавливал ОС более 10 раз, пытаясь разобраться с этим и настроить сервер. Моя конфигурация - это SSD на этом RAID-контроллере в слоте PCIe 2.0 с установленным LMDE. RAID-контроллер AOC-S3008L-L8i ( переименован в IT-режим ) во 2-м слоте PCIe 3.0 с 6-ю накопителями по 3 ТБ. Оперативная память: 12 ГБ ECC (3x 4 ГБ).

Вот изменения, которые я бы сделал, чтобы моя система не
загружалась : »Измените слоты S3008L-L8i pci (оставив только плату SSD +).
»Отключите подсказку программного рейда LSi для встроенного контроллера.
»Добавьте мою старую карту HighPoint RocketRaid в открытый слот PCIe.
»Внесите изменения /etc/default/grubи затем запустите update-grub.
( может быть, grub-installнужно также запустить? )

Крис К
источник
Я очень разочарован UEFi. Я установил Linux с BIOS, но очень трудно заставить его работать с UEFi и переосмысливать
Suici Doga
3

Я бы проголосовал за это, но, видимо, у меня недостаточно репутации на SuperUser. Я рад, что наконец нашел ответ на этот вопрос после нескольких дней борьбы с клонами, которые работали, но не загружались. Я думаю, что все это связано с UEFI и каким-то механизмом «безопасной загрузки» или чем-то еще.

Я работаю в автономном режиме, поэтому apt-get не вариант. То , что я был поставлен Ubuntu Desktop на флешку, добавьте grub-efiи grub-efi-amd64пакеты в корень USB флешки (личинка-efi_1.99 ~ rc1-13ubuntu3_amd64.deb и личинка-EFI-amd64_1.99 ~ rc1-13ubuntu3_amd64.deb для Ubuntu 11.04 - измените в соответствии с дистрибутивом и архитектурой), а также вставьте в USB-флешку следующее:

#! /bin/bash
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
dir=`dirname $0`
sudo cp $dir/grub-efi*.deb /mnt/tmp
for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb"
sudo shutdown -r now

Загрузите Live USB-флешку, откройте терминал, запустите команду, и работа хорошая! Единственная случайная проблема заключается в том, что UEFI иногда перемещается вниз по порядку приоритетов загрузки ниже жесткого диска, и в этот момент вам нужно зайти в BIOS и изменить порядок загрузки, чтобы он не пытался (и не работал) SATA: drive.

Вы также можете использовать dpkg-reconfigureвместо dpkg -i, но это задает пару вопросов о загрузчике.

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

IBBoard
источник
Добро пожаловать на борт! На самом деле вам нужно 15 баллов, чтобы проголосовать, 50 - комментировать (см. Superuser.com/privileges ), просто посмотрите на простые вопросы, на которые вы можете ответить, и все готово, это способ обмена стека, чтобы сказать спасибо :) Осторожно, ваш сценарий не ничего не размонтировать перед выключением. Рад, что это помогло.
Максим Р.
Беспорядок был больше, потому что у меня есть действия на других связанных сайтах. Забыл, я был новичком на этой стороне. Linux обычно отключается при завершении работы, и chroot с командой возвращается после ее завершения, поэтому я не думаю, что это должно вызвать проблемы. Я обнаружил, что он не прервется, если вы не загрузили UEFI с живого дистрибутива, но это не было приоритетом для проверки sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb" && sudo shutdown -r nowправильности поведения.
IBBoard
1

На моем 32-битном Ubuntu 14.10 на Lenovo Yoga 2 Pro я перешел на загрузку UEFI следующим образом:

  • создать папку

    sudo su
    mkdir /boot/efi
    
  • смонтировать раздел "EFI System" в /etc/fstab

    fdisk -l|grep EFI
    

    это показало: /dev/sda2 2050048 2582527 532480 260M EFI System

    echo "/dev/sda2 /boot/efi   vfat    defaults,sync   0   0">>/etc/fstab
    

    смонтировать этот раздел

    mount /boot/efi
    
  • установить grub-efi-amd64-binи удалитьgrub-efi-ia32-bin

    aptitude install grub-efi-amd64-bin grub-efi-ia32-bin_
    
    grub-install --target=x86_64-efi
    
  • перезагрузите Ubuntu в режиме efi

    update-grub
    
  • проверить, нормально ли загружается, затем я установил grub-efi-amd64и удалил grub-pc grub-gfxpayload-listsс

    aptitude install grub-efi-amd64 grub-pc_ grub-gfxpayload-lists_
    

Я предпочитаю не удалять / загружаться при запросе


Может быть, я сделал это сложным, и это бы просто работало нормально:

apt-get install --reinstall grub-efi
update-grub
rubo77
источник
0

Эта запись больше похожа на подготовку вашего компьютера к переустановке записей EFI. Это также может оказаться эффективным и простым способом создания аварийного диска после установки системы на внутренний носитель (SSD, HDD).

С Linux Mint Tara (вариант Linux, тесно связанный с Ubuntu Bionic Beaver), этот метод не позволил мне выполнить установку, а впоследствии позволил ее сохранить. Она возникла из-за того, что я хотел иметь постоянный USB-накопитель с постоянством, и поскольку время для установки такой утилиты, как Unetbootin, для постоянной установки примерно такое же, как и для новой установки, я просто использовал тот же самый живой дистрибутив для установки на USB, как использовалась для установки ОС на внутренний SSD.

Конечно, это не RAID или другие специализированные настройки, но для этого требовался подготовленный раздел тома на USB-накопителе и установка на этом USB-диске с использованием доступного метода дистрибутива, обходящего внутренний диск для установки на одном корневой раздел (/) mount.

Это где новая установка grub запуталась с внутренним приводом. Когда я перезагрузился на USB, внутренние записи GEF UEFI, казалось, исчезли, оставляя только меню Grub, когда пытались выбрать диск, используя записи в меню BIOS.

Вместо этого, загрузка с USB показала, что метод дистрибутива создал готовое меню grub с списком для / dev / sda2, раздела, содержащего монтирование / boot / efi. В большинстве основных внутренних установочных дисков имя grub раздела - hd0, gpt1.

Переходя к «продвинутым», было доступно более одного спасения ядра. Оттуда запустите утилиту grub и загрузитесь как обычно.

С этого момента, запустив ОС на внутреннем диске, который ранее был недоступен, отключите USB, а затем запустите sudo grub-install.

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

Тим Поцца
источник