How to update grub2 using grub2-editenv and grubby in rhel 8 linux

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

Начнем с того, что вам нужна 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. Дальше начнется загрузка образа.

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

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

mount /dev/nvme0n1p5 /mnt

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

mount /dev/nvme0n1p1 /mnt/boot

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

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

chroot /mnt /bin/bash

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

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

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

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

sudo grub2-install /dev/sd*

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

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

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

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

GRUB2. Восстановление. Запуск системы.

текст гласил: «Поддерживается несколько BASH-подобных команд редактирования строки. Есть вывод списка команд по TAB для дополнения. Также есть везде, где возможно, вывод списка по TAB для устройств или файлов. «

Ну, и собсна,строка «grub> «

По логике вещей стало понятно,что похоже накрылось что-то в загрузчике GRUB. На тот момент я знал о загрузчке:

а) он загружает (что-то. Наверное,систему)

б) он называется GRUB

в) может загружать разные ОС

Все. Да и сейчас не рсбо больше знаю.

Методом проб и ошибок систему я запустил.

2) Восстановление загрузчика.

linux /boot/vmlinuz(здесь указываем полное название ядра,а не просто «vmlinuz») root=/dev/sdaY

initrd /boot/initrd(указываем соответственно ядру, и опять же полное название включая расширение)

Те кто шпаргалку не понял. листайте ниже. там объяснения и фото.

Эта команда возвратит известные диски и разделы.

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

На вариантах hd0,5 и hd0,1 команда выдала, что на данных разделах имеется файловая система ext. Значит на одном из них и должна находиться наша система.

Проверить можно также командой ls. Добавив после раздела слэш.

Команда возвратила название каталогов (папок) находящихся на этом разделе. Среди них есть каталог Boot, который нам и нужен.

Но еще неплохо бы узнать какой именно загрузчик у нас. GRUB или GRUB2. Каталог должен находиться в Boot, поэтому вновь воспользуемся командой ls немного ее дополнив

Тут мы видим каталог grub2, а также видим два ядра(vmlinuz) и два файла initrd соответствующих ядрам. Это очень нужная информация!

Дальше мы, используя команду set prefix, устанавливаем префикс и корневой раздел

Указываем путь к файловой системе

загружаем модуль загрузки linux

Теперь нам надо загрузить ядро. У меня их почему-то два. Выбирал наугад.

linux /boot/vmlinuz-4.15.0-desktop-47.2rosa-x86_64 root=/dev/sda1

В конце обязательно указываем root-раздел

В интернетике пишут,что полное название ядра можно не указывать. Можно ограничиться записью вида:

Но у меня почему-то такой вариант не проходил ни в какую. До тех пор пока не указал имя ядра полностью. Может из-за того,что ядра два?!

Теперь выбираем образ инит-диска(еще б мне кто объяснил что такое вообще)

Указывают, что выбор инит-диска можно записать короче

У меня такой вариант не прошел.

Ну-с и последнее. загрузка.

После того как загрузитесь не забудьте установить GRUBcustomizer и поправить свой загрузчик. А то вся это пляска будет при каждой загрузке.

Система Ubuntu не загружается

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

  1. Первое самое очевидное — у вас сломался жесткий диск, на который установлена система. Тут все ясно и починить вряд ли что-то получится. Надо менять диск и переустанавливать на новый диск систему. Далее не буду рассматривать этот случай.
  2. Возникли проблемы с загрузчиком grub, который запускается перед загрузкой основной системы. Вы в него попадаете, но дальше видите какие-то ошибки, чаще всего связанные с тем, что не найден корневой раздел системы, поэтому загрузка невозможно. С этими же проблемами вы можете оказаться в режиме recovery mode, где можно выполнить какие-то действия.
  3. У вас поврежден загрузчик, с которого начинается загрузка системы после старта компьютера. Это небольшая область в начальных секторах жесткого диска. Если с загрузчиком проблемы, то загрузка даже не начинается и вы сразу получаете ошибку на тему того, что с данного жесткого диска невозможно загрузиться.

Далее я отдельно рассмотрю второй и третий случаи. Начнем со стандартного режима восстановления grub.

Interview

  • Q: Tell us about Rescatux. Where, how and why?
  • A: Before Grub2 was the norm there was Grub which was able to edit minimally your system (install grub on the mbr). I develop a GUI around it named Super Grub Disk, later on I improved it by modifying its source code. But then Grub2 started to be used by default in many distributions. Super Grub2 Disk was born, a GUI around Grub2 but, guess what, it couldn’t install grub on the mbr. So a live cd was needed and I started to tinker with Rescatux around 2010.
  • Q: For those people that still do not know Rescatux, can you please explain what Rescatux is?
  • A: It’s a Debian GNU/Linux based live cd aimed at rescue tasks. It features Rescapp a graphical wizard for helping to recover your system.
  • Q: Why did you choose the Rescatux name?
  • A: In Spanish it might mean Rescate Linux. And in English Rescue a Tux computer. I also wanted one single name (contrary to the three words from Super Grub2 Disk).
  • Q: Who’s in charge of the development?
  • A: Most of the development is done by me, adrian15. Many people have helped all along these almost ten years.
  • Q: What’s the Rescatux target audience?
  • A: GNU/Linux newbies such as Ubuntu users in 2015 and MX Linux users in 2020. It’s also targeted to repair technicians and, of course, distro hoppers.
  • Q: What are the main difficulties on developing Rescatux?

    • A1: Lack of time.
    • A2: When I’m able to build on Debian 9, then Debian 10 appears and I have to rethink all of it.
    • A3: live-build, one of the Debian tools for making live cds was not as good as I needed it to be and I needed to improve it, then push back the changes to upstream.
    • A4: Getting useful feedback from people who uses Rescatux (even having an integrated chat) is difficult.
    • A5: Nobody has steped in to add CI/CD and check if Rescatux always fixes the same problems. We would need something similar to what ReactOS and Tails do on their projects.
    • A6: Lack of contributors. This is not a tool where, as a developer, you can learn useful skills for your everyday work unless you are GNU/Linux repair technician.
    • A7: I prefer QT but Gparted, Firefox and other projects are based on GTK and make Rescatux iso slightly bigger.
    • A8: UEFI, Secure Boot and what not. We live in a time where old BIOS systems and new UEFI systems are available. Both need to be supported and also Secure Boot. And trying to test Secure Boot in a virtual machine is not easy. You cannot use Virtualbox but you need to setup and user KVM/Qemu in special ways. And many UEFI firmwares are not very well programmed.
  • Q: What are the main collaborations or help you received on Rescatux ?
  • A: The most recent contributor is cjg67 which helped a lot on improving written English in Rescapp. It’s also nice that many Linux magazines write articles about it and even record DVDs with Rescatux in them.
  • Q: Can you tell us anything about the Rescatux future?
  • A: Rescapp, the main Rescatux program is stable. It might need some options reorganisation (feedback is welcomed) or some documentation rewriting. But it is stable. My mid term goal on Rescatux is bringing back my work on live-boot, live-build, liveid, chntpw (which I will fork), and rescapp back to Debian. If one such goal is achieved one could be able to install rescapp on a Debian live cd thanks to the apt-get command.

Installation

Due to the way GRUB Legacy (grub-0.97) and GRUB2 were slotted in Gentoo, both versions of GRUB may be installed on the same system at the same time; however, only one version at a time may be installed in the Master Boot Record (MBR) of a hard drive.

It is recommended all systems should upgrade to GRUB2, since it supports all the same features sets as Legacy. Legacy was removed from the Gentoo ebuild repository.

Prerequisites

To control which platforms GRUB will install for, set the GRUB_PLATFORMS variable in make.conf. The amd64 architecture includes a profile default which works for most systems.

FILE Example of setting the GRUB_PLATFORMS variable for EMU, EFI, and PC platforms

GRUB_PLATFORMS="emu efi-32 efi-64 pc"

The following platforms are supported depending on the target CPU:

Target
Platform i386 ia64 mips mipsel powerpc sparc64 x86_64
ARC No No No Yes No No No
Coreboot Yes No No No No No 32-bit
EFI Yes Yes No No No No Yes
EMU Yes Yes Yes Yes Yes Yes Yes
IEEE 1275 (Open Firmware) Yes No No No Yes Yes 32-bit
Loongson No No No Yes No No No
Multiboot Yes No No No No No 32-bit
QEMU Yes No No No No No 32-bit
QEMU-MIPS No No Yes No No No No
PC Yes No No No No No 32-bit

NoteWhenever the values in the GRUB_PLATFORMS variable are adjusted GRUB will need to be re-emerged in order to build the changed binary. Be sure to use the options as shown in the below.

The amd64 profiles enable support for (U)EFI functionality by default. When using a BIOS-based system, set GRUB_PLATFORMS variable to to avoid unneeded dependencies.

Enable support for device-mapper from sys-fs/lvm2
Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
Build and install the efiemu runtimes
Build and install fonts for the gfxterm module
Enable support for sys-fs/zfs
Build and install the grub-mount utility
Add Native Language Support (using gettextGNU locale utilities)
Add support for Simple Direct Layer (media library)
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
Build and install GRUB themes (starfield)
Build and install grub-mkfont conversion utility

Extended features

GRUB 2 has many features that make it a very powerful boot loader. It supports:

  • Booting from UEFI platforms.
  • Booting from GPT partitioned drives without needing a hybrid MBR (hybrid MBR can enabled as needed for compatibility or portability).
  • Booting from a btrfs formatted /boot partition.
  • Booting from a ZFS pool.
  • Booting directly from a btrfs raid set without needing an initramfs for early mount setup.
  • Booting directly from logical volume management (such as LVM2).
  • Booting with support for DM-RAID (RAID 0, 1, 4, 5, 6, 9 and 10).
  • Booting from encrypted devices (LUKS).

Some specific features are explained in more detail next.

Chainloading

GRUB 2 was built with a truly improved chainload mode when compared to GRUB Legacy. To chainload another boot loader, use the option.

FILE Chainloading another bootloader

menuentry "Custom Super-bootloader example" {
     insmod part_msdos
     insmod chain
     chainloader (hd1,1)+1
}

For more information on chainloading, please see the Chainloading sub-page.

Password protection of GRUB menu

If you want to secure GRUB so it is not possible for anyone to change boot parameters or use the command line, you can add a user/password combination to GRUB’s configuration files. The program grub-mkpasswd-pbkdf2 generates password hashes for GRUBː

Then, add the following toː

FILE

# Grub user
echo 'set superusers="username"'
# Grub password
echo 'password_pbkdf2 <username> <password>'

Using framebuffer display

To have GRUB use a framebuffer graphical display, re-emerge GRUB with the USE flag enabled. This will install a default True Type font as well as a font conversion utility.

Proceed to configure the default configuration file located at /etc/default/grub. For example:

FILE Framebuffer related settings

# Set resolution and color depth
GRUB_GFXMODE=1366x768x32
 
# Keep resolution when loading the kernel
GRUB_GFXPAYLOAD_LINUX=keep
  
# Set a background image
GRUB_BACKGROUND="/boot/grub/bg.png"
 
# Use a custom font, converted using grub-mkfont utility
GRUB_FONT="/boot/grub/fonts/roboto.pf2"
 
# Set the menu colors 
GRUB_COLOR_NORMAL="light-blue/black"
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

Немного теории

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

Загрузчик может быть установлен в различные таблицы разделов диска. Сейчас самые используемые это GPT и MBR. Установка загрузчика Grub немного отличается для каждой из этих таблиц, учитывая их особенности. Подробнее об отличиях MBR vs GPT можно почитать в отдельной статье. Тут же я скажу, что GPT — более новая и функциональная таблица разделов, MBR — уже устаревшая, но до сих пор часто используемая.

В MBR вариантов немного, Grub записывается в область MBR на диске. Размер сектора MBR занимает первых 512 байт и этого вполне достаточно для того, чтобы установить туда загрузчик.

GPT предоставляет более широкие возможности. Во-первых, для совместимости в GPT эмулируется сектор MBR, и мы можем установить GRUB туда, но такой вариант очень ненадежный и не рекомендуемый. Во-вторых, теперь появилась возможность устанавливать Grub на раздел диска. Мы просто создаем раздел на диске размером 1 Мб и записываем туда то, что раньше записывалось в MBR, это делает установку загрузчика более надежной и защищенной от сбоев.

UEFI предоставляет совсем иной способ установки загрузчика. Тут его не нужно никуда записывать, загрузчик — это обычное приложение EFI, которое помещается на раздел EFI и уже там полностью успешно работает наряду с другими приложениями.

Для установки Grub будет использоваться команда grub-install, во всех случаях. Давайте кратко рассмотрим ее синтаксис и параметры. Синтаксис:

$ grub-install опции диск

Параметров здесь достаточно много, но нам будут нужны только некоторые:

  • —compress — сжать файлы загрузчика;
  • —install-modules=модули — установить только эти модули;
  • —modules — записать эти модули в MBR;
  • —boot-directory — использовать другой каталог для файлов Grub;
  • —bootloader-id — имя загрузчика в меню EFI;
  • —core-compress — сжимать образ, загружаемый в MBR;
  • —efi-directory — использовать системный раздел EFI;
  • —force — установить несмотря на ошибки;
  • —recheck — удалить существующую карту устройств, помогает если возникают ошибки;
  • —removable — установка grub на флешку (только EFI);

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

