Gnu grub

Oleg Koptev

Read more posts by this author.

Oleg Koptev

Ubuntu, как и многие другие дистрибутивы Linux в качестве загрузчика системы используют GRUB2. Если GRUB2 «ломается», например, если вы установите Windows после установки Ubuntu, либо при перезаписи MBR — загрузить Ubuntu вы не сможете.

GRUB2 можно запросто починить с помощью Live CD Ubuntu или USB-флешки. Этот процесс отличается от восстановления загрузчика GRUB Legacy на старых дистрибутивах Linux.

Описанный ниже процесс должен работать со всеми версиями Ubuntu. Он был протестирован на версиях Ubuntu 16.04 и Ubuntu 14.04.

Способ с использованием графического интерфейса: Boot Repair###

Boot Repair — приложение с графическим интерфейсом, с помощью которого можно починить GRUB2 всего одним щелчком мыши. Идеальное решение для большинства пользователей.

Если у вас есть носитель, с которого вы устанавливали Ubuntu, вставьте его в компьютер, выполните перезагрузку и загрузитесь со сменного носителя. Если носителя у вас нет, загрузите Live CD Ubuntu и запишите его на диск или создайте загрузочную USB-флешку.

При загрузке, нажмите «Попробовать Ubuntu» (Try Ubuntu), чтобы загрузить работоспособное окружение рабочего стола.

Перед тем как продолжить, убедитесь, что у вас работает подключение к интернету. Возможно, потребуется выбрать сеть Wi-Fi и ввести пароль.

Откройте терминал из Dash и выполните следующие команды для того, чтобы загрузить и установить Boot Repair:

Boot Repair автоматически просканирует систему после запуска команды boot-repair . После этого, щелкните кнопку Recommended repair для восстановления GRUB2 .

Здесь вы также можете выполнить расширенные настройки, однако вики-страница Ubuntu не рекомендует делать этого если вы точно не знаете, за что они отвечают. Рекомендуемый вариант позволяет исправить большинство проблем автоматически, а при выборе неправильных настроек можно только ухудшить ситуацию.

Boot Repair начнёт работать. Возможно, появится запрос открыть терминал и скопировать/вставить несколько команд.

Просто следуйте инструкциям на экране. Выполните все инструкции Boot Repair и щёлкните Forward чтобы перейти к следующему экрану. Утилита проведёт вас через все необходимые действия для восстановления.

После того, как Boot Repair закончит работу, перезагрузите компьютер. Ubuntu должна будет нормально запуститься.

Способ с использованием терминала

Если же вы не боитесь «запачкать руки», вы можете починить систему через терминал. Вам потребуется загрузиться с Live CD или USB-флешки, так же, как в способе, описанном выше. Убедитесь, что версия Ubuntu на диске совпадает с версией, установленной на компьютере. Например, если у вас была установлена Ubuntu 14.04, следует использовать Live CD Ubuntu 14.04.

После загрузки системы откройте терминал. Определите раздел диска, на котором установлена Ubuntu с помощью одной из следующих команд:

Ниже приводится вывод обеих команд. В случае команды fdisk -l , раздел Ubuntu можно определить по слову Linux в колонке System . В случае использования команды blkid , раздел определяется по использованию файловой системы ext4.

Если на компьютере имеется несколько разделов Linux в формате ext4, обратите внимание на их размер и порядок, в котором они представлены в списке

Выполните следующие команды для монтирования раздела Ubuntu в /mnt/ubuntu , заменив /dev/sdX# на имя устройства, на котором установлен ваш раздел Ubuntu, определенный выше:

На примере выше раздел Ubuntu находится на /dev/sda1 . Это первый раздел на первом жёстком диске.

Важно! Если у вас имеется отдельный загрузочный раздел, пропустите команду выше и монтируйте загрузочный раздел в /mnt/ubuntu/boot. Если вы не знаете, есть ли у вас отдельный загрузочный раздел, то скорее всего его нет =)

Выполните следующую команду для повторной установки GRUB2 с Live CD, заменив /dev/sdX на имя жёсткого диска выше. Не указывайте номер. Например, если выше вы использовали /dev/sda1 , введите просто /dev/sda .

Выполните перезагрузку, Ubuntu должна нормально загрузиться.

Для получения подробной информации о том, как использовать команду chroot для получения доступа к повреждённым системным файлам Ubuntu и восстановления GRUB2, смотрите вики-страницу Ubuntu (на англ. языке).

Установка нового ядра

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

ЗаметкаПеред выполнением следующей команды убедитесь, что раздел /boot смонтирован.

Generating grub.cfg ...
Found linux image: /boot/kernel-3.3.8-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.3.8-gentoo
Found linux image: /boot/kernel-3.2.12-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
done

Обратите внимание, что GRUB2 необходимо только переконфигурировать, а не переустановливать в Master Boot Record (MBR) загрузочного диска. С другой стороны, когда обновляется сам GRUB2, его необходимо переустановить на загрузочный диск, но, как правило, его не нужно переконфигурировать.

Updating GRUB package

The very first thing to do is make sure that GRUB is up-to-date. When you update the system, pacman will take care of updating GRUB to the latest version.

sudo pacman -Syu

If you want to manually make sure that the system has the latest version of GRUB, use the following command.

sudo pacman -S grub

This command will reinstall GRUB, of course. However, pacman will check for the latest version from the server and if there’s an update available, will grab and install it.

Editing GRUB configuration

GRUB allows custom configuration. You can perform a number of actions using this opportunity, for example, setting the default OS (if multiple OS is installed), GRUB menu timeout, custom background image and much more. It’s also possible to set custom scripts for GRUB.

GRUB uses its own configuration file for performing all the actions. The file is located at “/etc/default/grub”. For GRUB scripts, “/etc/grub.d” directory is used.

Edit the GRUB configuration file.

sudo <editor> etcdefaultgrub

For example, to change the GRUB wallpaper, change the value of “GRUB_BACKGROUND” variable.

GRUB also allows coloring the texts for easier reading.

At the start of the file, you’ll notice “GRUB_DEFAUTL” variable. It’s used to define which OS is the default one in the bootloader.

The next entry “GRUB_TIMEOUT” will decide how long the GRUB menu should remain open. By default, the value is 5 (seconds). If you want to unlimited GRUB menu show, set the value to any negative integer.

Once editing is complete, save the file.

Let’s check out the GRUB script directory.

GRUB customizer

This is a very helpful tool that allows easier customization of various GRUB settings. It’s a graphical tool and available directly from the Arch Linux repository.

sudo pacman -S grub-customizer

Start “grub-customizer” from the menu.

It’ll require the root password to start. After all, you’re calling a tool to perform system-level changes.

Every single option of the tool is simple and self-explanatory.

Reload GRUB

After making all the changes, it’s necessary to update the GRUB cfg file at the “/boot/grub” directory. Run the following command after making any change to GRUB’s configuration file.

sudo grub-mkconfig -o bootgrubgrub.cfg

If you’re not interested in running this lengthy command, you can use the “update-grub”. It’s a script that runs the previously mentioned command. However, it’s not available on the Arch Linux official directory. “update-grub” has to be grabbed from AUR.

Prepare your system for building and installing AUR packages.

sudo pacman -S git base-devel

Grab “update-grub” from AUR.

git clone https://aur.archlinux.orgupdate-grub.git

Start building “update-grub”.

Note: For easier AUR access, it’s recommended to use a suitable AUR helper. AUR helpers can automate the entire task. Learn how to use AUR.

yay -S update-grub

Once the installation is complete, you can directly call “update-grub” to do the job.

sudo update-grub

Final thoughts

GRUB is the most popular bootloader for all the Linux distros. It can work with other OS as well. For taking full control over the boot process, it’s necessary to have knowledge on manipulating GRUB configurations and updating GRUB properly.

Устранение проблем

Большую часть проблем можно устранить, проверив правильность таблицы разделов. Убедитесь, что перед первым разделом диска достаточно свободного места или убедитесь, что загрузочный раздел BIOS доступен. Также убедитесь в том, что файл /boot/grub/grub.cfg был правильно сгенерирован командой grub-mkconfig, или сгенерируйте его с индивидуальным пунктом меню.

Чтобы получить больше информации по устранению ошибок в GRUB2, пожалуйста, проверьте статью Troubleshooting.

Прошивка материнской платы не находит файл .EFI

Некоторые производители материнских плат поддерживают только одно расположение файла .EFI, в системном разделе EFI (ESP). Если это ваш случай, просто переместите файл GRUB по умолчанию в /efi/boot/. Сначала убедитесь, что ESP примонтирован. Предполагая, что ESP примонтирован в /boot/efi (как предлагается в Handbook), запустите:

You can also use the removable parameter with grub-install command to generate this file automatically:

Installation finished. No error reported.

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

os-prober и UEFI в chroot

Запустите эти команды в окружении реального хоста, чтобы предоставить необходимые файлы (пример подразумевает, что Gentoo смонтирована в /mnt/gentoo как это было в Handbook):

Installing GRUB 2 on OS X

The installation of GRUB 2 on OS X is a little tricky. The latest released version 2.00 (as of 7th of October, 2014) doesn’t seem to work with any configuration. The developer team fixed this in the newer revisions.

1. Clone the developer version of the sources:

git clone git://git.savannah.gnu.orggrub.git

(This was tested on revision: 77063f4cb672f423272db7e21ca448cf3de98dcf)

2. A tool named objconv is required, get it from:

Download sources, compile (see website for details) and make available in your PATH.

3. Run «autogen.sh» in the GRUB sources folder

4. Create a seperate build directory, switch to it, and run GRUB’s configure script (insert your target-specific tools!):

../grub/configure --disable-werror TARGET_CC=i386-elf-gcc TARGET_OBJCOPY=i386-elf-objcopy \
TARGET_STRIP=i386-elf-strip TARGET_NM=i386-elf-nm TARGET_RANLIB=i386-elf-ranlib --target=i386-elf

5. Run «make» and «make install»

Now you have a working GRUB 2 that has the required files to build an image that boots on i386 platforms.

Идентификация и подготовка установленных разделов вручную

