Восстановление загрузчика Grub 2 в Linux Ubuntu

Администраторы и пользователи Linux Ubuntu иногда сталкиваются с проблемой восстановления/переустановки загрузчика Grub 2. Типичные ситуации, которые приводят к необходимости восстановления загрузчика — это инсталляция второй операционной системы, случайное повреждение вследствие неосторожности и т.п.

Если система вдруг перестала загружаться, не стоит отчаиваться. Восстановить загрузчик Grub 2 можно с помощью Live CD или Live USB с операционной системой Linux Ubuntu.

 

ПОДГОТОВКА

Загрузитесь с Live CD или USB. Определите, если не знаете или не уверены, номер раздела жёсткого диска, используемого в качестве корневого. Сделать этом можно с помощью утилиты Disks, входящей в поставку Linux Ubuntu, или любым другим удобным способом. Например, /dev/sda2, /dev/sdb1. Обозначим раздел диска, используемый в качестве корневого восстанавливаемой системы, как /dev/sdXY, где X — это буква, обозначающая жёсткий диск, например, a, b, c и т.д., а Y — это номер корневого раздела.

 

ВОССТАНОВЛЕНИЕ

Смонтируйте корневой раздел /dev/sdXY восстанавливаемой системы в директорию /mnt Ubuntu Live, выполнив в терминале команду:

sudo mount /dev/sdXY /mnt

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

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

Последнее действие позволит нам обращаться к директории /dev через путь /mnt/dev, к директории /dev/pts через путь /mnt/dev/pts и т.д.

На следующем шаге следует с помощью системного вызова chroot произвести операцию изменения корневого каталога на /mnt следующим образом:

sudo chroot /mnt

Теперь всё готово для восстановления загрузчика Grub 2. Выполним восстановление, заменив в командах ниже имя диска sdX на своё, например, sda, sdb и т.д. Выполните последовательно следующие команды:

grub-install /dev/sdX
grub-install --recheck /dev/sdX
update-grub

Если в процессе выполнения последних трёх команд отсутствовали сообщения об ошибках, то можно констатировать, что загрузчик Grub 2 восстановлен. Нам остаётся лишь в обратном порядке вернуться к системному корневому каталогу «живой» системы, размонтировать все синонимы каталогов, а также размонтировать корневой раздел восстановленной системы, выполнив последовательно команды:

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

Перезагрузите систему и убедитесь, что загрузчик Grub 2 восстановлен.

 

ВОЗМОЖНЫЕ ПРОБЛЕМЫ И ИХ РЕШЕНИЕ

Одной из наиболее распространённых проблем, с которой сталкиваются при восстановлении загрузчика Grub 2 описанным выше способом, является ошибка, вызванная отсутствием раздела c флагом bios_grub на жёстком диске с таблицей разделов GUID (GPT). Проблема проявляется во время выполнения команды:

grub-install /dev/sdX

в виде ошибки:

grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub-install: error: embedding is not possible, but this is required for cross-disk install.

Причиной такой ошибки является либо отсутствие флага bios_grub на специальном разделе диска, либо полное отсутствие такого раздела на жёстком диске, который требуется для нормальной работы жёстких дисков с таблицей разделов GPT. В соответствии с технологией GPT на жёстком диске для осуществления загрузки операционных систем обязательно должен присутствовать служебный раздел «BIOS boot partition» с минимальным размером 1-2 Мб и флагом bios_grub.

Если вы столкнулись с ситуацией отсутствия раздела — создайте его, используя утилиту Disks из Ubuntu Live или любым другим удобным способом. Я рекомендую «отрезать» раздел размером 2 Мб от раздела подкачки, который, как правило, присутствует на жёстких дисках с Linux Ubuntu. Можно сначала удалить раздел подкачки, затем создать требуемый служебный раздел с файловой системой EXT4 размером 2 Мб и после из оставшегося свободного неразделённого пространства жёсткого диска вновь создать раздел покачки swap.

Кроме того, возможно потребуется отсортировать с помощью утилиты gdisk разделы на диске, чтобы порядок их нумерации соответствовал физическому размещению по отношению к началу дискового пространства (для тех, кто любит порядок). Сделать это можно командой «s» в интерфейсе утилиты gdisk, доступ к которому для диска /dev/sdX осуществляется следующим образом:

sudo gdisk /dev/sdX

где sdX следует заменить на ваш диск (не забудьте перед выходом из утилиты записать все изменения на диск командой «w»). При этом придётся отредактировать файл /etc/fstab на восстанавливаемой системе, заменив либо прямые указатели разделов диска вида /dev/sdXY на новые, которые образовались после сортировки, либо на UUID разделов диска, которые можно узнать, используя команду:

sudo blkid

Когда служебный раздел диска размером 2 Мб (вообще говоря максимальный размер служебного раздела не ограничен, но в нашем случае 2 Мб будет достаточно) создан либо если такой раздел существовал, но на нём отсутствовал флаг bios_grub, необходимо окончательно устранить проблему, которая не позволяет восстановить загрузчик, как описано выше. Для этого установим флаг bios_grub на созданный (или проблемный) служебный раздел GPT:

sudo parted /dev/sdX set Y bios_grub on

где sdX следует заменить на идентификатор вашего диска, на котором расположен служебный раздел, например: sda, sdc и т.п., а «Y» соответствует номеру служебного раздела. Например, если служебный раздел размером 2 Мб для GPT  — это sdb3, то в таком случае sdX следует заменить на sdb, а «Y» — на 3.

После проведённых манипуляций с дисками следует повторить процедуру восстановления Grub 2 заново так, как это указано выше.

Обратите внимание, что GPT GUID-идентификатор служебного раздела GPT после всех операций изменится на EF02, который соответствует «BIOS boot partition». Указанное произойдёт даже если в процессе создания/форматирования раздела была использована файловая система Ext4 или любая другая.

В завершение замечу, что проверить таблицу разделов диска, в том числе GPT GUID разделов и т.п., можно с помощью утилиты gdisk:

sudo gdisk /dev/sdX

с использованием команды «p» после входа в интерфейс утилиты, пример:

gdisk

Просматривать же флаги, установленные на разделах дисков, очень удобно с помощью другой утилиты parted:

sudo parted /dev/sdX print

Пример:

parted

Вернуться назад...

МЕТКИ >, , , ,