Update GRUB2 using grub2-mkconfig

The older method of achieving this behaviour is still possible, but the existing value will need to be unset first:

# grep GRUB_CMDLINE_LINUX /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet"

Here I will update in the GRUB2 configuration file

# grep GRUB_CMDLINE_LINUX /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet ipv6.disable=1"

But as you see the existing kernelopts reflects old GRUB2 entry, so if we reboot the node or rebuild our GRUB2 then the new changes will not reflect on the node.

# grub2-editenv - list | grep kernelopts
kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet

So we need to unset the kernelopts which is an additional step here:

Advertisement

# grub2-editenv - unset kernelopts

next rebuild the grub configuration

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done

Next re-verify

# grub2-editenv - list | grep kernelopts
kernelopts=root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet ipv6.disable=1

So our changes are visible as expected.

Настройка Grub через /boot/grub/grub.cfg

Файл /etc/boot/grub/grub.cfg управляет непосредственно работой загрузчика, здесь указаны все его параметры и настройки, а также сформировано меню. Поэтому, изменяя этот файл, мы можем настроить Grub как угодно. Сначала попытаемся разобраться с синтаксисом файла. Он очень напоминает синтаксис bash и состоит из нескольких команд, которые что-то делают, загружают и настраивают.

Команды могут быть объединены в функции или блоки с помощью инструкций if else, синтаксис которых аналогичен bash. Рассмотрим основные из этих команд:

  • load_env — загрузить переменные окружения из файла;
  • set — установить значение переменной окружения. Используется как set имя_переменной=значение;
  • insmod — загрузить модуль из папки с модулями Grub;
  • linux — загружает ядро Linux;
  • initrd — подготавливает образ initrd для загрузки ядра;
  • boot — пытается загрузить систему;
  • chainloader — запускает загрузчик из другого раздела;
  • search — установить значение переменной выполнив поиск по заданным параметрам, например, может найти диск по его UUID или метке;
  • menuentry — позволяет создать пункт меню;

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

Команда search используется для поиска дисков и имеет такой синтаксис:

$ search опции_поиска —set=имя_переменной —hint приметы_устройства основной_параметр

  • Опции поиска задают по какому критерию нужно искать, например, —fs-uuid — искать по UUID, —label — по метке, —no-floppy — не искать в схемных носителях.
  • Приметы устройства дают программе дополнительные подсказки для более быстрого поиска;
  • Основной параметр — значение, по которому будем выполнять поиск.

Например, команда может выглядеть вот так:

Вторая команда, которая нам очень понадобится, это menuentry. Она используется для создания пунктов меню, с помощью которых будут загружаться операционные системы и дистрибутивы linux. Синтаксис этой команды такой:

menuentry имя_пункта {команды установки переменных окружениязагрузка модулейlinux файл_ядра параметры_ядраinitrd файл_initrd}

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

Теперь давайте попробуем собрать всю информацию воедино и создадим самый просто конфигурационный файл для Grub вручную:

# Время показа меню 5 секунд

set timeout=5

# Установим разрешение экрана и укажем что это же разрешение нужно сохранять для ядра:

set gfxmode=»1280×800″
set gfxpayload=keep

# Загрузим необходимые модули для работы видео режима, нужно для использования фоновой картинки

insmod vbe
insmod gfxterm
terminal_output gfxterm

# Установка шрифта с поддержкой Unicode:

font «/boot/grub2/fonts/unicode.pf2»
loadfont unicode

# Загрузим модуль работы с jpeg и зададим фоновый рисунок:

insmod jpeg
background_image «/boot/fon.jpg»

# Установим переменные окружения для настройки цвета меню:

set menu_color_normal=red/black
set menu_color_highlight=yellow/black
set color_normal=yellow/black

menuentry «Ubuntu» {
root=(hd0,1)
linux /casper/vmlinuz boot=casper noeject noprompt splash
initrd /casper/initrd.lz
}

menuentry «OpenSUSE» {
insmod gzio
insmod part_msdos
insmod ext2
set root=’hd0,msdos5′
linux /boot/vmlinuz-4.1.31-30-default root=UUID=c52ca066-e48f-4df2-bc7e-4d885a354090 resume=/dev/sda7 splash=silent quiet showopts
initrd /boot/initrd-4.1.31-30-default
}

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

Программа настройки Grub — это хорошо, но также важно понимать как все работает на низком уровне

Редактирование GRUB на Ext4 из под Windows

Дано: Windows XP Ubuntu 11.04, установленная на файловую систему Ext4 Собственно, сам загрузчик GRUB, настроенный на загрузку Windows.

Готовим конфигурационные файлы GRUB Чтобы удаленно перезапустить машину в из Windows в Linux, не имея возможности при старте выбрать операционную систему в списке, сделаем две версии файла /boot/grub/grub.cfg, в каждом из которых будет настроена на запуск только одна ОС. Для этого откроем файл /etc/default/grub, найдем в нем строчку grub_default и выставим значение нужной операционной системы — например, у меня это цифра 5 для Windows и 0 для Ubuntu (0 — первая строчка в загрузочном окне, 1 — вторая и т.д.). Сохраняем файл, после чего перезапускаем GRUB командой update-grub. В этот момент файл /boot/grub/grub.cfg заново создается в системе. Получившийся файл сохраняем в любое удобное место, и повторяем редактирование строки grub-default, но уже для другой ОС. Обновляем груб командой и сохраняем второй экземпляр файла. Главное — определиться, какой файл относится к какой операционной системе.

Ext2Fsd – инструмент для работы с Ext Итак, две версии настроек загрузчика готовы, но чтобы их забросить из Windows на раздел Ext4, необходима программа-драйвер, такая как Ext2Fsd. Скачать последнюю версию 0.51 можно с официального сайта http://www.ext2fsd.com/. Перезагружаемся в Windows и устанавливаем скачанную программу.

После установки ставим запускаем программу, назначаем разделу с линуксом любую букву (пункт «Change Drive Letter»), и выбираем после в контекстном меню «Ext2 Management» (Клавиша F3), где снимаем галочку «Только для чтения».

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

Далее пользуемся обычным проводником XP — находим созданный ранее файл grub.cfg, отвечающий за загрузку Linux, и заменяем им файл, лежащий в каталоге /boot/grub/grub.cfg.

После этого я на всякий случай отключаю запись на диск с линуксом (снова ставлю галочку «Только чтение»), и спокойно перезапускаю компьютер. Теперь при перезагрузке автоматически запустится linux. Ждем минуту и подключаемся любимым клиентом — VNC, SSH и т.д.

Все, можно работать в нужной операционной системе!

Настройка Grub через /boot/grub/grub.cfg

Файл /etc/boot/grub/grub.cfg управляет непосредственно работой загрузчика, здесь указаны все его параметры и настройки, а также сформировано меню. Поэтому, изменяя этот файл, мы можем настроить Grub как угодно. Сначала попытаемся разобраться с синтаксисом файла. Он очень напоминает синтаксис bash и состоит из нескольких команд, которые что-то делают, загружают и настраивают.

Команды могут быть объединены в функции или блоки с помощью инструкций if else, синтаксис которых аналогичен bash. Рассмотрим основные из этих команд:

  • load_env — загрузить переменные окружения из файла;
  • set — установить значение переменной окружения. Используется как set имя_переменной=значение;
  • insmod — загрузить модуль из папки с модулями Grub;
  • linux — загружает ядро Linux;
  • initrd — подготавливает образ initrd для загрузки ядра;
  • boot — пытается загрузить систему;
  • chainloader — запускает загрузчик из другого раздела;
  • search — установить значение переменной выполнив поиск по заданным параметрам, например, может найти диск по его UUID или метке;
  • menuentry — позволяет создать пункт меню;

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

Команда search используется для поиска дисков и имеет такой синтаксис:

$ search опции_поиска —set=имя_переменной —hint приметы_устройства основной_параметр

  • Опции поиска задают по какому критерию нужно искать, например, —fs-uuid — искать по UUID, —label — по метке, —no-floppy — не искать в схемных носителях.
  • Приметы устройства дают программе дополнительные подсказки для более быстрого поиска;
  • Основной параметр — значение, по которому будем выполнять поиск.

Например, команда может выглядеть вот так:

Вторая команда, которая нам очень понадобится, это menuentry. Она используется для создания пунктов меню, с помощью которых будут загружаться операционные системы и дистрибутивы linux. Синтаксис этой команды такой:

menuentry имя_пункта {команды установки переменных окружениязагрузка модулейlinux файл_ядра параметры_ядраinitrd файл_initrd}

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

Теперь давайте попробуем собрать всю информацию воедино и создадим самый просто конфигурационный файл для Grub вручную:

# Время показа меню 5 секунд

set timeout=5

# Установим разрешение экрана и укажем что это же разрешение нужно сохранять для ядра:

set gfxmode=»1280×800″
set gfxpayload=keep

# Загрузим необходимые модули для работы видео режима, нужно для использования фоновой картинки

insmod vbe
insmod gfxterm
terminal_output gfxterm

# Установка шрифта с поддержкой Unicode:

font «/boot/grub2/fonts/unicode.pf2»
loadfont unicode

# Загрузим модуль работы с jpeg и зададим фоновый рисунок:

insmod jpeg
background_image «/boot/fon.jpg»

# Установим переменные окружения для настройки цвета меню:

set menu_color_normal=red/black
set menu_color_highlight=yellow/black
set color_normal=yellow/black

menuentry «Ubuntu» {
root=(hd0,1)
linux /casper/vmlinuz boot=casper noeject noprompt splash
initrd /casper/initrd.lz
}

menuentry «OpenSUSE» {
insmod gzio
insmod part_msdos
insmod ext2
set root=’hd0,msdos5′
linux /boot/vmlinuz-4.1.31-30-default root=UUID=c52ca066-e48f-4df2-bc7e-4d885a354090 resume=/dev/sda7 splash=silent quiet showopts
initrd /boot/initrd-4.1.31-30-default
}

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

Программа настройки Grub — это хорошо, но также важно понимать как все работает на низком уровне

Очередность действий

Если нужен суперфункциональный компьютер с работоспособным загрузчиком, вам заранее нужно побеспокоиться о правильной последовательности установки каждой из ОС. Ведь если поставить ту же Vist’у последней, то загрузчик Ubuntu, GRUB, будет стерт с MBR. XP просто не устанавливается поверх Vista, посему она не может быть оставлена напоследок. Исходя из сказанного, все действия производятся на компьютере в следующем порядке:

1) Windows XP. Устанавливается на диск с загрузочным сектором. Все загрузчики в последующем будут автоматически устанавливаться на раздел с этой меткой. Как узнать, на каком диске она находится? В этом помогут специализированные программы для работы с дисковой подсистемой — Norton Partition Manager, Acronis Disc Director, Acronis Partition Expert и многие другие.

Диск, отмеченный как «Active», обязательно имеет загрузочный сектор.

2) Windows Vista. Устанавливаем ее на диск, отличный от того, где расположена XP. После инсталляции Vista в загрузочном меню должны присутствовать два пункта: собственно, Vista и «Earlier operating systems» («Предыдущая операционная система»), под которой подразумевается XP. То есть, если XP была установлена до Vista, она успешно будет определена и добавлена в список.

3) Ubuntu (это правило применимо к любой ОС семейства Linux). Поскольку данная операционная система ставится последней, то загрузчик, устанавливаемый ею, станет основным. На последнем этапе установки Ubuntu не меняйте настройки (кнопка «Advanced»), чтобы GRUB, как и положено, установился на диск с загрузочной меткой.

Нужно сказать, GRUB весьма «толерантен» по отношению к своим «конкурентам»: он корректно определяет имеющиеся на компьютере системы и вносит их в собственный список. При наличии XP и Vista GRUB не удаляет загрузчик Windows. И при выборе пункта меню, который идет после надписи «Other operating systems» («Windows Vista/Longhorn loader»), появится второй экран, где можно выбрать одну из ОС Windows.

Впоследствии созданный GRUB’ом список можно подкорректировать, поменяв названия, удалив лишние пункты загрузки или сменив их очередность. Благо, документация к GRUB присутствует в достаточном объеме. Общими словами, это отлично конфигурируемый, документированный, user-friendly (дружелюбный по отношению к пользователю) загрузчик.

Где скачать и как установить Груб

Исходники GRUB можно скачать с сервера ftp://alpha.gnu.org/pub/gnu/grub. 
Далее распакуйте скачанный дистрибутив, используя команду “tar -xvzf filename.tar.gz”. Если взять в расчет название файла grub-
0.5.96.1.tar.gz, перечень операций будет выглядеть следующим образом: 

Итак, мы распаковали содержимое в директорию под названием “grub-0.5.96.1”. Выполняем следующие шаги:

Можно изменить определенные опции в процессе компиляции: 

При этом отобразятся все доступные опции. Можно использовать префикс –enable или -
disable
, что обеспечивает поддержку определенных устройств загрузчиком.  

Чтобы начать компилирование, введите

Установка происходит после ввода следующей команды: 

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

Суть в том, что вместо уже знакомого «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
}
Добавить комментарий

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

Adblock
detector