1. Убедитесь, что вы используете учётную запись Root. Это можно определить по символу решётки (‘#’) вместо доллара (‘$’) в начале командной строки. Чтобы переключиться на учётную запись Root, введите команду:

sudo su

2. Просмотрите список разделов. Это необходимо для идентификации раздела, в который установлена ваша система Manjaro. Если вы используете отдельный раздел boot, его также необходимо идентифицировать. Для получения списка разделов введите команду:

lsblk -f
  или
sudo blkid -o list -c /dev/nul

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

  • /dev/sda1: раздел boot
  • /dev/sda2: раздел подкачки
  • /dev/sda3: система Manjaro
  • /dev/sda4: место для личных файлов пользователей.

Если вы не уверены, можно воспользоваться приложением gparted, которое можно найти в Меню > Система > GPartEd. Оно предоставляет простое визуальное отображение разделов на жёстких дисках. Если существует отдельный раздел для GRUB, то он должен быть помечен как ‘bootable’ и иметь размер около 100 МБ.

3. Смонтируйте системный раздел Manjaro. Синтаксис команды таков:

mount /dev/ /mnt

В данном примере, поскольку системный раздел Manjaro — это /dev/sda3, он монтируется следующей командой:

mount /dev/sda3 /mnt

Если у вас отдельный раздел для загрузчика GRUB, то его тоже нужно смонтировать. Синтаксис команды таков:

mount /dev/ /mnt/boot

В данном примере отдельный раздел —/dev/sda1— используется для GRUB, и он будет смонтирован следующей командой:

mount /dev/sda1 /mnt/boot

note: Если вы не используете отдельный раздел boot, то его, конечно же, не нужно монтировать!

4. Перейдите в корневой каталог ваших смонтированных разделов.

cd /mnt

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

mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
mount -t devpts pts /mnt/dev/pts/
chroot /mnt

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

Вначале установите приложения mtools и os-prober. mtools — это набор инструментов для доступа к дискам MS-DOS из GNU/Linux и Unix без их монтирования. os-prober — это утилита, определяющая, имеются ли на компьютере другие операционные системы. Установите их обе следующей командой:

sudo pacman -S mtools os-prober

Основные возможности GRUB

StartUp-Manager — графический интерфейс для настройки GRUB

  • Загрузка Linux, OpenSolaris, *BSD ядер и других Multiboot-совместимых ОС;
  • Передача управления другим загрузчикам, возможность загрузки Windows-систем;
  • Защита паролем пунктов меню;
  • Поддержка BOOTP и TFTP для сетевой загрузки;
  • Интерактивная командная строка загрузки;
  • Поддержка файловых систем: ext2/ext3/ext4, ReiserFS, JFS, XFS, NTFS, ISO, UFS, UFS2, FFS, FAT16, FAT32 и Minix, и чтение файлов конфигурации, ядер, initrd и других файлов прямо с файловой системы.
  • Поддержка загрузчика EFI, начиная с версии 1.98 (загрузка операционных систем семейства Mac OS).
  • Помимо всего прочего, GRUB может достаточно гибко менять внешний вид, например показывать красивую картинку в загрузочном меню.
  • GRUB2 имеет модульную структуру. Это означает, что туда легко добавляется всё, что угодно, вплоть до игр, также как и выбрасывается, если необходимо уменьшить размер.

5 Configuration

You’ve probably noticed that you need to type several commands to boot your
OS. There’s a solution to that — GRUB provides a menu interface
(see ) from which you can select an item (using arrow
keys) that will do everything to boot an OS.

To enable the menu, you need a configuration file,
menu.lst under the boot directory. We’ll analyze an example
file.

The file first contains some general settings, the menu interface
related options. You can put these commands (see ) before any of the items (starting with title
(see )).

     #
     # Sample boot menu configuration file
     #

As you may have guessed, these lines are comments. Lines starting with a
hash character (`#‘), and blank lines, are ignored by GRUB.

     # By default, boot the first entry.
     default 0

The first entry (here, counting starts with number zero, not one!) will
be the default choice.

     # Boot automatically after 30 secs.
     timeout 30

As the comment says, GRUB will boot automatically in 30 seconds, unless
interrupted with a keypress.

     # Fallback to the second entry.
     fallback 1

If, for any reason, the default entry doesn’t work, fall back to the
second one (this is rarely used, for obvious reasons).

Note that the complete descriptions of these commands, which are menu
interface specific, can be found in . Other descriptions can be found in .

Now, on to the actual OS definitions. You will see that each entry
begins with a special command, title (see ), and the
action is described after it. Note that there is no command
boot (see ) at the end of each item. That is because
GRUB automatically executes boot if it loads other commands
successfully.

The argument for the command title is used to display a short
title/description of the entry in the menu. Since title
displays the argument as is, you can write basically anything there.

     # For booting GNU/Hurd
     title  GNU/Hurd
     root   (hd0,0)
     kernel /boot/gnumach.gz root=hd0s1
     module /boot/serverboot.gz

This boots GNU/Hurd from the first hard disk.

     # For booting GNU/Linux
     title  GNU/Linux
     kernel (hd1,0)/vmlinuz root=/dev/hdb1

This boots GNU/Linux, but from the second hard disk.

     # For booting Mach (getting kernel from floppy)
     title  Utah Mach4 multiboot
     root   (hd0,2)
     pause  Insert the diskette now^G!!
     kernel (fd0)/boot/kernel root=hd0s3
     module (fd0)/boot/bootstrap

This boots Mach with a kernel on a floppy, but the root filesystem at
hd0s3. It also contains a pause line (see ), which
will cause GRUB to display a prompt and delay, before actually executing
the rest of the commands and booting.

     # For booting FreeBSD
     title  FreeBSD
     root   (hd0,2,a)
     kernel /boot/loader

This item will boot FreeBSD kernel loaded from the `a‘ partition of
the third pc slice of the first hard disk.

     # For booting OS/2
     title OS/2
     root  (hd0,1)
     makeactive
     # chainload OS/2 bootloader from the first sector
     chainloader +1
     # This is similar to "chainload", but loads a specific file
     #chainloader /boot/chain.os2

This will boot OS/2, using a chain-loader (see ).

     # For booting Windows NT or Windows95
     title Windows NT / Windows 95 boot menu
     root        (hd0,0)
     makeactive
     chainloader +1
     # For loading DOS if Windows NT is installed
     # chainload /bootsect.dos

The same as the above, but for Windows.

     # For installing GRUB into the hard disk
     title Install GRUB into the hard disk
     root    (hd0,0)
     setup   (hd0)

This will just (re)install GRUB onto the hard disk.

     # Change the colors.
     title Change the colors
     color light-green/brown blink-red/blue

In the last entry, the command color is used (see ),
to change the menu colors (try it!). This command is somewhat special,
because it can be used both in the command-line and in the menu. GRUB
has several such commands, see .

We hope that you now understand how to use the basic features of
GRUB. To learn more about GRUB, see the following chapters.

Grub naming conventions

Grub designates disks and partitions as follows:

  1. All disks are designated as hd, whether they are IDE (PATA), SATA or SCSI disks, and whether they would usually be designated using hd or sd.

  2. All disks and partitions are numbered starting with 0 rather than 1.
  3. Extended partitions are counted from 4, regardless of the actual number of primary partitions on the hard disk.
  4. The first number indicates the disk; the second number (if present) indicates the partition.

Examples:

Grub designation

Meaning

Usual designation

(hd0)

First hard disk

/dev/sda (or /dev/hda)

(hd1)

Second hard disk

/dev/sdb (or /dev/hdb)

(hd0,0)

First hard disk, first partition

/dev/sda1 (or /dev/hda1)

(hd1,0)

Second hard drive, first partition

/dev/sdb1 (or /dev/hdb1)

(hd1,1)

Second hard drive, second partition

/dev/sdb2 (or /dev/hdb2)

HDD Image Instructions for OS X users

It might be useful to create an image file for a HDD; The following instructions help you create a HDD with an MBR partition map.
Based on information from <palk> on #osdev, it is slightly more complicated to create a HDD image than you’d expect.

This information might not be applicable to Linux users, who will most probably want to use a loopback device. This is for developers on OS X, which doesn’t
have a loopback device and has a finicky image mounter.

1. First, create a blank, raw image with DD, with the required size. Here, I’ll make a 80MB image — 163840 sectors of 512 bytes.

dd if=devzero of=disk.img count=163840 bs=512

2. For an explaination on calculating the CHS values from the LBA / size see

   Since we have a 80MB disk, the CHS values are 78, 32 and 63 respectively.

3. Fire up FDISK (or your tool of choice) — I’m using the OS X version here, so commands may differ. The concept is essentially identical.

What will show on your screen (in OS X anyway) is on the left, what you enter is on the right.

fdisk -e disk.img
 
 
The signature for this MBR is invalid.
Would you like to initialize the partition table? y           Yes
fdisk:*1>                                                       disk
Disk: disk.img	geometry: 650463 16340 sectors
Change disk geometry? n                                       No
 
 
 
fdisk:*1>                                                       edit 1
Partition id ('0' to disable)   - FF: B (? for help)       0B
Do you wish to edit in CHS mode? n                            No
Partition offset  - 163840: 63                             2047
Partition size 1 - 161793: 161793                           <Enter>
 
 
fdisk:*1>                                                       write
fdisk:*1>                                                       quit

4. Now that the MBR Partition Table is initialised, you’ll want to make a Filesystem on the disk. But first.

   Here, we separate the MBR bit, and the actual FS bit.
dd if=disk.img of=mbr.img bs=512 count=2047
dd if=disk.img of=fs.img bs=512 skip=2047

5. Because we’re on OS X, we need to attach the disk image first, without actually mounting it.

hdiutil attach -nomount fs.img

6. Use ‘diskutil list’ to find out which device your image is, use that below.

7. Now, make a FAT12/16/32 filesystem on the FS.img disk. Remember, use FS.img — not disk.img

newfs_msdos -F 32 devdiskX

8. Now you’ll want to unmount it, then recombine the two images, then install GRUB.

hdiutil detach devdiskX
cat mbr.img fs.img > disk.img
 
hdiutil attach disk.img
# note the mount point here (/Volumes/NO NAME, probably)
 
grub-install --modules="part_msdos biosdisk fat multiboot configfile" --root-directory="/Volumes/NO NAME" disk.img
Installation finished. No error reported.

And there it is! You know have a disk.img, that will have GRUB 2 installed, ready to go. It should be mountable in OS X simply by double clicking (or with the mount command).
Enjoy!

Additional useful options

Whatever device you are using, you may want to have a PC partition table and create a partition you format in one of the filesystems supported by GRUB. If you do, be sure to add the following option the grub-install arguments:

--modules="part_msdos"

In general, if GRUB 2 happens to fail to do what you want and you suspect that it needs some missing functionality, just try to add a module name you believe has the functionality you need to the —modules argument. The module files generally are in /boot/grub/i386-pc/.

Using Syslinux and memdisk

Preparation

Make sure that the USB drive is properly partitioned and that there is a partition with file system supported by Syslinux, for example fat32 or ext4. Then install Syslinux to this partition, see .

Install the memdisk module

The memdisk module was not installed during Syslinux installation, it has to be installed manually. Mount the partition where Syslinux is installed to and copy the memdisk module to the same directory where Syslinux is installed:

# cp /usr/lib/syslinux/bios/memdisk /mnt/boot/syslinux/

Configuration

After copying the ISO files on the USB drive, edit the and create menu entries for the ISO images. The basic entry looks like this:

boot/syslinux/syslinux.cfg
LABEL some_label
    LINUX memdisk
    INITRD /path/to/image.iso
    APPEND iso

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

При отсутствии загрузочного диска, можно восстановить Grub из его консоли. Восстановление происходит следующим образом: сначала нужно подгрузить все модули, чтобы стала доступна вся функциональность Grub, а затем уже запуститься с нужного раздела.
Как известно, Grub состоит из двух частей.
Первая часть записана в MBR диска. Она содержит базовую функциональность, то есть в ней есть консоль в rescue mode и ничего больше. Вначале нужно определить, на каком разделе находится вторая часть груба (она лежит в каталоге /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). Нужно помнить, что в Grub счет дисков начинается с 0, а счет разделов — с 1.
Предположим, что Линукс установлен на первый диск в первый раздел, то есть (hd0,1).
Даем команду:

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

Этими командами мы указываем использовать диск (hd0,1) для дальнейших команд. После чего нужно проверить, действительно ли на этом разделе есть то, что нам нужно. Даем команду:

ls /boot/grub

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

insmod ext2
insmod normal
normal

Проверьте правильность написания первой команды для файловых систем ext3 и ext4

Если ОС расположена на разделе, отформатированном в btrfs,
то выполняем следующие команды:

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

подгружаем модули:

insmod btrfs
insmod normal

запускаем GRUB:

normal

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

Дальнейшее восстановление сводится к тому, чтобы загрузить нужный нам Linux, и в нем от рута дать команду:

grub-install /dev/sdX

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

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

В этой статье мы рассмотрим, как выполняется восстановление Grub2 обоими способами. Начнем с более простого способа — с помощью LiveCD. Хотя и статья ориентирована на Linux Mint, но на самом деле подойдет абсолютно для любого дистрибутива, потому что во всех дистрибутивах загрузчик один и тот же, и команды такие же, только версии могут немного отличаться.

Начнем с того, что вам нужна LiveCD система, той же разрядности, что и ваша система Linux Mint, на которую был установлен Grub

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

А нужны нам только утилиты fdisk, mount и chroot. Чтобы восстановить загрузчик grub2 просто следуйте описанным ниже шагам.

Шаг 1. Загрузка LiveCD

Сначала вставьте носитель с LiveCD системой в дисковод или порт USB, если это флешка. Для загрузки с носителя, возможно, вам сначала понадобится зайти в меню BIOS и выставить приоритет загрузки с внешнего устройства.

Для запуска BIOS нажмите Del, F2, F8 или Shift +F2. В открывшимся меню найдите раздел Boot, и в пункте Boot Device Priority или 1st Boot Device или Boot Option #1 выберите нужное устройство:

Дальше перейдите на вкладку Exit и выберите Exit & Save settings. Дальше начнется загрузка образа.

Шаг 2. Определение разделов

Перед тем как восстановить Grub2, нам нужно понять — на каком разделе установлена система, и на каком разделе были или должны быть файлы загрузчика. Самый простой способ это сделать — воспользоваться утилитой fdisk.

В выводе программы вы видите — разделы всех подключённых к компьютеру дисков, их размер, а также файловую систему. По этим данным вам и предстоит понять, какой раздел используется в качестве корня в вашей системе. Если вы делали разметку вручную, вам не составит труда понять где то, что нужно. Например, у меня корень — /dev/nvme0n1p5 — размером 37 гигабайт, а для загрузчика отдельный раздел не выделялся. Но обычно он тоже имеет файловую систему ext4 ил ext2, а размер до 500 мегабайт. В случае с обычным SSD или HDD диском имя раздела будет начинаться с /dev/sd*. Например: /dev/sda или /dev/sdb и так далее

Шаг 3. Монтирование файловой системы

Теперь вам предстоит смонтировать вашу корневую файловую систему в каталог /mnt:

Кроме того нужно смонтировать раздел boot. Например, если бы он у меня находился по адресу /dev/nvme0n1p1:

Шаг 4. Подготовка к входу в систему

Чтобы восстановить загрузчик Linux мы будем использовать вашу основную систему Linux, запущенную на ядре от LiveCD. Такую возможность предоставляет команда chroot. Но перед тем, как ее использовать нужно вручную подключить к вашей корневой ФС, смонтированной в /mnt все необходимые файловые системы взаимодействия с ядром — /dev, /sys, /proc:

Шаг 5. Вход в окружение системы

Для входа в окружение вашей системы используйте команду:

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

Затем выполните эти команды для загрузки и обновления переменных профиля:

Теперь вы находитесь в Linux Mint, и можете выполнять почти все его программы, разумеется, недоступны сервисы, поскольку во время загрузки не использовалась система инициализации, а также как следствие, недоступно графическое окружение.

Шаг 6. Восстановление Grub2

Теперь восстановление Grub в Linux Mint. Просто выполните следующие команды. Первая, для переустановки загрузчика на жесткий диск:

Здесь /dev/sd* — имя вашего жесткого диска.

Теперь создадим новый конфигурационный файл:

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

Еще можно использовать команду:

Но она работает только в Ubuntu и основанных на ней дистрибутивах.

Создание дополнительного меню загрузки

Суть в том, что вместо уже знакомого «grub.cfg» можно загрузить свой файл настройки загрузочного меню со своей конфигурацией. Это позволяет создать дополнительное меню с другими пунктами, настройками, оформлением и т.д. Итак, создадим наш новый файл конфигурации. Создавать с нуля не будем, а скопируем «grub.cfg», дав новое имя:

sudo cp /boot/grub/{grub,custom}.cfg

Поскольку файл скопируется с правами 444, выставим ему права на запись:

sudo chmod 744 /boot/grub/custom.cfg

Теперь открываем его в любимом текстовом редакторе и изменяем:

sudo gedit /boot/grub/custom.cfg

Если вы в достаточной мере знаете структуру «grub.cfg» и понимаете, какие строки что делают, можно значительно сократить свой файл, убрав лишнее и привести его к более удобочитаемому виду.

  • задаем пункт меню по умолчанию, указав или его номер или точное название.
  • здесь задается разрешение экрана в привычном формате WxH. Можно также указать глубину цвета, например «1024x768x32». можно указать несколько вариантов, при этом если первый не сможет быть установлен, будет загружен второй, если и он не сработает — третий и т.д. Например:

    set gfxmode=1024x768x32,1024x768x24,1024x768
  • Теперь зададим время отображения меню, для этого ищем строку , и устанавливаем значение -1 для отключения таймера.

Для задания фонового изображения найдем строку с (подразумевается, что в вашем «grub.cfg» используется фоновое изображение. Если нет — смотрите пример файла в конце раздела). После команды прописан путь к файлу картинки, поменяйте его на нужный файл.

Обратите внимание, что разрешение картинки должно соответствовать заданному выше разрешению экрана!

Строкой ниже мы можем задать цвета текста. Изменяются они так же, как и в »/etc/grub.d/05_debian_theme« (см. Настройка внешнего вида загрузчика GRUB). Можно проделать один интересный трюк: уберите строки с и теперь настройка будет такой:

  • задает цвет/фон текста сверху и снизу (версия grub и комментарии) и текста в консоли
  • отвечает за цвет пунктов меню и фон прямоугольника, в котором они находятся
  • задает цвет/фон выделенного пункта меню.

Закончив с настройкой, перейдем к пунктам меню, они идут ниже. Измените их, удалите ненужные и добавьте новые, пересортируйте на свой вкус.

Настроив свой файл, сохраните его Ctrl+Shift и закройте.

Теперь необходимо добавить дополнительное меню. Для этого в файле »/etc/grub.d/40_custom« добавим запись такого вида:

menuentry "Название меню"{
configfile /boot/grub/custom.cfg
}

Если ваш путь к файлу отличается — исправьте его.

Если вы используете отдельный boot-раздел, путь будет таким: »/grub/custom.cfg«.
Также учтите, что «40_custom» должен заканчиваться пустой строкой!

Если вы хотите, чтобы ваше новое меню загружалось вместо стандартного «grub.cfg», установите новый пункт в качестве пункта по умолчанию, но перед этим проверьте новое меню на работоспособность.

Обновите свой «grub.cfg» выполнив команду:

sudo update-grub

Теперь пункт перехода в дополнительное меню появится в главном, для того чтобы выйти обратно в главное меню, достаточно нажать Esc

В качестве образца пример файла «custom.cfg» (файл урезан до необходимого минимума):

have_grubenv=true
load_env
 
### выбранный пункт по умолчанию
set default=0
### таймаут меню
set timeout=2
### разрешение
set gfxmode=800x600x32,800x600x24,800x600
 
insmod ext2
search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s
insmod gfxterm
insmod vbe
if terminal_output gfxterm ; then true ; else terminal gfxterm; fi
insmod png
 
### фоновое изображение
background_image /usr/share/images/grub/yellow.png
### настройка цветов
set color_normal=black/black
set menu_color_normal=green/light-blue
set menu_color_highlight=red/blue
 
menuentry "9.10 @ 2.6.32" {
search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s
linux /boot/vmlinuz-2.6.32-020632-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro quiet splash
initrd /boot/initrd.img-2.6.32-020632-generic
}
menuentry "9.10 @ 2.6.32 (recovery)" {
search -u 0e717c2a-24bd-4abe-acfe-ecf98fc814f8 -s
linux /boot/vmlinuz-2.6.32-020632-generic root=UUID=0e717c2a-24bd-4abe-acfe-ecf98fc814f8 ro single 
initrd /boot/initrd.img-2.6.32-020632-generic
}
menuentry "windooz"{
search -u AC9C75E59C75AA8A -s
chainloader +1
}

Troubleshooting

Most of the issues can be resolved by ensuring that the partition layout is correct. Make sure enough space is available before the first partition of the disk, or optionally make sure that a BIOS boot partition is available. Also verify that /boot/grub/grub.cfg was correctly generated with grub-mkconfig, or generate one with a custom menu entry.

For more troubleshooting, please refer to the Troubleshooting sub-article.

Motherboard firmware not finding the .EFI file

Some motherboard manufacturers seem to only support one location for the .EFI file in the EFI System Partition (ESP). If this seems to be the case, simply move GRUB’s default file to the /efi/boot/ location. First, make sure the ESP is mounted. Presuming the ESP is mounted at /boot/efi (as suggested in the Handbook), execute:

You can also use the removable parameter with grub-install command to generate this file automatically:

Installation finished. No error reported.

This should aid the motherboard firmware in loading the GRUB executable. Reboot the system to see if the firmware now correctly loads GRUB.

os-prober and UEFI in chroot

Run these commands in the host environment to provide the required files (example shows Gentoo mounted on /mnt/gentoo like in the Handbook):

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *