Як перевстановити GRUB2 EFI?


56

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

Зрештою я виявив, що робочим рішенням є належна перевстановлення grub-efi-amd64. Отже, як це зробити?

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


У мене виникли проблеми із подвійним завантаженням: ноутбук Windows 10 / PCLinuxOS. Я якось втратив завантажувач grub2 або функціональність. Після безуспішного випробування багатьох перерахованих викривлень я наткнувся на ізотоп Grub2 Boot Rescue, спалив його до компакт-диска і залишив у диску. Трохи нудно було щоразу проходити процес завантаження, але принаймні це спрацювало. Потім я знайшов ізолятор завантаження диска Boot і записав його на DVD. У цей момент мій диск був дійсно невловимим від моїх зусиль, тому я цього часу переформатував і перевстановив все, Windows 10 та Mint Sonya. Потім завантажили диск для відновлення завантаження і встановили Grub2 ov
Keith Krehbiel

Відповіді:


87
  • Завантажте комп'ютер за допомогою живого 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 не працював для мене.

  • chroot у порушену систему (подібно до довідки 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
    

Можливо, вам доведеться адаптувати це до ваших потреб (різні таблиці розділів, окремий / завантажувальний розділ тощо), і це може бути не єдиним варіантом, але це для мене спрацювало чудово.

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


4
Чувак! Велике спасибі! Це тільки врятувало мене після того, як мій Lenovo X220 не хотів більше завантажуватися після скидання, який активував останні оновлення пакету і в той же час бачив, як я робив скидання BIOS, оскільки це нібито виправляє проблеми з підключенням до картки 3G. Після цього завантаження з будь-якої причини стало неможливим. Поки я не скористався вашим посібником. До речі, частина, яку ви копіювали, разрешила.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 в кінці.
номер5

3
Збережено мій медіаплеєр вчора. 300 інтернет-точок до вас.
Стефано Борині

2
Після запуску update-grubмоя /boot/efiпапка була ще порожня (я створив цей новий розділ). Тільки після запуску grub-installтам були записані фактичні файли. Цей посібник мені допоміг (німецька): wiki.ubuntuusers.de/EFI_Problembehebung
Філіп Гербер

8

Як потенційне спрощення першого способу, можливо, безпосередньо завантажитися в систему на жорсткому диску, лише використовуючи grub живого CD. Тестовано на xubuntu 13.10 з живим компакт-диском xubuntu 13.10.

Переконайтесь, що захищене завантаження відключено у вашій BIOS. Вставте живий компакт-диск та завантажте його через UEFI. З'явиться меню GRUB компакт-диска. натисніть "c", щоб перейти до командного рядка.

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і все має бути завантажувальним.
Зоравар

@SandeepDatta: ваш каталог efi, ймовірно, на іншому диску / розділі. Моя була на / dev / sdb1, тому я побіг : configfile (hd1,gpt1)/EFI/ubuntu/grub.cfg. Завантажте LiveCD та запустіть, sudo gpartedщоб знайти свій efi-розділ.
Зоравар

5

Як і у Maxine, я знайшов свої параметри UEFI в BIOS, щоб не пошкодився, і моя машина не завантажиться.

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

Пройшовши цілком ті ж самі кроки на ThinkServer TS140, UEFI не втратив розум жодного разу. Переглянув сторінку драйверів RD430, і мій біос - це дві версії. Мені ніколи не доводилося оновлювати біоси на материнській платі, тому я не один, щоб автоматично оновлювати, коли є нові версії. Після оновлення біографії відповідь Максіна вище спрацював, лише з поворотом ...

# 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 схоже на використання оболонки DOS.
»Intel склала PDF-посібник з посиланнями на команди оболонки efi .
» Документ UEFI_on_TS430 Lenovo - єдиний ресурс, який я бачив, пояснюючи використання оболонки efi.
» Ще одне посилання з UEFI оболонки з Керівництва nPartition адміністратора .
»Ви можете спробувати завантажитися на розділ із оболонки efi, перейшовши до завантажувача та виконавши його.
»UEFI хоче, щоб диск мав таблицю розділів GPT, а не таблицю частин msdos.
»UEFI хоче, щоб перший розділ на вашому диску був відформатований fat32 або vfat.
»Для" загального "завантаження має бути /EFI/bootкорінь у корінь із bootx64.efiним.
»Деякі копіюють їх grubx64.efiз того місця, де це було встановлено, /EFI/boot/bootx64.efiі цей чіт працював на них.
»Щоразу, коли ви вносите зміни на гру, використовуйте efibootmgr -vдо і після того, щоб переконатися, що перезавантаження нормально.


Мій досвід RD430

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

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


Я дуже засмучений UEFi.Я встановив Linux з BIOS, але дуже важко змусити його працювати з UEFi та
переробляти

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

Завантажте живу USB-накопичувач, відкрийте термінал, виконайте команду, і робота - це добре! Єдина випадкова проблема полягає в тому, що UEFI іноді переміщується вниз по порядку пріоритету завантаження нижче жорсткого диска, і тоді вам потрібно зайти в BIOS і змінити порядок завантаження, щоб зупинити його на спробах (і не вдається) SATA: drive.

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

[ред.] У мене також недостатньо респондентів для коментарів, тому те, що я вважав коментарем до відповіді, виявляється як відповідь.


Ласкаво просимо на борт! Насправді вам потрібно 15 балів, щоб проголосувати, 50 для коментарів (див. Superuser.com/privileges ), просто огляньтесь навколо легких питань, на які можна відповісти, і ви готові йти, це спосіб stackexchange, щоб сказати спасибі :) Остерігайтеся, щоб ваш сценарій не відповідав перед вимкненням нічого не відключайте. Радий, що це допомогло.
Максим Р.

Плутанина була більше, тому що я маю акти на інших пов’язаних сайтах. Забув, що я був новим у цій стороні. Linux зазвичай відключається при відключенні, і chroot з командою повертається після її завершення, тому я не думаю, що це може спричинити проблеми. Я виявив, що він не перерве, якщо ви не завантажили дистрибутив в прямому ефірі, але не було пріоритетом перевіряти, чи 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" у Windows /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 для постійної інсталяції приблизно такий же, як і свіжа установка, я просто використовував той самий дистрибутив в реальному часі, щоб зробити інсталяцію на USB, як використовувався для установки ОС на внутрішній SSD.

Звичайно, нічого з цього не є RAID або будь-яка інша спеціалізована установка, але для цього потрібен підготовлений розділ гучності на USB-накопичувачі та встановлення на цьому USB за допомогою доступного методу дистрибутива, обхід внутрішнього накопичувача для встановлення на одному root (/) кріплення розділу.

Ось тут нова установка grub заплуталася з внутрішнім накопичувачем. Коли я перезавантажився на USB, то внутрішні записи UEFI-grub, здавалося, зникли, залишивши лише меню grub при спробі вибору накопичувача за допомогою записів у меню BIOS.

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

Перейшовши на "просунуте", було доступно більше одного рятування ядра. Звідти запустіть утиліту grub, а потім нормально завантажтесь.

З цього моменту, запустивши ОС на внутрішньому накопичувачі, який раніше був недоступний, відключіть USB-розетку та запустіть sudo grub-install.

Коли ви перезавантажуєтесь без USB, вам слід мати можливість повернутися назад. У цей момент USB налаштований для запуску внутрішнього накопичувача в звичайний режим або режим порятунку, а у накопичувача є власне меню.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.