Как я могу переустановить GRUB в раздел EFI?

Я хочу переустановить GRUB 2, и я нашел эти инструкции:Как восстановить, восстановить или переустановить Grub 2 с помощью Ubuntu Live CD или USB.В моем случае загрузчик установлен в разделе EFI. Если я использую команды, приведенные в этом руководстве, будет ли GRUB автоматически переустановлен в раздел EFI или он будет установлен в корневой раздел, где установлена Ubuntu? Очевидно, я не хочу, чтобы это произошло.

Переустановите загрузчик GRUB на вашу установку Ubuntu в режиме EFI таким образом...

Загрузитесь с установочного носителя Ubuntu и выберите "Попробовать Ubuntu без установки".
(Загрузите установочный носитель в режиме EFI, выберите запись Ubuntu с UEFI впереди.)

Как только вы окажетесь на рабочем столе Live, откройте терминал и выполните следующие команды :

sudo mount /dev/sdXY /mntsudo mount /dev/sdXX /mnt/boot/efifor i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; donesudo chroot /mntgrub-install /dev/sdXupdate-grub  

Примечание : sdX = диск | sdXX = раздел efi | sdXY = системный раздел

Для определения разделов используйте GParted, инструмент входит в состав установочного носителя.
После выполнения команд GRUB будет установлен в отдельный раздел EFI.

это единственный способ, который сработал для меня: (Система: sdb8, загрузка: sdb6, efi: sdb2)

sudo mount /dev/sdb8 /mnt sudo mount /dev/sdb6 /mnt/boot sudo mount /dev/sdb2 /mnt/boot/efisudo mount --bind /dev /mnt/dev &&sudo mount --bind /dev/pts /mnt/dev/pts &&sudo mount --bind /proc /mnt/proc &&sudo mount --bind /sys /mnt/syssudo chroot /mntgrub-install --target=x86_64-efi /dev/sdbgrub-install --recheck /dev/sdbexit &&sudo umount /mnt/sys &&sudo umount /mnt/proc &&sudo umount /mnt/dev/pts &&sudo umount /mnt/dev &&sudo umount /mnt

Вот как я это сделал на стандартном рабочем столе x86_amd64 EFI, без рутирования, предполагая, что на вашем жестком диске есть раздел, содержащий Ubuntu, и, возможно, раздел EFI, где должен быть установлен GRUB.

# boot on a live Ubuntu, I used 18.04 but more recent should work# if you have currently no EFI partition (maybe it was deleted,# or you are migrating to a new drive):# sudo gparted# - create a FAT 32 partition of around 100 MB on the disk of your choice# (in general the one that host the Ubuntu partition). If you plan to# move or resize some paritions, anticipate that (for instance by# creating the EFI partition at the end of the free space).# - set the flag esp on this partition (the flag boot will also be selected)# now assuming that the Ubuntu partition is `/dev/sda2` and the (possibly new) EFI partition is `/dev/sda1`sudo apt install grub-efisudo mkdir /media/root && sudo mount /dev/sda2 /media/rootsudo mkdir /media/efi && sudo mount /dev/sda1 /media/efisudo grub-install --target=x86_64-efi /dev/sda --efi-directory=/media/efi --boot-directory=/media/root/boot

Это должно дать:

Установка для платформы x86_64-efi.

Установка завершена. Сообщение об ошибке не поступало.

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

Если вы создали новый раздел EFI, возможно, вам придется добавить его в /etc/fstab иметь update-grub работает правильно.

Для получения дополнительной информации : https://wiki .archlinux.org/index.php/Multiboot_USB_drive#Hybrid_UEFI_GPT_ +_BIOS_GPT/MBR_boot

Спасибо @cl-netbox за инструкции!

После обновления (Linux Mint 18.2 Sonya до 18.3 Sylvia) моя система не загружалась, поэтому я последовал приведенным выше инструкциям, но по-прежнему безуспешно. Однако я заметил, что на моей машине есть / boot в отдельном разделе (возможно, потому, что я использую LVM), поэтому мой слегка измененный процесс был:

sudo mount /dev/sdXXX /mntsudo mount /dev/sdXY /mnt/bootsudo mount /dev/sdXX /mnt/boot/efifor i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; donesudo chroot /mntgrub-install /dev/sdXupdate-grub 

Note : sdX = disk | sdXX = efi partition | sdXY = boot partition | sdXXX = system partition

Кроме того, при загрузке с live cd для восстановления может случиться так, что вам не хватает пакета grub-efi-amd64-bin, а затем строки

"grub-install --target=x86_64-efi /dev/sdb" 

сбой с сообщением об ошибке: "grub-install: ошибка: /usr/lib/grub/x86_64-efi/modinfo.sh не существует. Пожалуйста, укажите --target или --directory."

В этом случае запустите это за пределами chroot

sudo apt get grub-efi-amd64-bin

а затем добавьте /usr/lib/grub/x86_64-efi в chroot mounts.

Кстати, параметр "/dev /sdb" устарел и игнорируется.

За последние месяцы были внесены некоторые обновления в соответствующие библиотеки.

Приведенные ниже шаги были полезны для меня. Они черпали идеи из старых ответов, а также из других форумов.

Убедитесь, что вы загрузились с помощью EFI

efibootmgr -v

Запустите grub-установите

sudo mount /dev/nvme0n1p5 /mnt sudo mount /dev/nvme0n1p1 /mnt/boot/efifor i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do sudo mount -B $i /mnt$i; donesudo chroot /mntgrub-install --target=x86_64-efi /dev/nvme0n1grub-install --recheck /dev/nvme0n1# as a second attempt, you could also try (assuming _debian_ is your distro)# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian# grub-mkconfig -o /boot/grub/grub.cfgupdate-grub2exit &&sudo umount /mnt/sys &&sudo umount /mnt/proc &&sudo umount /mnt/dev/pts &&sudo umount /mnt/dev &&sudo umount /mnt

Убедитесь, что efibootmgr перечисляет ваш Linux в качестве записи

efibootmgr -v

Если вы случайно потеряете свой раздел EFI, его легко вернуть. Вы можете использовать инструмент разбиения на разделы, такой как fdisk или parted чтобы создать новый раздел sdXY (например, sda1) с типом "EFI partition (1)" и отформатировать его с помощью:

sudo mkfs.msdos /dev/sdXY

затем установите его с помощью:

sudo mount /dev/sdXY /boot/efi

и вы можете переустановить GRUB, запустив:

sudo grub-install --efi-directory=/boot/efi

как упоминалось в других решениях.

Я не могу комментировать (недостаточно репутации), но ответ @ Chilu Pereira - это правильный путь в ситуации EFi или мультизагрузки. Это похоже на подход, описанный в руководстве gentoo.Они используют несколько иной подход : вместо mount --bind они используют mount --rbind с последующим mount --make-rslave для sys и dev и proc просто монтируется снова.В gentoo я использовал для создания монтирования из живой системы, подобной этой:

mount -t proc /proc /mnt/procmount --rbind /sys /mnt/sysmount --make-rslave /mnt/sysmount --rbind /dev /mnt/devmount --make-rslave /mnt/dev chmod 1777 /mnt/dev/shm

(Кто-нибудь знает, в чем именно разница между --bind и --rbind / --make-rslave кстати?)

Но сегодня я получил две ошибки в chroot от grub2, с которыми я никогда раньше не сталкивался :

 connect: No such file or directory   Please make sure that the zfs-fuse daemon is running

и

grub-install: warning: Cannot read EFI Boot* variables.grub-install: warning: read_file: could not read from file: Input/output error.

Ошибка zfs-fuse, похоже, не имеет значения, но для Efivars мне пришлось добавить еще одно монтирование :

mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars

Я предполагаю, что / sys / firmware / efi / efivars не существует в chroot или, возможно, он доступен только для чтения - но в любом случае это сработало

в дополнение к ответу ci-netbox.
Если версия вашей ОС pendrive не совпадает с версией, установленной на диске, у grub-install могут возникнуть трудности с определением правильной установки grub:

$ sudo chroot /mnt# grub-install /dev/sdXgrub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.

Попробуйте вручную определить установку для использования

# ls /usr/lib/grub/grub-mkconfig_lib  x86_64-efi  x86_64-efi-signed

Затем перезапустите grub-install :

# grub-install --target=x86_64-efi /dev/sdX Installing for x86_64-efi platform.Installation finished. No error reported.

Просто использовал этот инструмент https://help.ubuntu.com/community/Boot-Repair на Ubuntu. Это был самый простой способ, и все происходило автоматически.

Инструкции по предоставленной ссылке действительны только для переустановки GRUB в устаревшем режиме BIOS, в вашем случае это не сработает. Чтобы переустановить GRUB на установку Ubuntu в режиме EFI BIOS, пожалуйста, прочтите мой ответ. :slight_smile:

Идеально :slight_smile: В любом случае, имея систему UEFI и, следовательно, раздел EFI, есть ли способ избежать переопределения grub при выполнении новой установки Windows?

Что ж, Microsoft не заботится ни о чем другом, кроме своих собственных продуктов, поэтому вы можете устанавливать системы Linux, не нанося никакого вреда Windows - к сожалению, это не так, наоборот, - поэтому, когда вы устанавливаете Windows после установки Ubuntu, вам придется впоследствии восстановить загрузчик GRUB. :slight_smile:

Execute : sudo efibootmgr -c -w -d /dev/sd* -p 1 -L “ubuntu” -l ‘\EFI\ubuntu\shimx64.efi’ (* = disk) :slight_smile:

Ясно :slight_smile: Во всяком случае, я попытался удалить вторую запись ubuntu (называемую grubx64.efi) с помощью efibootmgr, но когда я перезагружаю свой компьютер, она возвращается! Вместо этого, если я попытаюсь удалить другую запись (которая называется shimx64.efi), проблем не возникнет. Однако, когда я выбираю ubuntu в bios, он, как ни странно, успешно загружается. Я говорю странно, потому что я читал, что, когда активна безопасная загрузка, я должен выбрать запись, указанную в shimx64.efi, чтобы правильно загрузить ubuntu! Я немного в замешательстве…

То, что вы прочитали, верно: когда включена безопасная загрузка, вы загружаетесь с помощью shimx64, когда безопасная загрузка отключена, вы загружаетесь с помощью grubx64. Это дает вам оба варианта, поэтому я предлагаю оставить все как есть. :slight_smile:

Окк :slight_smile: Затем я переименую записи bios, чтобы я мог различать их и выбирать правильный, в зависимости от состояния безопасной загрузки :slight_smile:
Есть ли команда для восстановления записи (shimx64), которую я удалил ранее? :smiley:

На мой взгляд, с разницей между BIOS и EFI трудно смириться. лучше всего выбрать один из них

Все текущие ответы используют chrooting, но это не сработало на моей машине (я не мог получить доступ к своим дискам внутри chroot), поэтому я добавил свой ответ, который работает без chrooting: boot - How can I reinstall GRUB to the EFI partition? - Ask Ubuntu