Как воссоздать раздел начальной загрузки EFI?

Я установил Fedora на своей машине с / раздел, swap раздел и ESP раздел для начальной загрузки EFI.

Теперь, я устанавливал Элементарную ОС вместо Fedora.

  1. Я отформатировал / раздел (/dev/sda3)
  2. Отформатированный раздел подкачки (/dev/sda4)
  3. Но не отформатировал раздел начальной загрузки EFI (/dev/sda1)

Теперь то, когда я загружаюсь, я получаю свое старое меню личинки, которое это, было установлено Fedora. Я могу только загрузиться в Элементарную ОС:

  1. Ввод меню начальной загрузки.
  2. Выбор начальной загрузки из файла EFI
  3. Перейдите через /dev/sda1/, добираться elementary каталог, который содержит grubx64.efi файл. Который является /boot/efi/EFI/elementary/grubx64.efi.

Как я могу зафиксировать это? Я думал о форматировании раздела начальной загрузки /dev/sda1/ с fat16 или что-то затем переустанавливающее личинку на нем.

Мой /dev/sda1 теперь содержит это:

root@rafael:/home/rafael# ls /boot/efi/
EFI  mach_kernel  System

root@rafael:/home/rafael# ls /boot/efi/EFI/
BOOT/       elementary/ fedora/     

root@rafael:/home/rafael# ls /boot/efi/EFI/fedora/
BOOT.CSV  fonts  gcdx64.efi  grub.cfg  grubx64.efi  MokManager.efi  shim.efi  shim-fedora.efi

root@rafael:/home/rafael# ls /boot/efi/EFI/elementary/
grubx64.efi

Вот мой efibootmgr вывод:

BootCurrent: 003D
Timeout: 0 seconds
BootOrder: 2001,2002,2003
Boot0000* Notebook Hard Drive
Boot0010* Internal CD/DVD ROM Drive
Boot0011* Internal CD/DVD ROM Drive (UEFI)
Boot0012* Fedora
Boot0013* Fedora
Boot0014* Fedora
Boot0015* Fedora
Boot0016* Fedora
Boot0017* Fedora
Boot0018* Fedora
Boot0019* Fedora
Boot001A* Fedora
Boot001B* Fedora
Boot001C* Fedora
Boot001D* Fedora
Boot001E* Fedora
Boot001F* elementary
Boot2001* USB Drive (UEFI)
Boot2002* Internal CD/DVD ROM Drive (UEFI)

Любая справка ценилась бы.

10
26.12.2013, 22:44
2 ответа

Я сделал это!

В первую очередь, я удалил все ненужные записи загрузки:

efibootmgr -b <entry_hex_number> -B

Затем Переформатировав раздел ESP с FAT32 файловая система.

mkfs.vfat -F32 /dev/sda1

Затем установленная личинка к /dev/sda НЕТ /dev/sda1

grub-install /dev/sda
2
27.01.2020, 20:03
  • 1
    , Вам не нужна установка личинки, которая пишет MBR. Я не знаю, необходимо ли, личинка дистрибутива делает эти две вещи вместе, но в чем Вы нуждаетесь, скопировать grubx64.efi (или shim.efi) к/boot/efi/EFI/$distro/и efibootmgr-c-l/boot/efi/EFI/$distro/grubx64.efi. –  Lingzhu Xiang 21.07.2013, 11:37
  • 2
    училась grok EFI (можно вызвать его к с - target=x86_64-efi, но efivars.ko должен быть загружен к тому времени так или иначе). –  Michael Shigorin 04.09.2013, 13:50

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

Вы упоминаете, Вы установили элементарную ОС вместо Fedora, что означает, что только необходимо загрузить одну операционную систему. Здесь я представляю способ сделать это, не используя личинку. Ядро должно быть скомпилировано с EFI_STUB, если это так, можно свериться

grep EFI_STUB /boot/config-<version>

Скопируйте ядро и initramfs к ESP (системный раздел EFI)

cp /boot/vmlinuz-<version> /boot/efi/EFI/elementary/vmlinuz-<version>.efi
cp /boot/initrd.img-<version> /boot/efi/EFI/elementary/initrd.img-<version>

Ядро регистра как параметр загрузки в UEFI

echo "root=UUID=<disk_uuid> ro quiet rootfstype=ext4 add_efi_memmap initrd=\\EFI\\elementary\\initrd.img-<version>" |
  iconv -f ascii -t ucs2 |
  efibootmgr \
    --create --gpt \
    --disk /dev/<disk> --part <partition_number> \
    --label "Elementary OS" \
    --loader "\\EFI\\elementary\\vmlinuz-<version>.efi" \
    --write-signature --append-binary-args -

--disk аргумент берет имя устройства диска, например. --disk /dev/sda, --part аргумент берет количество раздела ESP, например, 4. Можно найти число раздела ESP со следующей командой:

gdisk -l /dev/sda | awk '$6=="EF00" {print $1}'

Удостоверьтесь, чтобы Вы повторили шаги после каждого обновления ядра

Любой Вы это вручную (просто повторяют шаги выше) или Вы пишете маленький сценарий, который делает задание. Чтобы полностью автоматизировать его сценарий мог быть сцеплен в процедуру постустановки ядра в процедуру постобновления initramfs и в ядро postrm процедура (для удаления записи загрузки UEFI). На самом деле я не знаю, почему это не сделано по умолчанию в дистрибутивах, это - всего несколько строк кода.

5
27.01.2020, 20:03
  • 1
    Хм, я сделал grep EFI_STUB /boot/config-3.2.0-49-generic но ничего не получил. –  Rafael Adel 19.07.2013, 23:59
  • 2
    3.2 слишком старо (это с января 2012) поддерживать EFI_STUB. Вам нужно, по крайней мере, ядро 3.3. –  Marco 20.07.2013, 01:01
  • 3
    @RafaelAdel, Если Вы не хотите создавать свое собственное ядро, можно проверить на более новую версию ядра в репозиториях программного обеспечения. Элементарный, кажется, основан на Ubuntu, и ядро 3.5 или 3.8 должно быть доступным. Более новые, более вероятно, будут иметь включенный EFI_STUB. –  Marco 20.07.2013, 01:55
  • 4
    На самом деле существует ядро 3.10.1 теперь. Собираясь давать ему попытку. –  Rafael Adel 20.07.2013, 04:18
  • 5
    Marco, советуя тупиковому использованию является безответственным, если Вы не стремитесь направить каждого пользователя через то, что не поддерживается его распределением, и не передают его как, "делают после каждого обновления ядра". Хорошо иметь, но не столь прекрасное для автоматизации, я говорю Вам это как парень, который ответственен за поддержку UEFI в ALT Linux. –  Michael Shigorin 20.07.2013, 14:00

Теги

Похожие вопросы