54

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

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

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

6 ответов6

86
  • Загрузите компьютер с 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 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, скопируйте файлы, перезагрузите компьютер, готово).

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
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 ?)

3

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

Я работаю в автономном режиме, поэтому apt-get не вариант. Я установил Ubuntu Desktop на USB-накопитель, добавил grub-efi и grub-efi-amd64 в корень USB-накопителя (grub-efi_1.99 ~ rc1-13ubuntu3_amd64.deb и grub-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 , но это задает пару вопросов о загрузчике.

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

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
0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .