Update grub ошибка

This error originally occurred during an apt upgrade but I managed to reproduce it with update grub

sudo update-grub
[sudo] password for me: 
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-72-generic
Found initrd image: /boot/initrd.img-4.15.0-72-generic
Found linux image: /boot/vmlinuz-4.15.0-60-generic
Found initrd image: /boot/initrd.img-4.15.0-60-generic
Found linux image: /boot/vmlinuz-4.15.0-20-generic
Found initrd image: /boot/initrd.img-4.15.0-20-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
error: syntax error.
error: Incorrect command.
error: syntax error.
Syntax error at line 145
Syntax errors are detected in generated GRUB config file.
Ensure that there are no errors in /etc/default/grub
and /etc/grub.d/* files or please file a bug report with
/boot/grub/grub.cfg.new file attached.

I perused /etc/default/grub and /etc/grub.d/* files and didn’t find any obvious errors.

During my search for information I found https://unix.stackexchange.com/questions/209152/syntax-error-in-grub-cfg-on-update-grub-grub-2-memtest86 but the excellent troubleshooting steps there didn’t result in a solution for me. Sadly I failed to backup /boot/grub/grub.cfg.new prior to resolving the problem so I cannot provide a copy, all I recall is that the error was reported on line 145 and there were not any issues that I could see with the if — fi code block in the area of that line.

asked Dec 28, 2019 at 20:00

Elder Geek's user avatar

Elder GeekElder Geek

35.3k25 gold badges94 silver badges179 bronze badges

3

Since I was able to access the system despite the error, I didn’t have to chroot into it which will be necessary if you cannot boot into the system.
What I did was purge and reinstall grub which did the trick.

The steps I used are as follows:

  1. I confirmed that I had an internet connection with sudo apt-get update # ***
  2. I purged grub-pc and grub-common with sudo apt-get purge grub-pc grub-common
  3. I read the warning about removing the bootloader, hit TAB to highlight «OK» and pressed ENTER.
  4. I issued the command apt-get install grub-common grub-pc and when prompted I hit TAB to highlight «» and pressed ENTER
  5. When presented with the device option, I used the UP/DN keys to select the correct drive (sdX) NOT a partition.

    I made sure the installation drive [] /dev/sdX had an asterisk next to it ( in my case: [] /dev/sda ). If it doesn’t, highlight it and press the SPACE bar to select it. Then I hit TAB to highlight «OK» and pressed ENTER

    I tested that the installation was complete and working by issuing the command sudo update-grub and everything worked error free as expected.

Sources: https://ubuntuforums.org/showthread.php?t=1581099

answered Dec 28, 2019 at 20:33

Elder Geek's user avatar

Elder GeekElder Geek

35.3k25 gold badges94 silver badges179 bronze badges

3

  • Печать

Страницы: [1]   Вниз

Тема: update-grub failed  (Прочитано 1616 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн
andruum

В общем такая тема, новый ноут с Windows 10. Решил поставить вторую систему в виде Ubuntu. Сделал live usb, при загрузке выбрал загрузку с флешки. Но в списке было два пункта с USB. Один был с надписью UEFI, другой без UEFI. Выбрал который без UEFI, установил. (При установке ubuntu не нашла вторую систему в виде Windows) В общем, после этого решил что я сделал что-то не так и решил установить снова, выбрав при этом пункт с UEFI в меню выбора загрузки. Предварительно разметил диск заново. Стал устанавливать, винда в этот раз определилась. Но под конец установки установщик выдал ошибку failed update-grub или что-то типа того. В меню выбора устройства загрузки есть пункт OS boot manager uefi ubuntu. Если загрузиться в него, появляется grub 2 командная строка. (Minimal BASH-like line editing is supported.)
Так вот, что теперь делать? Прошу совета, не решаюсь чинить то, что уже сломалось

GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): Disk /dev/sda: 500118192 sectors, 238.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 353A2D39-6ED5-4DDE-9533-7CBF0138A855
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 500118158
Partitions will be aligned on 2048-sector boundaries
Total free space is 3770989 sectors (1.8 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          534527   260.0 MiB   EF00  EFI system partition
   2          534528          567295   16.0 MiB    0C01  Microsoft reserved part
   3          567296       406441983   193.5 GiB   0700  Basic data partition
   4       469356544       471363583   980.0 MiB   2700  Basic data partition
   5       471363584       500107263   13.7 GiB    0700  Basic data partition
   6       406441984       441597951   16.8 GiB    8300 
   7       441597952       461598719   9.5 GiB     8300 
   8       461598720       465598463   1.9 GiB     8200 


sda6 — это корневой раздел, sda7 — home, sda8 — swap. Остальные с виндой и ее разделами восстановления. Все разделы кроме sda6,sda7,sda8 были, остальные разметил при установке. (Предварительно сжал том в винде). Ошибка появляется на стадии «Running update-grub». Если посмотреть через live ubuntu, в разделе sda6 появились системные папки.


ТС не появлялся на Форуме более полугода по состоянию на 14/07/2019 (последняя явка: 06/01/2017). Модератором раздела принято решение закрыть тему.
—zg_nico

« Последнее редактирование: 14 Июля 2019, 03:38:11 от zg_nico »


toZen


Оффлайн
andruum

τοΖεη, читал. Boot repair может решить эту проблему?


toZen

andruum, т.е., установка сделана в соответствии с инструкцией.
Так?
BootRepair может и решит проблему, в любом случае — нужно пробовать.

### UPD ###
На всякий случай, покажите пожалуйста вывод терминала по команде:

sudo parted -lДля этого, запустите установочный диск в режиме «Try Ubuntu».

« Последнее редактирование: 03 Января 2017, 13:40:49 от τοΖεη »


Оффлайн
andruum

τοΖεη, Первый раз — не по инструкции. Потом да.
Boot repair с рекомендуемыми настройками не помог.

Model: ATA SanDisk SD8SNAT- (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End    Size    File system     Name                          Flags
 1      1049kB  274MB  273MB   fat32           EFI system partition          boot
 2      274MB   290MB  16.8MB                  Microsoft reserved partition  msftres
 3      290MB   208GB  208GB   ntfs            Basic data partition          msftdata
 6      208GB   226GB  18.0GB  ext4
 7      226GB   236GB  10.2GB  ext4
 8      236GB   238GB  2048MB  linux-swap(v1)
 4      240GB   241GB  1028MB  ntfs            Basic data partition          hidden, diag
 5      241GB   256GB  14.7GB  ntfs            Basic data partition          hidden, msftdata

Model: A-DATA USB Flash Drive (scsi)
Disk /dev/sdb: 16.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  16.2GB  16.2GB  primary  fat32        boot, lba


toZen

andruum, запуститесь ещё раз в LiveCD/USB и дайте в терминал:

sudo grub-install /dev/sda

sudo update-grub


Оффлайн
andruum

τοΖεη,

ubuntu@ubuntu:~$ sudo grub-install /dev/sda
Installing for i386-pc platform.
grub-install: error: failed to get canonical path of `/cow'.
ubuntu@ubuntu:~$ sudo update-grub
/usr/sbin/grub-probe: error: failed to get canonical path of `/cow'.


Оффлайн
EvangelionDeath

andruum, Installing for i386-pc platform.
эм… Точно згружено в EFI режиме?

HP Pro 840 G3: Intel i5-6300U, 32GB DDR4 2133MHz, Intel 520, Intel Pro 2500 180GB/Ubuntu 22.04
Dell Latitude 5590: Intel i5-8350U, 16GB DDR4 2400MHz, Intel 620, Samsung 1TB/Ubuntu 22.04


Оффлайн
symon.2014

ubuntu@ubuntu:~$ sudo grub-install /dev/sda

Судя по всему это лайв. И что куда ставится? Может корень стоит примонтировать?


toZen

 

:- Что-то я стормозил…
Конечно нужно примонтировать раздел с Ubuntu и тогда уже устанавливать загрузчик в корень.
andruum, извините, мой косяк.
Вобщем, из-под LiveCD нужно сделать так:

sudo mount /dev/sda6 /mnt ; cd /mnt

sudo grub-install /dev/sdaИ покажите тогда:

sudo update-grub

« Последнее редактирование: 03 Января 2017, 16:24:35 от τοΖεη »


Оффлайн
andruum

τοΖεη,
Наверное вы имели ввиду с опцией —root-directory=/mnt , без нее не находит, выводит так же error: failed to get canonical path of `/cow’.
В общем, вот результат:

sudo grub-install --root-directory=/mnt /dev/sda
Installing for i386-pc platform.
grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.


Пользователь добавил сообщение 04 Января 2017, 14:06:37:


На некоторых ресурсах предлагается установить флаг bios_grub. Это то что нужно или не применимо для данной ситуации?

« Последнее редактирование: 04 Января 2017, 14:06:37 от andruum »


  • Печать

Страницы: [1]   Вверх

Solutions (best ones first)

  1. su - root instead of su root — nicest solution (thanks to Rui)
  2. extend path of the regular user in /etc/enviroment or ~/.bashrc or similar config file
  3. call commands explicitly; using this solution would require that one modifies all scripts that happens to call another command from sbin (this is not practical, nevertheless there is an example of it in the troubleshooting section)

Findings

This happened because the PATH works in a really strange way (actually works as designed).

  1. regular user login -> environment PATH doesn’t contain /usr/sbin => opinion: works as
    designed, quite logical
  2. su root -> admin rights, but the environment is lacking /usr/sbin:/sbin
    => opinion: works as designed, but illogical, because an account with root level of access should be able to execute commands from sbin without adding the path to the binaries manually
  3. su - root -> admin rights, /usr/sbin on the path => opinion: works as
    designed, quite logical

Some more background

There are two PATH defined in /etc/login.defs, but unless I start su - or su - root, I’m going to get the ENV_PATH.
I know that this has been designed this way, to keep the environment of the actual user, but in this single case, it really boggles my mind, why not add automatically /usr/sbin and /sbin to thew path of a «regular user» after a successful su root

# cat /etc/login.defs |grep PATH=
ENV_SUPATH  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH    PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Troubleshooting

I’ve found that there is an update-grub command in /usr/sbin.

# find / -name update-grub
/usr/sbin/update-grub

Ran it, just to get the next error message.

# /usr/sbin/update-grub
/usr/sbin/update-grub: 4: exec: grub-mkconfig: not found

Searched for grub-mkconfig and found it under /usr/sbin/grub-mkconfig.
Then it came to me, let’s see how the update-grub script looks like?

#cat /usr/sbin/update-grub |grep grub-mkconfig
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"

Modified /usr/sbin/update-grub in order to call grub-mkconfig by it’s explicit path …

exec /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg "$@"

… then called update-grub with it’s explicit path and tada, it worked!

# /usr/sbin/update-grub
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-4.18.0-2-amd64
Found initrd image: /boot/initrd.img-4.18.0-2-amd64
Found linux image: /boot/vmlinuz-4.16.0-2-amd64
Found initrd image: /boot/initrd.img-4.16.0-2-amd64
done

Conclusion

This must be something about the PATH

Любите экспериментировать? Наверняка вы когда-либо пытались произвести какие-то действия со своей Linux-системой, причем не так важно какие были цели: изучение и познание новых возможностей или же какая-то более конкретная цель, в виде исправления той или иной ошибки. В любом случае, при работе с дистрибутивами Linux, для загрузки которых, в большинстве случаев, и используется Grub, с последним могут возникать неприятные проблемы, ввиду которых дальнейшая эксплуатация системы просто-напросто невозможна. В этой статье вы узнаете, что делать, если не загружается Linux. Как вести себя в подобной ситуации и какие действия производить, чтобы починить загрузчик Grub. Пожалуй, начнем.

GRUB_screenshot

Grub (или GRand Unified Bootloader) — загрузчик операционных систем с открытым исходным кодом. Распространяется он под лицензией GNU GPL, в полностью свободном виде. С помощью этого замечательного лоадера можно сделать много всего — основная же функция не ограничивается загрузкой лишь одной операционной системы. Вы можете иметь куда больше операционных систем на своем ПК, загружая любую из них с помощью Grub. На скриншоте выше вы можете видеть как примерно Grub выглядит. Кстати говоря, если вы захотите установить Ubuntu 18.04 рядом с Windows, вам определенно понадобится помощь Grub.

Grub используется в большинстве дистрибутивов Linux в качестве загрузчика по-умолчанию. Разумеется и с ним иногда возникают проблемы. Этим самые проблемы чреваты полным отказом операционной системы. Поэтому для починки Grub нам понадобятся дополнительные инструменты. Какие именно — узнаете далее.

От чего могут возникнуть проблемы

Одна из самых распространенных причин — это неправильный порядок установки двух операционных систем (Linux и Windows). Допустим, если вы захотите установить две этих операционных системы на свой ПК — вам непременно стоит знать правильную последовательность:

  • Сначала устанавливаем Windows
  • И только потом уже Linux

Если, например, сделать наоборот, то как раз-таки Grub будет поврежден; система будет грузиться напрямую в Windows, а дистрибутив Linux останется недоступным.

Grub может сломаться и по другим причинам. Например, из-за попыток ручного изменения параметров запуска (при недостатке опыта), в таком случае нужно будет либо вручную убирать лишнее, либо полностью переустанавливать Grub.

Восстановление Grub с помощью LiveCD/USB

Для этого способа нам понадобится флешка с дистрибутивом Linux на борту. Подойдет любой: от Ubuntu, Arch или даже Linux Mint. Здесь нужен только терминал, поэтому подойдет даже версия без графической оболочки.

Как создать LiveCD/USB

Само собой, нам понадобится носитель, на который мы временно (а может и нет) запишем систему. Сохраните все важные файлы, которые были на этом носителе, после чего (имеется ввиду на другом ПК, желательно под управлением Windows) запишите загруженный образ дистрибутива на носитель. В качестве примера мы будем использовать дистрибутив Ubuntu.

Идем на официальную страницу загрузки. Загружаем любую понравившуюся версию (лучше взять новейшую для десктопа), после чего записываем ее на USB/CD.

С помощью Rufus:

Последняя версия приложения доступна на официальном сайте. Сразу после загрузки и запуска/установки мы увидим такое окно:

Rufus

Вставляем носитель, выбираем его в соответствующем меню. Далее выбираем нужную схему раздела и тип системного интерфейса, и после уже открываем файловый менеджер с помощью этой кнопки:

Rufus obraz

Находим загруженный образ через менеджер, после чего жмем «Старт».

С помощью Etcher:

Опять же, идем на официальный сайт, где скачиваем последнюю версию утилиты. Далее делаем все так, как показано на этой гифке:

Etcher

Ну а теперь, собственно, можно переходить к восстановлению Grub. Вставляем флешку в наш ПК (где сломан загрузчик), после чего перезагружаем его с этой самой флешки. Как только мы войдем в лайв-систему, сразу открываем терминал, после чего проделываем следующие действия:

Открываем таблицу разделов с помощью команды:

sudo fdisk -l

Примерно такая таблица будет выведена на экран:

/dev/sda1 27 7683 66999082+ 83 Linux
/dev/sda2 * 8450 13995 45430855 7 HPFS/NTFS
/dev/sda3 11885 16574 6503497 5 Extended

По этой таблице мы видим, что Linux, в нашем случае, расположен на разделе /dev/sda1.

С помощью следующей команды мы смонтируем этот раздел в /mnt:

sudo mount /dev/sda1 /mnt

Теперь, для записи grub в MBR, нужно ввести следующую команду:

sudo grub-install --root-directory=/mnt /dev/sda

Если нужно только восстановить MBR диска (после переустановки Windows, к примеру), то этих действий будет вполне достаточно.

Если же необходимо обновить и меню grub (после установки Windows), то нужно выполнить еще и эту команду:

sudo update-grub --output=/mnt/boot/grub/grub.cfg

Вот и все, восстановление закончено!

Восстановление с помощью chroot

Помимо вышеописанного способа, при восстановлении Grub с помощью LiveCD можно использовать и этот. Тут мы будем использовать утилиту chroot.

Здесь нам, опять же, понадобится таблица разделов. Вводим уже известную команду:

sudo fdisk -l

В выводе снова будет эта таблица. Теперь нам надо присмотреться к ней еще внимательнее.

/dev/sda1 27 7683 66999082+ 83 Linux
/dev/sda2 * 8450 13995 45430855 7 HPFS/NTFS
/dev/sda3 11885 16574 6503497 5 Extended

В этом способе нам необходимо примонтировать системный, а также нескольких других важных разделов. Для этого вводим эти команды:

sudo mount /dev/sda1 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys  /mnt/sys

Обратите внимание, что если если разделы /boot или /var находятся отдельно, то Вам нужно будет примонтировать их в /mnt/boot и /mnt/var.

Далее мы переходим в окружающую среду chroot с помощью команды:

sudo chroot /mnt

И теперь, наконец-таки переустанавливаем Grub с помощью следующей команды:

grub-install /dev/sda

Если вы на этом этапе получаете какие-то сообщения об ошибках, то попробуйте использовать эти команды:

grub-install --recheck /dev/sda

или:

grub-install --recheck --no-floppy /dev/sda

Если все прошло успешно, выходим из chroot, используя команду:

exit

Далее нужно отмонтировать все разделы. Для этого вводим в терминал:

sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt

В случае, если вы монтировали раздел /boot введите команду:

sudo umount /mnt/boot

Теперь перезагружаем систему с помощью:

sudo reboot

Можно также обновить меню Grub, используя команду:

sudo update-grub

Восстановление Grub в rescue mode

Если по каким-то причинам у вас нет доступа к LiveCD/USB-носителю, а также к компьютеру, с помощью которого этот самый носитель можно было бы сделать, то этот способ для вас.

Само восстановление проходит таким образом: сначала мы подгружаем все модули, чтобы открыть доступ ко всей функциональной части Grub, после чего запуститься с нужного раздела. Надо понимать, что Grub состоит из двух частей:

Одна из этих частей (первая) записана в MBR диска. В ней присутствует базовый функционал и ничего больше (консоль в rescue mode).

Стало быть, нам нужно определить, в каком разделе находится вторая часть Grub (находится в каталоге /boot/grub), и после чего подгрузить все недостающие модули. А вот уже после этого мы сможем запустить загрузчик с нужного раздела. В rescue mode есть всего четыре команды:

 ls
set
unset
insmod

Для начала вводим следующую команду:

 ls

В выводе будет что-то подобное:

(hd0) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1) (hd1) (hd1,msdos2) (hd1,msdos1)

В некоторых случаях Grub неправильно опеределяет файловые системы находящиеся на разделах дисков. В данном примере загрузчик показывает их как msdos. Мы должны попытаться угадать диски, которые видим. В примере доступно два диска. Диск с индексом 0 содержащий три раздела, и диск с индексом 1 содержащий два раздела. Если вы знаете структуру своих дисков, определить нужный труда не составит.

В загрузчике Grub разделы нумеруются в обратном исчислении. Не очень ясно какой именно из разделов назван, к примеру (hd0,msdos3). Чтобы было более понятно, можно использовать вид (hd0,1). Если в грабе отсчет дисков идет с 0, а разделов с 1, то можно определить, что операционная система установлена в первый раздел первого раздела — (hd0,1). Используем следующую команду:

set prefix=(hd0,1)/boot/grub 
set root=(hd0,1)

С помощью этих команд мы приказываем системе использовать какой-то конкретный диск, для выполнения всех остальных операций (в нашем случае, это диск (hd0,1)). Чтобы проверить есть ли на данном диске загрузчик, введем эту команду:

ls /boot/grub

Если в выводе будет список файлов и папок, значит мы все сделали правильно. Теперь можно загрузить все необходимые модули. Для этого выполним команды:

insmod ext2
insmod normal
normal

После выполнения команд Grub загрузится в полнофункциональном режиме. Будут найдены все операционные системы, которые установлены на компьютере, после чего будет показано стандартное меню загрузки.

Чтобы закрепить результат (и не проделывать все то же самое после перезапуска ПК), нужно зайти в терминал своего дистрибутива Linux, где с root правами выполнить следующую команду:

grub-install /dev/sdX

sdX — диск, на который должен быть установлен Grub.

Если операционная система расположена на разделе с файловой системой btrfs, то нам необходимо выполнить следующие команды:

set prefix=(hd0,1)/@/boot/grub
set root=(hd0,1)

И подгрузить модули:

insmod btrfs
insmod normal

Ну и теперь запустить GRUB:

normal

Восстановление Grub с помощью утилиты Boot repair

1335260967

С помощью этой замечательной утилиты вы сможете восстановить загрузчик всего в пару кликов. Как видно из скриншота, утилита имеет собственный GUI, ее использование не вызовет трудностей.

Чтобы установить boot repair, вы можете воспользоваться одним из приведенных способов:

  • Запись и установка специального образа диска Boot Repair (и дальнейшая загрузка с него)
  • Установка Boot repair из PPA-репозитория в LiveCD/USB дистрибутиве.

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

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update && sudo apt-get install -y boot-repair

В утилите будет доступно два варианта на выбор:

Recommended repair исправляет большую часть известных ошибок, которые могли бы возникнуть при запуске. С его помощью вы сможете пофиксить и загрузчик Grub.

Create a BootInfo summary создает Boot-Info-Script – скрипт, который позволяет диагностировать большинство проблем при загрузке.

Здесь же есть и Advanced options. Он включает в себя варианты для восстановления и настройки загрузчика Grub2 (загрузка по-умолчанию, опции загрузки ядра, отображение или скрытие GRUB при загрузке, удаление GRUB). С помощью этих же инструментов, вы можете восстановить MBR и т.д.

Вам обязательно стоит заглянуть на официальный сайт Boot Repair. Там вы сможете найти более подробную информацию обо всех возможностях и особенностях программы. Там же будет доступна информация о выходе новых версий: фиксах и улучшениях самой утилиты, а также многом и многом другом.

Выводы

Вот мы и рассмотрели несколько вариантов исправления загрузчика Grub. Стоит сказать, что некоторые из них могут показаться сложными или даже невыполнимыми. Это не так, каждый из рассмотренных способов нашел подтверждение в виде сотен и тысяч актов исправления загрузчика Grub в опенсорсном сообществе. Кстати говоря, какой из способов выбрать — решать только вам, любой из них достаточно эффективен, чтобы попасть в этот материал.

Возможно вас заинтересуют и другие похожие материалы про починку загрузчика Grub2. Например, в этом материале вы узнаете, как починить GRUB2 если Ubuntu не хочет загружаться. Там более подробно рассказывается, как фиксить груб с помощью утилиты Boot Repair, возможно вам стоит заглянуть туда, если вы не поняли что-то из этого материала. Что же, ну а на сегодня это все. Надеюсь, что данный материал помог вам разобраться в ошибках. Что, в свою очередь, поможет вам их решить.

Восстановление GRUB

В данной статье рассматривается процесс восстановления загрузчика GRUB 2.

Причины, по которым может понадобится восстановить GRUB, могут быть разными.

Очень часто требуется восстанавливать GRUB после установки Windows. Если у вас был установлен Linux и вы установили в соседний раздел или на соседний диск Windows, то после перезагрузки компьютера загрузится Windows, как будто Linux вообще пропал. Загрузчик GRUB даже не появился. Иногда подобное происходит при обновлении существующего Windows.

Иногда требуется восстановление GRUB после установки Linux, когда неверно был выбран раздел для установки загрузчика.

Во всех случаях нужно выполнить восстановление загрузчика GRUB. Существуют разные способы восстановления. В данном руководстве рассматривается процесс использованием загрузочного Live-образа Linux. Загрузившись в Live-систему вам нужно будет ввести несколько команд, чтобы выполнить восстановление. Рассматривается способ восстановления без использования сторонних программ.

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

Подготовка

Для восстановления GRUB потребуется загрузочный диск или флешка с дистрибутивом Linux. Если у вас его нет, то нужно скачать образ с дистрибутивом. Например, можно скачать ISO образ Ubuntu.

Для создания загрузочной флешки можно воспользоваться программой Etcher. Она работает в Linux, Windows и MacOS. Подробная инструкция: Как создать загрузочную флешку.

Загрузка в Live-режиме

Теперь нужно загрузиться с созданного диска или флешки.

Чтобы это сделать сначала нужно в BIOS выбрать приоритет загрузки с CD/DVD или с USB (если вы используете флешку).

На современных компьютерах, где используется BIOS/UEFI, для входа в BIOS нужно при включении компьютера удерживать специальную клавишу. У разных производителей клавиша может быть разной. Обычно это: F2, Del, F10, Esc, F11 или F3.

На старых компьютерах, где используется классический BIOS, чтобы войти в BIOS нужно при загрузке компьютера, в самом начале, когда появляется логотип материнской платы, нажать специальную клавишу. Для разных материнских плат клавиша может быть разной. Обычно это одна из клавиш: Del, F1, F2, F8, F10 или какая-нибудь другая, или даже сочетание клавиш. Подробности: Настройка BIOS для загрузки с CD/DVD-диска или с USB-носителя

Открываем терминал

Итак, вы загрузились в Live-режиме. Теперь нужно открыть терминал.

В Ubuntu и некоторых других дистрибутивах это можно сделать нажатием сочетания клавиш Ctrl+Alt+T. Или запустить терминал через меню программ.

Определение разделов

Теперь нужно определить раздел диска, на котором был установлен GRUB.

Выведем список разделов, для этого выполняем команду (в конце команды стоит строчная буква L):

sudo fdisk -l

Вывод fdisk для BIOS

Пример вывода команды:
Восстановление GRUB. fdisk l

В моем случае мы видим 2 диска: /dev/sda (SSD диск) и /dev/sdb (флешка, с которой сейчас загружена Live-система).

Нас интересует диск /dev/sda. На диске /dev/sda создано несколько разделов. В моем случае /dev/sda4, на котором установлен Windows, а также 4 раздела с пометкой Linux (см. последний столбец таблицы). У вас скорее всего может быть один раздел Linux (корневой раздел) или два раздела (корневой и home). На одном из этих разделов установлен GRUB.

То есть из таблицы вы должны определить какой раздел является корневым, на нем скорее всего у вас установлен GRUB. В моем случае GRUB установлен в раздел /dev/sda2. Далее по тексту я буду его использовать (вы должны будете указывать свой раздел).

Иногда бывает, что для загрузчика GRUB выделен отдельный раздел (он называется boot-раздел). Если это так, то на следующем шаге вам нужно будет примонтировать корневой раздел и раздел с загрузчиком.

Вывод fdisk для UEFI

Для новых компьютеров с UEFI вывод команды fdisk -l может быть примерно следующим:
Fdisk l для UEFI

Нам нужно определить, на каком разделе установлен Linux (корневой раздел), а также определить EFI-раздел. В моем случае это разделы: /dev/nvme0n1p5 и /dev/nvme0n1p1, которые расположены на диске /dev/nvme0n1.

Монтирование разделов

Примонтируем корневой раздел. Выполняем команду (вместо /dev/sda2 вы должны указать свой раздел):

sudo mount /dev/sda2 /mnt

Мы примонтировали раздел /dev/sda2 в директорию /mnt.
Восстановление GRUB. Монтирование корневого раздела

Если для загрузчика у вас выделен отдельный раздел, то нужно примонтировать еще и его (вместо /dev/sdX укажите ваш boot-раздел):

sudo mount /dev/sdX /mnt/boot

Теперь можно посмотреть содержимое директории /mnt, чтобы убедиться, что мы примонтировали верный раздел:

ls /mnt

Вывод команды должен быть примерно следующим. Обратите внимание есть ли в этом списке каталог /boot, так как именно в нем установлен GRUB.
Восстановление GRUB. Список файлов

Также можно проверить, что директория boot не пустая:

ls /mnt/boot

У меня вывод команды выглядит следующим образом. Обратите внимание на присутствие каталога с именем grub.
Восстановление GRUB. Список файлов в boot

Далее нужно создать ссылки на несколько директорий, к которым GRUB должен иметь доступ для обнаружения всех операционных систем. Для этого выполните команды:

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

Восстановление GRUB. mount bind dev pts proc sys

Монтирование EFI-раздела

Если у вас используется UEFI, то еще нужно примонтировать EFI-раздел в директорию /mnt/boot/efi (выше я указал пример вывода команды fdisk -l в котором показан EFI-раздел):

sudo mount /dev/nvme0n1p1 /mnt/boot/efi

Выполняем chroot на /mnt

На предыдущем шаге мы смонтировали все необходимые директории в директорию /mnt. Теперь переключимся (выполним chroot) на данную директорию. Выполняем команду:

sudo chroot /mnt

Восстановление GRUB. chroot

Генерация файла конфигурации GRUB

Данный шаг нужно выполнять не всем. Если у вас был установлен GRUB и вы уверены, что его конфигурация верная, то можно перейти к следующему шагу.

Для генерации файла конфигурации GRUB используется команда update-grub. Данная команда автоматически определяет файловые системы на вашем компьютере и генерирует новый файл конфигурации. Выполняем команду:

sudo update-grub

В выводе команды будет показано, какие операционные системы были найдены.
Восстановление GRUB. update-grub

Если вдруг утилита update-grub не определила ваш Windows (у меня такое было для UEFI), то можно будет запустить update-grub повторно уже из вашей Linux-системы, когда вы в нее загрузитесь (мне это помогло и Windows определился).

Устанавливаем GRUB

Осталось выполнить установку GRUB на диск. Мы определили раздел на котором у нас установлен GRUB на первом шаге данного руководства. В моем случае это раздел /dev/sda2, который расположен на диске /dev/sda.

Для установки GRUB используется команда grub-install, которой нужно передать в качестве параметра диск, на который будет выполняться установка (в моем случае это диск /dev/sda):

grub-install /dev/sda

Восстановление GRUB. grub-install

https://askubuntu.com/questions/88384/how-can-i-repair-grub-how-to-get-ubuntu-back-after-installing-windows
If Ubuntu is installed in EFI mode, and EFI partition UUID has changed, you may need to update it in /etc/fstab. Compare it:
blkid | grep -i efi
grep -i efi /etc/fstab

Перезагрузка компьютера

Выходим из окружения chroot, для этого выполняем команду:

exit

Отмонтируем все разделы, которые мы примонтировали:

sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev/pts
sudo umount /mnt/dev

Если вы монтировали boot-раздел, то его тоже нужно отмонтировать:

sudo umount /mnt/boot

Если вы монтировали EFI-раздел, отмонтируем:

sudo umount /mnt/boot/efi

Отмонтируем корневой раздел:

sudo umount /mnt

Перезагружаем компьютер. Для этого выполняем команду:

reboot

Если во время перезагрузки компьютера меню GRUB не появилось, то это еще не значит, что он не восстановился. Возможно, просто установлена нулевая задержка и меню не показывается. Чтобы показать меню GRUB нужно во время загрузки, после того, как появился логотип материнской платы:

  • удерживать клавишу Shift, если у вас классический BIOS;
  • нажать Esc, если у вас UEFI.

Если у вас, при выполнении grub-update, не определился Windows и не был добавлен в меню GRUB, то уже загрузившись в вашу систему Linux (не LiveCD), откройте терминал и выполните:

sudo grub-update

Мне это помололо на компьютере, который использует UEFI.

Шпаргалка

Мы рассмотрели процесс восстановления загрузчика GRUB 2. Для удобства привожу краткую шпаргалку по командам, которые мы выполняли. Учитывайте, что названия и имена разделов (/dev/sd…) у вас могут отличаться.

sudo fdisk -l
sudo mount /dev/sda2 /mnt
# sudo mount /dev/sdaX /mnt/boot
# sudo mount /dev/sdaY /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
sudo update-grub
grub-install /dev/sda

Понравилась статья? Поделить с друзьями:
  • Update exe ошибка приложения discord
  • Usb hot plug ошибка b4
  • Uo131 форд фокус ошибка
  • Update exe неустранимая ошибка clr 80070005 discord
  • Usb hdd ошибка ввода вывода