mount /dev/sda /mnt
mount –bind /dev /mnt/dev
mount –bind /dev/pts /mnt/dev/pts
mount –bind /proc /mnt/proc
mount –bind /sys /mnt/sys
chroot /mnt
grub-install /dev/sda
grub-install –rechek /dev/sda
update-grub
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev/pts
umount /mnt/dev
umount /mnt
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
ВОССТАНОВЛЕНИЕ ЗАГРУЗЧИКА 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» после входа в интерфейс утилиты, пример:
root@dump:~# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): p
Disk /dev/sda: 1953525168 sectors, 931.5 GiB
Model: ST1000NM0033-9ZM
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): FB8EEE82-3CE5-4F18-881A-473361590CFD
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 2048-sector boundaries
Total free space is 5485 sectors (2.7 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 4095 1024.0 KiB EF02
2 4096 1953521663 931.5 GiB 8300
Просматривать же флаги, установленные на разделах дисков, очень удобно с помощью другой утилиты parted:
sudo parted /dev/sdX print
Пример:
root@dump:~# parted /dev/sda print
Model: ATA ST1000NM0033-9ZM (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB bios_grub
2 2097kB 1000GB 1000GB ext4
Теперь загрузимся с USB в Kubuntu Live.
Проверим EFI раздел:
kubuntu@kubuntu:~$ efibootmgr
BootCurrent: 0003
Timeout: 0 seconds
BootOrder: 0000,0003,0001
Boot0000* Windows Boot Manager
Boot0001* Hard Drive
Boot0003* UEFI: JetFlashTranscend 16GB
Boot0000 — виндовый загрузчик
Boot0001 — дефолтный загрузчик
Boot0003 — флешка с Kubuntu Live
Обратите внимание, что список загрузчиков не привязан к одному физическому диску как в MBR. Он хранится в NVRAM.
Можем также сразу посмотреть, что же в этом разделе, подмонтировав его:
kubuntu@kubuntu:~$ sudo mkdir /media/efi
kubuntu@kubuntu:~$ sudo mount /dev/sda2 /media/efi
Там окажутся следующие файлы:
EFI
|–Boot
| |–bootx64.efi # дефолтный загрузчик
|–Microsoft
|–Boot
|–bootmgfw.efi # основной виндовый загрузчик
|–# много других файлов
После завершения установки Kubuntu, заходим в систему и проверяем, какие файлы появились на efi разделе (монтировать уже не нужно):
user@kubuntu:~$ sudo ls /boot/efi/EFI
Boot Microsoft ubuntu
user@kubuntu:~$ sudo ls /boot/efi/EFI/ubuntu
grub.cfg grubx64.efi MokManager.efi shimx64.efi
Смотрим, как теперь выглядит список загрузчиков:
user@kubuntu:~$ efibootmgr -v
BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0002,0000,0003,0001
Boot0000* Windows Boot Manager HD(2,96800,32000,c4f37e07-0441-4967-a1ac-75fb5a36e4f3)File(\EFI\Microsoft\Boot\bootmgfw.efi)
Boot0001* Hard Drive BIOS(2,0,00)
Boot0002* ubuntu HD(2,96800,32000,c4f37e07-0441-4967-a1ac-75fb5a36e4f3)File(\EFI\ubuntu\shimx64.efi)
Boot0003* ubuntu HD(2,96800,32000,c4f37e07-0441-4967-a1ac-75fb5a36e4f3)File(EFI\Ubuntu\grubx64.efi)