Как я могу переустановить GRUB в раздел EFI?
Я хочу переустановить GRUB 2, и я нашел следующие инструкции: Как восстановить, восстановить или переустановить Grub 2 с Ubuntu Live CD или USB. В моем случае, загрузчик установлен в разделе EFI. Если я использую команды, приведенные в этом руководстве, GRUB будет переустановлен в раздел EFI автоматически или он будет установлен в корневой раздел, где установлена Ubuntu? Очевидно, я не хочу, чтобы это произошло.
14 ответов
Переустановите загрузчик GRUB в вашу установку Ubuntu в режиме EFI следующим образом...
Загрузитесь с установочного носителя Ubuntu и выберите "Попробуйте Ubuntu без установки".
(Загрузите установочный носитель в режиме EFI, выберите запись Ubuntu с UEFI впереди.)
На рабочем столе Live откройте терминал и выполните следующие команды:
sudo mount /dev/sdXXX /mnt
sudo mount /dev/sdXX /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install /dev/sdX
update-grub
Замечания: sdX = диск | sdXX = EFI раздел | sdXXX = системный раздел
Для идентификации разделов используйте GParted, инструмент входит в установочный носитель.
После выполнения команд GRUB будет установлен в отдельный раздел EFI.
Это единственный способ, который работал для меня: (Система: sdb8, boot: sdb6, efi: sdb2)
sudo mount /dev/sdb8 /mnt
sudo mount /dev/sdb6 /mnt/boot
sudo mount /dev/sdb2 /mnt/boot/efi
sudo mount --bind /dev /mnt/dev &&
sudo mount --bind /dev/pts /mnt/dev/pts &&
sudo mount --bind /proc /mnt/proc &&
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
grub-install --target=x86_64-efi /dev/sdb
grub-install --recheck /dev/sdb
exit &&
sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt
Вот как я сделал это на стандартном рабочем столе x86_amd64 EFI без chroot, предполагая, что у вас есть раздел, содержащий 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-efi
sudo mkdir /media/root && sudo mount /dev/sda2 /media/root
sudo mkdir /media/efi && sudo mount /dev/sda1 /media/efi
sudo 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
За последние месяцы были внесены некоторые обновления в задействованные библиотеки.
Следующие шаги были полезны для меня. Они взяли идеи из старых ответов, а также с других форумов.
Убедитесь, что вы загрузились с помощью EFI
Запустить grub-установить
sudo mount /dev/nvme0n1p5 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install --target=x86_64-efi /dev/nvme0n1
grub-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.cfg
update-grub2
exit &&
sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt
Убедись, что
efibootmgr -v
Спасибо @cl-netbox за инструкции!
После того, как я обновил (Linux Mint 18.2 Sonya до 18.3 Sylvia), моя система не загружалась, поэтому я следовал приведенным выше инструкциям, но все равно безуспешно. Однако я заметил, что на моей машине /boot находится в отдельном разделе (возможно, потому что я использую LVM), поэтому мой слегка измененный процесс был:
sudo mount /dev/sdXXX /mnt
sudo mount /dev/sdXY /mnt/boot
sudo mount /dev/sdXX /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install /dev/sdX
update-grub
Примечание: sdX = диск | sdXX = раздел EFI | sdXY = загрузочный раздел | sdXXX = системный раздел
Кроме того, при загрузке с live cd для восстановления может случиться так, что вам не хватает пакета grub-efi-amd64-bin, а затем строка
"grub-install --target=x86_64-efi /dev/sdb"
завершается с сообщением об ошибке: "grub-install: error: /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.
Кстати, параметр "/dev/sdb" устарел и игнорируется.
Я не могу комментировать (недостаточно репутации), но ответ @Chilu Pereira - это то, что нужно делать в ситуации с EFi или мультизагрузкой. Это похоже на подход в gentoo-guide. Они используют несколько иной подход: вместо
mount --bindони используют
mount --rbindс последующим
mount --make-rslaveдля sys и dev и proc снова просто монтируются. В gentoo я создавал монтирования из live-системы следующим образом:
mount -t proc /proc /mnt/proc
mount --rbind /sys /mnt/sys
mount --make-rslave /mnt/sys
mount --rbind /dev /mnt/dev
mount --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 или, может быть, только для чтения, но в любом случае это сработало.
Если вы потеряли раздел EFI, его легко вернуть. Ты можешь использовать fdisk или же parted создать новый раздел GPT с типом "EFI partition (1)" и отформатировать его:
sudo mkfs.msdos /dev/sdX
затем смонтировать его, и вы можете следовать запустить:
sudo grub-install /dev/sdX
как и в других решениях.
В дополнение к ответу ci-netbox.
Если ваша версия pendrive OS не совпадает с версией, установленной на диске, у grub-install могут возникнуть трудности с определением правильной установки grub:
$ sudo chroot /mnt
# grub-install /dev/sdX
grub-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.
Мне потребовалось некоторое время, чтобы заблудиться, делая это. У меня такая же настройка (незашифрованная/загрузка в ДОПОЛНЕНИЕ к vfat/boot/efi). Следующее руководство по Debian поможет вам в этом. Отсутствующие части из всех других руководств касались установки efivars и просто исчерпывающих шагов по переустановке grub и т. д. Надеюсь, это поможет!
https://wiki.debian.org/GrubEFIReinstall
Подробная информация о конкретных частях, которые отсутствовали в других ответах здесь:
включить efivars в chroot всю установку grub
for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do sudo mount -B $i /mnt$i; doneне забудьте смонтировать
/bootа потом также/boot/efiв chrootзапустить все команды grub
apt-get install --reinstall grub-efi grub-install /dev/disk update-grub
Спасибо дебиан!!
Поэтому я думаю, что причина проблемы в том, что установка Ubuntu не монтирует раздел efi, если fstab. и обновления grub. на обновлении.
Самым простым для меня было использовать этот небольшой инструмент (20 МБ), который позволит вам загрузить сломанную систему grub (я использовал Ventoy для загрузки инструмента):
https://www.supergrubdisk.org/category/download/supergrub2diskdownload/
И как только инструмент сотворит свое волшебство и загрузит вашу Linux-систему, выполните:
sudo grub-install /dev/nvme0n1
sudo update-grub
Только что использовал этот инструмент https://help.ubuntu.com/community/Boot-Repair в Ubuntu. Это был самый простой способ, и все было автоматически.
Я использовал Grub-Customizer. Я знаю, что некоторым из вас не нравится эта программа, но в некоторых случаях она очень удобна (переименовать Ubuntu в Kubuntu (не обязательно делать это в 'etc/grub.d/10_Linux_Proxy'), добавить тему, или в этом случае.
Файл --> Установить в MBR.
И все было сделано.
Я не использую ОС на базе Linux так долго (уже 7 или 8 месяцев), и если мне нужно записать все для использования в командной строке, это не только займет много времени (в основном запись), но я так можно ошибиться.
У меня был мой загрузчик Windows в разделе 1 и grub2 в другом разделе EFI (8)(не хотел портить загрузчик Windows), поэтому каждый раз, когда я хотел использовать свой Kubuntu (ежедневно) или ОС Mint, мне приходилось нажимать F11, подождите, выберите USB (не спрашивайте меня, почему), выберите Ubuntu, затем снова подождите Grub, а затем выберите мою ОС на базе Linux. Теперь я получаю Grub2 почти мгновенно.
Обновление 211111/1135 Подобно тому, как Organic Marble прокомментировал: «MBR не подходит для системы UEFI», он прав. Это сработало, но только один раз. Что я сделал, так это установил Grub2Win в мою установку Win10. Из Kubuntu я мог экспортировать свой «grub.conf» в раздел «Мои документы» (NTFS, поэтому Win10 может его прочитать) и импортировать его в Grub2Win. Теперь он работает так, как должен.
PS. Я сохранил эту страницу, поэтому знаю, как это сделать, когда избавлюсь от Windows.