Как найти загрузчик grub

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

Раньше для загрузки Linux использовалось несколько загрузчиков, это isolinux, lilo, grub. Но сейчас чаще всего применяется Grub или полное его название GRand Unified Bootloader. В этой статье будет рассмотрена установка загрузчика Grub через терминал. Также мы поговорим как установить grub на компьютер с UEFI, тоже вручную.

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

Как я уже сказал, основная задача загрузчика — предоставить возможность выбора операционной системы перед загрузкой. Не думайте, что в 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 окружения этой системы.

Установка загрузчика Grub в MBR для BIOS

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

sudo grub-install /dev/sda

Или:

sudo grub2-install /dev/sda

Утилиты grub в разных дистрибутивах могут включать двойку, а могут и не включать. Здесь /dev/sda — ваш жесткий диск. Теперь генерируем конфигурационный файл, чтобы автоматически определились установленные операционные системы:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Или:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Готово. По поводу двойки здесь такое же замечание. Если вы хотите установить Grub на флешку в MBR, то тут тоже нет проблем просто примонтируйте флешку и выполните такую команду:

sudo grub-install --root-directory=/mnt/USB/ /dev/sdb

Здесь /mnt/USB — папка, куда была смотирована ваша флешка, а /seb/sdb — сама флешка. Только здесь есть одна проблема, конфигурационный файл придется делать вручную.

Установка загрузчика Grub в GPT для BIOS

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

Нужный нам раздел можно создать в установщике любого дистрибутива, если вы выполняете установку в графическом интерфейсе или с помощью gparted. Нам нужен раздел размером 1 Мегабайт без файловой системы и с меткой grub_bios:

grub

Дальше примените изменения, нажмите на разделе правой кнопкой, выберите manage flags и добавьте флаг grub_bios:

grub1

Готово. Если у вас нет под рукой доступа к графическому интерфейсу, вы можете создать такой раздел через терминал. Утилита fdisk не поддерживает работу с gpt, поэтому будем использовать gfdisk. Сначала запустите утилиту:

sudo gdisk /dev/sda

grub2

Чтобы создать новый раздел нажмите n и выберите номер раздела:

grub3

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

grub4

Выбираем конечный сектор раздела. По умолчанию будет использоваться максимальный. Нам нужен раздел размером 1 Мб. Размер одного сектора GPT — 512 байт, поэтому нам нужен раздел размеров 2048 секторов. Таким образом, конечный сектор будет 24000 с чем-то.

grub5

HEX Code — это тот код, который скажет системе, что этот раздел нужно использовать для Grub, нужно установить ef02:

grub6

Готово, осталось нажать w для записи изменений на диск:

grub7

Установка grub на жесткий диск дальше выполняется точно так же, как и в предыдущем способе:

sudo grub-install /dev/sda

Осталось создать конфигурационный файл grub:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Теперь переходим к самому сложному, как установить grub efi.

Установка GRUB UEFI GPT

Установка Grub UEFI чем-то похожа на установку в GPT, тут у нас тоже будет отдельный раздел, только на этот раз не для загрузчика, а раздел EFI. Если у вас уже установлена Windows, то, скорее всего, он уже существует. Этот раздел обычно занимает 100 Мб, имеет файловую систему fat32 и флаг ESP. Вот так он будет выглядеть:

grub11

Если же такого раздела нет, мы можем его создать с помощью gparted. Для этого создаем раздел с такими параметрами:

grub9

Размер 100 Мегабайт, имя раздела ESP, файловая система fat32. Дальше примените изменения и установите для раздела флаг ESP:

grub10

То же самое вы можете сделать в Gdisk, только на этот раз нужно устанавливать HEX Code раздела ef00. После того как раздел был создан, подключаем его к нашей файловой системе:

sudo mkdir /boot/efi
$ sudo mount /dev/sda2 /boot/efi

Здесь /dev/sda2 — это наш EFI раздел. Далее необходимо установить нужные пакеты, если они еще не установлены. В Ubuntu это будет выглядеть вот так:

sudo apt install grub-efi efibootmgr

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

grub-install /dev/sda

Установка Grub efi на MBR все выглядит точно так же, только тут есть несколько ограничений. Раздел ESP нужно создавать только в начале диска. В режиме EFI тоже можно установить GRUB на флешку, и это не очень сложно. Для этого используется команда:

grub-install --boot-directory=/mnt/sdb2/boot --efi-directory=/mnt/sdb1 --target=x86_64-efi --removable

Рассмотрим опции: —boot-directory — задает папку с файлами загрузчика на флешке, —efi-directory — папка куда смонтирован раздел efi, —target — архитектура целевой системы и —removable говорит, что это установка на съемный носитель. С UEFI все. После перезагрузки и выбора в меню EFI пункта связанного с Grub, вы получите доступ к привычному меню grub и сможете выбрать нужный параметр.

Выводы

Теперь установка Grub не вызовет у вас проблем. Мы разобрали не только как установить Grub2 в MBR но и в EFI. Кроме того, всю приведенную здесь информацию вы можете использовать для восстановления Grub. Так вы будете лучше понимать что происходит во время восстановления. А настройку параметров и ручное создание конфигурационного файла мы рассмотрим в одной из следующих статей.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Ссылки по теме

  • Процесс загрузки Arch
  • Главная загрузочная запись
  • Таблица разделов GUID
  • Unified Extensible Firmware Interface (Русский)
  • GRUB Legacy (Русский)
  • GRUB/EFI examples

GRUB (GRand Unified Bootloader) — мультисистемный модульный программируемый кроссплатформенный загрузчик с поддержкой сети, множества файловых систем, таблиц разделов, логических томов, образов и архивов.

Текущая версия GRUB — GRUB 2 — не использует код старой ветки GRUB 0.9x (GRUB Legacy) и создана на основе проекта PUPA.

Предисловие

Релиз GRUB-2.00 уже вышел, но разработка продолжается. В репозиториях Arch Linux появляюся самые свежие, в том числе и бета-версии GRUB, поэтому переустанавливать загрузчик (командой grub-install) и особенно обновлять файл конфигурации (командой grub-mkconfig) следует с осторожностью.

Если вы хотите стабильности — не переустанавливайте без необходимости загрузчик и не запускайте генератор конфига. Пакет grub сам по себе содержит лишь утилиты и файлы, необходимые для установки и настройки загрузчика, и обновления пакета не затрагивают загрузчик. Однако, существует некоторый риск в отношении файла grub.cfg, см. Защита конфигурации.

Если вы не хотите использовать GRUB2, можно установить GRUB Legacy из AUR.

Замечание для текущих и бывших пользователей GRUB Legacy

  • Для пользователей, непривычных к шелл-коду, в GRUB2 существует утилита grub-mkconfig уровня ОС, для автоматического создания файла конфигурации загрузчика с типовым меню.
  • Однако и без автоматического конфигуратора настройка GRUB2 не сложнее, чем GRUB Legacy.
  • Обозначения устройств в GRUB2 отличаются от таковых в GRUB Legacy. Разделы теперь нумеруются с 1 (как в Linux), а диски по-прежнему с 0. Например, первый раздел первого диска в GRUB2 обозначается как hd0,1.
  • Существуют различия между командами GRUB Legacy и GRUB2. Подробнее о командах можно прочесть в этой статье и в официальном руководстве по GRUB2.
  • GRUB2 теперь модульный, и не имеет постоянных образов stage1_5 и stage2. Роль stage1_5 в GRUB2 играет образ core.img/core.efi, при каждой установке загручика собираемый из ядра GRUB2 и модулей, необходимых для доступа к файловой системе. Остальные модули загружаются из ФС по мере надобности, расширяя функциональность загрузчика.

Требования к диску

Загрузчик в BIOS

Сама по себе BIOS, как правило, не требует наличия на диске каких-либо таблиц разделов.

Примечание: Некоторые реализации BIOS могут проверять содержимое MBR, чтобы определить тип носителя (особенно это относится к USB-дискам и флешкам). Носитель без MBR, или носитель с очень маленьким первым (по номеру) разделом типа FAT, может быть ошибочно принят некоторыми версиями BIOS за USB-флоппи-дисковод, что может сделать невозможной нормальную загрузку с него.

Примечание: Некоторые реализации BIOS могут отказаться запускать код загрузчика, если ни один из разделов MBR не отмечен флагом «bootable». Несмотря на это, BIOS может запустить код загрузчика только из бут-сектора диска (сектор MBR), но не раздела, а после запуска кода GRUB уже не важно, на какой из разделов установлен флаг.

Участие BIOS в процессе загрузки сводится к считыванию с диска его начального сектора размером в 512 байт, проверке наличия в конце сектора сигнатуры 55AA, и запуску содержимого как исполняемого кода. Так как в 512 байт невозможно уместить сколь-нибудь сложную программу, единственное, что может сделать код начального сектора – загружать с диска другие сектора, на чтение файлов он не способен.

Поэтому, для успешной загрузки в режиме BIOS, используемый способ разметки диска должен предусматривать:
1) встраивание кода загрузчика в начальный сектор;
2) выделение на диске специальной, не занятой файловыми системами области (группы секторов), из которой будет загружаться стартовый образ загрузчика, умеющий читать хотя бы одну файловую систему.

Программа установки GRUB2 умеет встраивать код BIOS-версии загрузчика на диски с таблицами разделов MBR и GPT, которые удовлетворяют обоим требованиям.

В обоих случаях, для встраивания используются два образа:

  • boot.img, код которого встраивается в начальный сектор диска,
  • core.img, собираемый программой установки из ядра GRUB и модулей доступа к используемой на диске таблице разделов и файловой системе.

Требования GRUB2-BIOS к MBR

Сама по себе таблица разделов на диске с разметкой MBR занимает 68 байт в конце начального сектора диска, последние два байта занимает «загрузочная» сигнатура 55AA. Оставшиеся 442 байта с начала сектора – и есть то место, в которое встраивается код загрузчика из образа boot.img.

Для встраивания образа загрузчика core.img на диск с MBR, используется промежуток между начальным сектором с MBR и самым первым (по расположению) разделом. Если ближайший к началу диска раздел начинается с сектора 63 или больше,

# fdisk -l /dev/sda
...
Device    Boot     Start       End    Blocks  Id System
/dev/sda1             63   2120579   1060258+ 82 Linux swap / Solaris
...

то в большинстве случаев этого места (31КБ) вполне достаточно для встраивания GRUB2. Размер образа core.img зависит от размера модулей для чтения используемых таблицы разделов и ФС. В частности, для комбинации MBR+ext4 он составляет всего 25КБ.

Однако, в некоторых более сложных случаях, размер образа может оказаться больше 31КБ, и тогда отступа в 63 сектора уже не хватит. Поэтому современные версии fdisk по-умолчанию предлагают создавать первый раздел с гораздо большим отступом (1МБ), начиная с 2048 сектора.

Требования GRUB2-BIOS к GPT

Начальный сектор диска с разметкой GPT зарезервирован, как ни странно, для MBR, которая обычно используется для совместимости, но точно так же оставляет в секторе те же 442 байта, достаточные для встраивания кода загрузчика из boot.img. Сама GPT располагается на следующих секторах.

В отличии от MBR, GPT предусматривает возможность создания на диске специального раздела для встраивания BIOS-загрузчика. Раздел BIOS boot partition имеет GUID=21686148-6449-6e6f-744e656564454649, и может быть создан в fdisk как раздел типа 4, или в gdisk как раздел типа EF02. Этот раздел не должен содержать никакой файловой системы, иначе она будет затёрта при установке загрузчика. Номер раздела может быть любым, расположение также практически любым. На больших дисках рекомендуется располагать BIOS boot partition в пределах первых 2ТБ, поскольку средства BIOS, скорей всего, не позволят прочесть более дальние сектора.

Если такой раздел на диске с GPT создан, программа установки GRUB2 автоматически найдёт его и использует для встраивания стартового образа BIOS-версии загрузчика. Минимальные требования к размеру раздела те же, что и для просвета перед первым разделом в случае MBR – на это место должен поместиться образ core.img. Так как расположение BIOS boot partition не привязано к началу диска, создать его с размером порядка 1МБ будет несложно, и более чем достаточно в любом случае.

Загрузчик в UEFI

В отличии от BIOS, UEFI загружает образ загрузчика из файла, и поэтому предъявляет определённые требования к таблице разделов, разделу, файловой системе, и к содержимому загружаемого файла.

Таблица разделов
Большинство реализаций UEFI поддерживает таблицы разделов GPT и MBR. Некоторые, однако, могут не поддерживать MBR, а некоторые могут поддерживать другие таблицы разделов, специфичные для производителя.
Загрузочный раздел
Загрузочный раздел UEFI называется «EFI system partition», он же ESP, он же EFISYS. На каждом диске может быть не более одного такого раздела.

  • В GPT он должен иметь тип EF00 (GUID=C12A7328-F81F-11D2-BA4B-00A0C93EC93B), и может располагаться в любом месте диска под любым номером.
  • К загрузочному разделу в MBR требования более жесткие: он должен одновременно иметь тип EF, флаг «bootable«, и быть первым.
Файловая система
Большинство реализаций UEFI работают с загрузочным разделом с файловой системой FAT любой разрядности – FAT12, FAT16 и FAT32. Некоторые реализации могут требовать только FAT32, некоторые могут поддерживать другие ФС, специфичные для производителя.
Загрузочный образ
Загружаемый файл должен быть оформлен как EFI-приложение, а значит иметь унаследованный от DOS и Windows бинарный формат MZ/PE (Portable Executable) и соответствовать архитектуре UEFI. Все реализации UEFI для платформы PC имеют архитектуру x86_64, а значит и сборка загрузчика обязательно должна быть под эту архитектуру. Сборка загрузчика под i386 может быть полезна только на некоторых специфических машинах, в основном это старые компьютеры фирмы Apple, а также некоторые миниатюрные устройства на мобильных SoC производства Intel.
Имя файла по-умолчанию
UEFI архитектуры x86_64 автоматически находит на загрузочном разделе и запускает файл EFIBOOTBOOTX64.EFI, который может быть стартовым образом загрузчика.
Загрузочные записи
На загрузочный раздел можно записать больше одного EFI-приложения, каждое под своим именем и в свой каталог. Чтобы можно было запускать их при старте, UEFI обычно предоставляет через специальный программный интерфейс доступ к загрузочным записям – особым переменным (UEFI Variables), хрянящимся в энергонезависимой памяти материнской платы (NVRAM). Каждая загрузочная запись содержит:

  • видимый в пользовательском интерфейсе UEFI заголовок,
  • тип таблицы разделов,
  • ID таблицы разделов,
  • расположение и размер загрузочного раздела,
  • путь к исполняемому файлу EFI-приложения.
Кроме самих загрузочных записей, в NVRAM задаётся порядок их проверки при загрузке, который может быть изменён пользователем.
Программа установки GRUB2 будет пытаться создать загрузочную запись с помощью пакета efibootmgr, сохранив в ней параметры для запуска созданного ей образа загрузчика.

Рекомендации по установке загрузчика

Выбор раздела

Проще всего установить GRUB2 в корневой раздел. По-умолчанию для этого используется каталог с загрузочными образами ядра /boot, но можно установить каталог grub/ в корень /, или в другое место в пределах раздела. GRUB2 обладает средствами для чтения нескольких типов таблиц разделов, логических томов, образов дисков, множества файловых систем и архивов. В большинстве случаев он может читать свои файлы и загружать ОС практически с любого раздела и диска.

  • Только в тех случаях, когда Arch Linux установлен на диск, недоступный для чтения средствами BIOS или UEFI, которыми пользуется загрузчик, либо если для корневого раздела использована слишком новая, экзотическая, или зашифрованная файловая система, не читаемая GRUB2, может потребоваться вынос каталога /boot на отдельный диск либо раздел, и установка загрузчика на него.
  • Если загрузчик в состоянии прочесть корневой раздел, создание отдельного раздела для /boot не нужно и не рекомендуется.

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

  • Не требуется монтировать этот раздел в /boot или переносить в него образы ядра – GRUB2 и так может загрузить их практически из любого раздела.
  • Не следует переустанавливать загрузчик без особой необходимости – от него зависит загрузка всех ОС на машине.
  • Не рекомендуется использовать для общесистемного загрузчика генератор конфигурации – даже если забыть о его «сырости» и ненадёжности, скорей всего, конфигуратор будет работать только в одной системе, а в остальных всё равно придётся редактировать конфиг загрузчика. Вносить правки гораздо легче в простой и понятный конфиг, чем в громоздкий продукт деятельности конфгуратора.

Выбор таблицы разделов

  • Если на диске уже есть таблица разделов, и её возможностей для ваших целей достаточно, то нет никакого смысла её менять.
  • Если вы устанавливаете систему на чистый диск, и выбираете таблицу разделов, то с точки зрения установки GRUB2 предпочтительнее GPT, которая позволяет выделить для встраивания загрузчика раздел в любом месте диска. Это общая рекомендация, она действительна как для BIOS, так и для UEFI.
  • Если на этот диск планируется установка ОС, не поддерживающих GPT, но поддерживающих MBR, вам придётся выбрать MBR, или в крайнем случае, гибридную разметку диска MBR+GPT.

Важно: Ни одна из версий Windows в режиме BIOS не поддерживает загрузку с GPT.
Версии Windows, поддерживающие UEFI, имеют по два варианта загрузки (и загрузчиков): только с MBR в режиме BIOS, и только с GPT в режиме UEFI. См. Windows.

  • Если на диске уже имеется MBR, но в ней недостаточно места перед первым разделом для встраивания GRUB2, и освобождение этого места проблематично, одним из выходов может стать преобразование MBR в GPT, например, с помощью программы gdisk. После этого на диске можно в любом доступном месте создать BIOS boot partition, и использовать её для встраивания загрузчика.
  • Если UEFI вашей машины поддерживает загрузку только с GPT, выбор очевиден.
  • Если вы устанавливаете Arch Linux на переносной носитель (флешку или USB-диск), то для универсальности вы можете использовать на ней GPT, и установить в неё сразу две сборки GRUB2 – i386-pc и x86_64-efi. В этом случае на носителе понадобится создать два загрузочных раздела – EFISYS для UEFI, и BIOS boot partition для BIOS. Файлы со сборками для каждой из архитектур установятся в отдельные каталоги внутри grub/, и не помешают друг другу. Файл конфигурации тоже можно использовать общий, но тогда для некоторых специфических настроек и действий понадобятся дополнительные проверки, описанные ниже.
  • Если требуется сохранить возможность использования переносного носителя в Windows, включая XP, после создания на нём GPT и установки UEFI-загрузчика, можно использовать для этого гибридную разметку GPT+MBR, с описанием в последней только FAT-раздела с данными, и обязательно под номером 1. Остальное место на носителе в MBR должно быть покрыто «защитными» разделами с кодом 0xEE. Сделать всё это можно программой gdisk. GRUB2 в этом случае будет устанавливаться всегда только на GPT.

Установка

Установка GRUB2 в процессе установки Arch Linux

Чтобы установить GRUB2 в процессе установки, предварительно требуется смонтировать корневой раздел устанавливаемого Arch, (а в него boot-раздел, если требуется), и выполнить команду arch-chroot.

Установка пакета

Файлы и утилиты для установки GRUB2 содержатся в пакете grub, и устанавливаются командой

pacman -S grub

Установка загрузчика

Установка BIOS-версии загрузчика

Полноценная установка для BIOS
  • Для установки GRUB2 нужно выполнить команду от root:
grub-install /dev/sda

где /dev/sda это устройство (не раздел!) для установки загрузочных образов GRUB. Файлы загрузчика будут установлены в каталог /boot. Код GRUB (boot.img) будет встроен в начальный сектор, а загрузочный образ core.img – в просвет перед первым разделом MBR, или BIOS boot partition для GPT.

  • Если при выполнении команды происходит ошибка, попробуйте добавить —recheck в аргументы как показано ниже:
grub-install --recheck /dev/sda
  • Если требуется установить файлы загрузчика в другой каталог, его можно указать в опции —boot-directory . С этой опцией можно легко установить GRUB2 на диск с другой системой (устанавливаемой или исправляемой) без чрута, достаточно правильно указать текущий путь к смонтированному каталогу для установки и текущее имя устройства, примерно так:
grub-install --boot-directory=/mnt/boot /dev/sdb
  • Если нужно установить BIOS-версию загрузчика из-под системы, загруженной в режиме UEFI, требуется принудительно задать программе установки нужную сборку GRUB:
grub-install --target=i386-pc /dev/sda
Генерация загрузочного образа для BIOS без установки

Новые версии GRUB2 генерируют загрузочный образ core.img, который может быть загружен не только кодом бут-сектора, но и другими загрузчиками (GRUB2, GRUB Legacy, syslinux), в качестве ядра, совместимого со стандартом Multiboot. Например, другой экземпляр GRUB2 может запустить его командой multiboot, а GRUB Legacy командой kernel.

Чтобы заставить программу установки GRUB2 сгенерировать готовый образ grub/i386-pc/core.img, но не устанавливать его в таблицу разделов, можно применить вот такой хак:

grub-install --grub-setup=/bin/true /dev/sda

Обычно программа установки вызывает сначала grub-mkimage (передавая ему множество параметров, что неудобно делать вручную), чтобы сгенерировать образ, а потом запускает grub-bios-setup, чтобы установить boot.img и core.img в таблицу разделов. С помощью ключа —grub-setup можно подсунуть программе установки вместо grub-bios-setup заглушку (команду true), которая всегда возвращает код успешного завершения.

Установка UEFI-версии загрузчика

В режиме UEFI

Если Arch x86_64 уже загружен в режиме UEFI, системный загрузочный раздел EFI уже создан и смонтирован в /boot/efi, а efibootmgr уже установлен и работает, для установки загрузчика остаётся выполнить команду

grub-install

Программа установки сгенерирует стартовый образ GRUB2, оформленный в виде EFI-приложения, скопирует его в файл /boot/efi/EFI/arch/grubx64.efi, файлы загрузчика будут записаны в каталог /boot/grub/, в том числе модули в /boot/grub/x86_64-efi/, после чего будет сделана попытка с помощью efibootmgr создать в переменных UEFI загрузочную запись «arch» со ссылкой на файл EFIarchgrubx64.efi, которую можно будет выбрать при следующей загрузке и установить её по-умолчанию.

  • Опция —boot-directory задаёт путь, по которому будет установлен каталог grub/, и где grub-install будет искать каталог efi/ с загрузочным разделом EFI. По-умолчанию этот путь равен /boot. Если вы хотите установить каталог с файлами загрузчика в другое место, например в корень, используйте команду вида
grub-install --boot-directory=/
В этом случае файлы загрузчика установятся в каталог /grub, а загрузочный раздел раздел должен быть предварительно смонтирован в /efi.
  • Опция —efi-directory принудительно задаёт каталог, в который смонтирован загрузочный раздел EFI. С её помощью можно указать точку монтирования этого раздела, не привязанную жестко к расположению каталога grub/.
  • Опция —bootloader-id задаёт «ID загрузчика» – имя, под которым будет создаваться загрузочная запись GRUB, видимая при выборе варианта загрузки в интерфейсе UEFI. Под этим же именем в загрузочном разделе будет создан каталог с образом GRUB2. По-умолчанию это имя arch .

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

grub-install --efi-directory=/boot/efi --boot-directory=/boot/efi/EFI --bootloader-id=grub

В этом примере загрузочный раздел EFI с каталогом EFI/ заранее смонтирован в /boot/efi, а ID загрузчика полностью совпадает с именем каталога «grub». Поэтому и образ, и файлы загрузчика будут установлены в один и тот же каталог EFI/grub/ на загрузочном разделе. Соответственно, в этом случае стартовый образ будет установлен в /boot/efi/EFI/grub/grubx64.efi, конфиг загрузчика должен быть в /boot/efi/EFI/grub/grub.cfg, а модули в каталоге /boot/efi/EFI/grub/x86_64-efi/.

Без доступа к UEFI
  • Если нужно установить EFI-версию GRUB2, действуя из системы, загруженной в режиме BIOS, либо в режиме UEFI для другой архитектуры, либо на сменный носитель (флешку или переносной диск), требуется принудительно задать программе установки нужную сборку загрузчика с помощью опции —target .
  • Кроме того, в этом случае не будет работать efibootmgr, и создать загрузочную запись со ссылкой на стартовый образ загрузчика из этой системы не удастся. В такой ситуации можно использовать дефолтный загрузочный путь EFIBOOTBOOTX64.EFI, по которому UEFI самостоятельно найдёт стартовый образ, с помощью опции —removable :
grub-install --target=x86_64-efi --removable
Опции —boot-directory и —efi-directory можно добавлять при надобности, как описано выше, их действие не изменится.
  • Аналогично можно установить GRUB2 на флешку для загрузки в режиме UEFI:
grub-install --boot-directory=/mnt/sdb2/boot --efi-directory=/mnt/sdb1 --target=x86_64-efi --removable
В случае переносного носителя создание загрузочной записи в UEFI бессмысленно, поскольку загрузка будет происходить на другой машине, и использование дефолтного пути к загрузочному образу остаётся единственным вариантом.
  • Если вы не хотите или не можете использовать для GRUB дефолтный путь на загрузочном разделе, можно использовать опцию —no-nvram , чтобы программа установки поместила загрузочный образ в отдельный (не дефолтный) каталог, но не пыталась вызывать efibootmgr:
grub-install --target=x86_64-efi --no-nvram

Примечание: В этом случае вам придётся самостоятельно создать в переменных UEFI загрузочную запись с актуальным путём к загрузочному образу GRUB, с помощью UEFI Shell или иных средств, либо запускать этот образ из другого загрузчика.

Из 32-битного Arch

Если на машине есть UEFI, но установленный Arch Linux имеет архитектуру i686, установить UEFI-версию GRUB можно, но есть дополнительное затруднение – сборка загрузчика x86_64-efi отсутствует в пакете «grub» для архитектуры i686. В пакете же для архитектуры x86_64 присутствуют все три сборки:

  • i386-pc для BIOS,
  • i386-efi для 32-битных прошивок UEFI (встречается редко, в основном это старые машины фирмы Apple, некоторые HDMI-стики),
  • x86_64-efi для 64-битных UEFI.

Перед тем, как устанавливать UEFI-версию GRUB из системы i686, придётся сначала скачать пакет grub для x86_64, и распаковать из него (под рутом) недостающую сборку загрузчика:

tar xvf /путь/grub-версия-x86_64.pkg.tar.xz -C / usr/lib/grub/x86_64-efi

После этого можно устанавливать загрузчик, как описано в предыдущей главе «Без доступа к UEFI».

Установка в LVM

Установка GRUB2 на диск с LVM происходит в целом так же, как и на диск без LVM.

GRUB2 читает файловые системы из логических томов LVM, как и из обычных разделов, поэтому никакого отдельного раздела /boot вне LVM для файлов GRUB2 и загружаемых им образов ядра не требуется. Однако, для встраивания стартовых образов GRUB2 по-прежнему нужна таблица разделов.

Для загрузки в режиме BIOS, в MBR никаких дополнительных разделов создавать не нужно, достаточно единственного раздела на весь диск, полностью отданного под LVM, и оставленного свободного места перед разделом для встраивания загрузчика.

Для загрузки в режиме UEFI, или загрузки с GPT в любом режиме, требуется как минимум один загрузочный раздел вне LVM для стартового образа GRUB2, но не для файлов загрузчика, и не для образов ядра (не /boot ).

Подробнее см. Требования к диску.

Установка на образ диска

В некоторых случаях может понадобиться установить GRUB2 на образ диска, например, для загрузки в виртуальной машине.
К сожалению, в нынешних версиях (на конец 2015г) программа установки загрузчика grub-install по-умолчанию считает loop-устройство, через которое подключается образ, не имеющим разделов, а потому не ищет на нём таблицу разделов, и не включает в начальную загрузку модуль чтения таблицы разделов.

Возможно, в будущем это будет исправлено, а пока для обхода проблемы требуется явно потребовать добавить соответствующий модуль: опцией --modules=part_msdos для MBR, или --modules=part_gpt для GPT.

Пример установки GRUB2 на образ диска с MBR, и размещением файлов загрузчика в каталоге /grub на первом разделе:

[root@host ~]# losetup --show -P -f /home/user/VM/disk.img
/dev/loop0
[root@host ~]# ls -1 /dev/loop0*
/dev/loop0
/dev/loop0p1
/dev/loop0p2
[root@host ~]# mkdir -p /mnt/part1
[root@host ~]# mount /dev/loop0p1 /mnt/part1
[root@host ~]# grub-install --modules=part_msdos --boot-directory=/mnt/part1 /dev/loop0

Переустановка загрузчика

Переустановка пакета не переустанавливает загрузчик.

Переустановка GRUB2 выполняется командой grub-install, и ничем не отличается от установки.

Переустановка GRUB2 может потребоваться в следующих случаях:

  • Если установка другой ОС или другого дистрибутива затёрла стартовый код GRUB2.
  • После преобразования таблицы разделов.
  • После изменения нумерации раздела, на котором установлены файлы загрузчика.
  • После переноса загрузчика на другой раздел или в другую файловую систему.
  • Если вас не устраивает текущая версия загрузчика, и вы хотите её обновить.

Переустановка GRUB2 не требуется:

  • При изменении файла конфигурации загрузчика.
  • При обновлении ядра, установке другого ядра, или пересборке initramfs.
  • При смене архитектуры установленного Arch с i686 на x86_64 без смены раздела и без форматирования корневой ФС.
  • При обновлении пакета «grub».

Перенос загрузчика

Загрузчик GRUB состоит из двух частей: (внефайлового) загрузочного кода в таблице разделов и файлов в каталоге /grub (/boot/grub).

Вне зависимости от того, какие из этих частей переносятся, при переносе обязательно нужно переустановить загрузчик с помощью grub-install .

Если загрузчик переносится на другой диск, также может потребоваться изменение настроек BIOS/UEFI, чтобы загрузка начиналась с этого диска.

Загрузчик GRUB не читает fstab и игнорирует флаг bootable в MBR, поэтому любые манипуляции с ними не имеют никакого отношения к установке, переустановке или переносу GRUB.

После установки

В настоящее время GRUB2, сразу после установки, готов к работе только в режиме консоли. (Это будет продолжаться до тех пор, пока мейнтейнеры пакета «grub» не заменят бессмысленный дефолтный файл конфигурации загрузчика на рабочую статическую или автоматически генерируемую версию.)

Чтобы получить при загрузке действующее меню GRUB2, требуется заменить файл grub.cfg самостоятельно. Речь об этом идёт в следующей части «Настройка».

Настройка

Главный файл конфигурации загрузчика

Главный файл конфигурации по-умолчанию находится в /boot/grub/grub.cfg.

  • Если вы пользуетесь автоматическим генератором конфигурации grub-mkconfig, не редактируйте главный файл конфигурации вручную – сгенерированный код пригоден для загрузки, но громоздок и неудобен для редактирования, а все изменения будут стёрты при запуске конфигуратора.
  • Соответственно, если вы собираетесь редактировать конфиг загрузчика сами – создайте его либо полностью заново, либо на основе примеров, и не пытайтесь запустить grub-mkconfig или использовать сгенерированный им код.

Автоматическая конфигурация (grub-mkconfig)

Генерация конфига

Команда grub-mkconfig может быть использована для генерации файла grub.cfg.

Для автоматического обнаружения ОС отличных от Linux установите пакет os-prober. Если после установки пакета os-prober автоматическое обнаружение не работает должным образом, то может потребоваться установка пакета hwinfo.

Для отключения автоматического обнаружения других операционных систем следует добавить в файл /etc/default/grub строку GRUB_DISABLE_OS_PROBER="true".

Для настройки конфигуратора используйте файл /etc/default/grub и файлы в каталоге /etc/grub.d/.

Если Вы хотите добавить свои пункты в меню GRUB, настроить их можно в файле /etc/grub.d/40_custom, либо в /boot/grub/custom.cfg.

Чтобы применить изменения, запустите команду:

# grub-mkconfig -o /boot/grub/grub.cfg

Она не только создаст файл /boot/grub/grub.cfg, но и проверит конфигурацию на наличие ошибок.

Важно: Если вы запускаете конфигуратор при установке Arch Linux, убедитесь, что вы делаете это внутри arch-chroot, иначе программа будет читать и записывать файлы конфигурации текущей, а не устанавливаемой системы.

Параметры конфигуратора

Дефолтный файл /etc/default/grub содержит параметры конфигуратора с настройками по-умолчанию, снабженные комментариями на английском языке. Ниже перечислены некоторые наиболее общие из них:

  • GRUB_DEFAULT Номер или заголовок пункта меню, выбранного по-умолчанию
  • GRUB_TIMEOUT Время, после которого будет автоматически загружаться пункт по-умолчанию
  • GRUB_CMDLINE_LINUX Параметры ядра Linux, добавляемые во все пункты меню.
  • GRUB_CMDLINE_LINUX_DEFAULT Параметры ядра Linux, добавляемые только в пункты меню, сгенерированные без «recovery». В Arch Linux настройки автоконфигуратора по-умолчанию содержат GRUB_DISABLE_RECOVERY=true, поэтому фактически в каждый пункт меню добавляются параметры из обех упомянутых строк.

Другие параметры конфигуратора вы можете найти ниже, в соответсвующих тематических главах.

Прямая конфигурация

GRUB2 – программируемый загрузчик, и файл его конфигурации – это не файл настроек, а программа, выполняемая загрузчиком, скрипт. Как всякий скрипт, он может быть как очень простым, не сложнее menu.lst в GRUB Legacy, так и очень сложным, поскольку сложность скриптов практически ничем не ограничена.

Код скрипта конфигурации, генерируемый grub-mkconfig, обычно пригоден для загрузки в типовых случаях, но слишком громоздок, избыточен, непригоден для изучения, ограничен в возможностях, и создаёт ложное впечатление о «сложном конфиге GRUB2».

Ещё одно распространённое заблуждение происходит от надписи «DO NOT EDIT …» в начале кода, генерируемого конфигуратором. Надпись правильная, но её смысл состоит лишь в том, что именно этот, автоматически сгенерированный код, действительно нет смысла редактировать. Надпись стандартна для автоматических конфигураторов, и относится не к grub.cfg вообще, а только к продукту деятельности конфигуратора, безотносительно имени файла, в который его сохранили.

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

Прямое написание скрипта даёт непосредственный доступ ко всем возможностям GRUB2, значительно большую гибкость, надёжность и стабильность, просто за счёт упрощения кода и устранения лишних звеньев в цепочке.

Язык конфигурации GRUB2 – сильно упрощённый UNIX-шелл, из которого убраны возможности перенаправления ввода-вывода, и добавлены команды, специфичные для загрузчика.

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

В Arch Linux не используется версионное обновление ядер – имена образов ядра и initramfs для каждого пакета с ядром не меняются при обновлении, и файл конфигурации загрузчика не обновляется при обновлении ядра.

Более того, возможности скриптов GRUB2 позволяют средствами самого загрузчика, прямо перед загрузкой ОС, генерировать меню с переменным количеством строк, для поиска и загрузки всех установленных ядер Arch Linux, без изменения каких-либо файлов конфигурации. То же самое возможно и для версионных ядер Debian и Ubuntu.

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

Прежде чем приступать к написанию конфига, крайне желательно защитить его от возможной перезаписи при обновлении/переустановке пакета grub.

Защита конфигурации

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

Вынос конфигурации в другой файл

Так как GRUB поддерживает модульность конфигурации, можно оставить в файле grub.cfg только одну строку со ссылкой на другой файл, например menu.cfg

/boot/grub/grub.cfg
. $prefix/menu.cfg

и в дальнейшем вместо grub.cfg править только menu.cfg

Для автоконфигурации в этом случае можно использовать команду

grub-mkconfig -o /boot/grub/menu.cfg

Прямая блокировка grub.cfg

Чтобы защитить файл от любых изменений, присвойте ему атрибут immutable

chattr +i /boot/grub/grub.cfg

Блокировка снимается командой

chattr -i /boot/grub/grub.cfg

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

Блокировка защитит файл от перезаписи скриптами установки пакетов. Чтобы избежать конфликта с файлом из пакета, добавьте его имя в строку NoUpgrade в /etc/pacman.conf:

/etc/pacman.conf
NoUpgrade = boot/grub/grub.cfg

Перенос каталога grub

Если каталог grub/ со всеми файлами загрузчика расположен в корневом разделе, для защиты конфигурации можно переместить его из /boot в другое место в пределах раздела, проще всего прямо в корень :

mv /boot/grub /
grub-install --boot-directory=/ /dev/sda

Вместо /dev/sda используйте текущее имя диска для установки (при установке для UEFI указывать его не нужно). Все файлы загрузчика после этого будут находиться в каталоге /grub , в том числе файл конфигурации /grub/grub.cfg . Образы ядра и initramfs останутся по-прежнему в /boot , и будут загружаться как обычно, правки путей не потребуется.

В модульных и многофайловых (шрифты, темы) конфигурациях вместо /boot/grub можно использовать в путях к файлам переменную $prefix, в этом случае конфиги будут работать правильно вне зависимости от текущего расположения файлов загрузчика.

Если вы используете автоконфигуратор, не забудьте после переноса заменить возможные упоминания /boot/grub на /grub в файлах /etc/default/grub и /etc/grub.d/*

Для генерации конфига после переноса можно пользоваться командой

grub-mkconfig -o /grub/grub.cfg

Синтаксис файла конфигурации GRUB

Пример минимальной работающей конфигурации

Здесь только один пункт меню, загрузчик в корневом разделе, который передаётся ядру меткой Arch_root

/boot/grub/grub.cfg
set timeout=5
menuentry "Arch Linux" {
 linux /boot/vmlinuz-linux root=LABEL=Arch_root rw
 initrd /boot/initramfs-linux.img
}

Основные команды и переменные

Файл конфигурации состоит из команд, выполняемых по порядку, как в обычном шелл-скрипте.

  • Строки или продолжения строк, начинающиеся с символа # , считаются комментариями.
  • В GRUB2 используются обозначения дисков вида hdX и разделов вида hdX,Y , где X номер диска, Y номер раздела на нём. Нумерация разделов начинается с единицы (как в ядре Linux), нумерация дисков – с нуля. Если обозначение диска или раздела используется само по себе, например в переменной root, оно пишется без скобок.
  • Пути к файлам могут начинаться с обозначения диска или раздела в скобках, например (hd0,1)/boot/vmlinuz соответствует файлу vmlinuz в каталоге /boot на разделе /dev/sda1
  • Если в пути к файлу не указан диск или раздел, подразумевается текущий диск или раздел из переменной root . При запуске GRUB2 эта переменная уже указывает на раздел, где хранятся все файлы загрузчика, и как правило, образы ядра и initramfs. Задавать переменную root в конфиге имеет смысл ТОЛЬКО для загрузки с ДРУГОГО раздела. Пример:
set root=hd0,1 # задаём раздел с другой ОС или другим загрузчиком
chainloader +1 # загружаем его бут-сектор
  • Кроме файлов, GRUB2 позволяет обращаться напрямую к цепочкам секторов на диске или разделе, в формате X+Y , где X номер начального сектора цепочки, а Y количество секторов. Если цепочка начинается с первого (номер 0) сектора, её обозначение сокращается до +Y. Наиболее употребительная цепочка в конфигах GRUB – бут-сектор раздела или диска, обозначается как +1
  • В обозначении раздела перед его номером может стоять слово, обозначающее его принадлежность к таблице разделов определённого типа, например hd0,msdos3 означает третий раздел в MBR на нулевом диске, а hd1,gpt2 означает второй раздел в GPT на следующем диске. GRUB2 всегда добавляет тип таблицы при выводе разделов командой ls и при записи $prefix в процессе установки, однако писать тип таблицы вручную не требуется – он определяется автоматически. Исключение может составлять только особо тяжелый случай двух разных таблиц разделов с разной нумерацией на одном диске, причём гибрид GPT+MBR таким случаем не является – GRUB2 игнорирует MBR, если на диске обнаружена GPT.
  • Команда menuentry генерирует один пункт меню. Она задаёт видимый заголовок и список команд, которые выполнятся после выбора этого пункта меню:
menuentry "Заголовок" {
# команды
}
  • Переменная default задаёт номер или заголовок пункта меню, выбранного по-умолчанию. Например, set default=1 выбирает второй пункт. Пункты меню нумеруются с нуля.
  • Переменная timeout определяет время в секундах, по истечении которого будет загружен пункт меню по-умолчанию, например, set timeout=5.

Примечание: Если таймаут не задан, GRUB будет показывать меню неограниченно долго, и не начнёт загрузку ОС без вмешательства пользователя.

  • Команда linux загружает образ ядра и параметры для него.
  • Команда initrd загружает образ начальной корневой ФС. Если образов указано несколько, они будут загружены по очереди. Например, образ для обновления микрокода процессоров Intel загружается перед основным образом:
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
  • Команда chainloader предназначена для загрузки «по цепочке» образа другого загрузчика. В режиме BIOS это, как правило, boot-сектор или его копия в файле, в режиме UEFI это может быть любое EFI-приложение, даже не обязательно находящееся в доступном для UEFI разделе – главное, чтобы файл мог быть прочитан средствами GRUB, а переменная root при вызове команды указывала на доступный UEFI раздел.

Стандартный пример конфигурации

В этом примере так или иначе фигурируют три раздела:

  • hd0,1 – раздел Windows, указан явно в последнем пункте меню.
  • hd0,2 – boot-раздел , монтируется в /boot , поэтому /boot отсутствует в путях к файлам. При старте раздел уже находится в переменной root, поэтому отдельно никак не задаётся, только подразумевается.
  • hd0,3 – корневой раздел Arch Linux , в Linux отображается как /dev/sda3 , как и прописан в параметрах ядра.
/boot/grub/grub.cfg
# по-умолчанию выбран пункт меню 0
set default=0

# при бездействии пользователя он загрузится через 5 секунд
set timeout=5

# пункт меню номер 0
menuentry "Arch Linux" {
 linux /vmlinuz-linux root=/dev/sda3 rw
 initrd /initramfs-linux.img
}

# пункт меню номер 1
menuentry "Windows XP" {
 chainloader (hd0,1)+1
}

Примечание: Если образы ядра и initramfs лежат не в отдельном разделе, а в каталоге '/boot', он должен быть указан в путях к ним:

menuentry "Arch Linux" {
 linux /boot/vmlinuz-linux root=/dev/sda3 rw
 initrd /boot/initramfs-linux.img
}

Вторичные конфиги, вложенные меню и смена контекста

Как и UNUX-шелл, GRUB2 поддерживает три вида переменных: обычные, позиционные параметры и переменные окружения.

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

Обычные переменные создаются в момент первого присвоения, командой set переменная=значение
При этом само слово set можно не писать:

head="Arch linux"

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

Для уничтожения обычной переменной может быть использована команда unset

unset timeout

Обычные переменные могут быть экспортированы «в окружение» командой export

export a b c

Примечание: Некоторые встроенные переменные GRUB2, в частности root и lang, имеют свойство экспортироваться автоматически.

Так же как в шелл-скриптах, из одного конфига GRUB2 может вызван другой файл конфига.

  • Команда source (часто обозначается просто точкой .) выполняет другой конфиг без смены контекста, после чего продолжает выполняться текущий. Пример:
. $prefix/custom.cfg
  • Команда configfile запускает новый конфиг в новом контексте:
configfile /boot/grub/new.cfg

Примечание: Переменная prefix при запуске GRUB содержит полный путь к каталогу, в который установлен загрузчик. Задавать её явно обычно не требуется, однако $prefix удобно использовать при обращении к другим конфигам, так как именно в этом каталоге находится grub.cfg, и как правило, дополнительные файлы конфигурации.

  • Команда submenu создаёт новый пункт меню, так же как и menuentry, и может иметь точно такой же набор параметров. Единственное отличие submenu состоит в том, что команды внутри него выполняются в новом контексте, так же как при вызове конфига через configfile. Соответственно, все новые пункты меню, создаваемые в новом контексте, добавляются в новое меню, отсюда и название команды.
  • Возврат в старое меню (и старый контекст, со старыми переменными) из вложенного, может быть выполнен нажатием клавиши ESC.

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

Примечание: В принципе, ничто не мешает создавать пункты меню и внутри menuentry, однако в этом случае новые пункты будут будут добавляться не в новое, а прямо в текущее меню.

Постоянное именование устройств

UUID

Примечание: Автоматический конфигуратор использует UUID по-умолчанию. Если вы хотите, чтобы он использовал классические имена устройств (например, если у вас нет initramfs), вы можете запретить конфигуратору использовать UUID, раскомментировав в /etc/default/grub строку
GRUB_DISABLE_LINUX_UUID=true

При загруженном Linux, узнать UUID имеющихся разделов можно с помощью команды lsblk -f

Полученный UUID корневого раздела можно вручную вставить в параметры ядра, примерно так: root=UUID=355ccb5c-99e1-400d-b612-451f9247e35e, но делать это имеет смысл, только если у вас есть отдельный boot-раздел.

Чаще всего и GRUB, и ядро находятся в одном том же корневом разделе, который уже и так находится в $root, остаётся получить его UUID в переменную для подстановки в параметры ядра:

probe --set=UUID --fs-uuid $root

Пример загрузки ядра с автоматической подстановкой UUID:

menuentry "Arch Linux" {
 probe -s UUID -u $root
 linux /boot/vmlinuz-linux root=UUID=$UUID rw
 initrd /boot/initramfs-linux.img
}

Параметры команды probe здесь те же самые, просто в сокращённой форме.

И только если образ ядра находится не в том разделе, что GRUB, то есть не в корневом, и не в boot-разделе, требуется отдельно указать его загрузчику. Чтобы сделать это, используйте команду search. Так мы устанавливаем корневой раздел в переменную загрузчика $root через поиск по UUID, и этот же UUID подставляем в параметры ядра, если отдельного boot-раздела нет:

menuentry "Arch Linux" {
 UUID=355ccb5c-99e1-400d-b612-451f9247e35e
 search --fs-uuid $UUID --set root
 linux /boot/vmlinuz-linux root=UUID=$UUID rw
 initrd /boot/initramfs-linux.img
}

Метки

Метки — легко читаемые заголовки, присваиваемые файловым системам и не только:

e2label /dev/sda3 Arch_root      # ставим метку на ext2/3/4
swaplabel -L Arch_swap /dev/sda2 # ставим метку свап-разделу
mkswap -L Arch_swap /dev/sda2    # если свап "старый", пересоздаём с меткой
ntfslabel /dev/sda1 WindowsXP    # ставим метку на NTFS
fatlabel /dev/sda5 OTHERDATA     # ставим метку на FAT

Метку можно подставить в параметры ядра. Пример:

menuentry "Arch Linux" {
 linux /boot/vmlinuz-linux root=LABEL=Arch_root rw
 initrd /boot/initramfs-linux.img
}

Примечание: Если вы используете метки для поиска разделов при загрузке, позаботьтесь об их уникальности. К примеру, метки Arch, root или my_disk уникальностью не отличаются.

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

menuentry "Arch Linux" {
 search --label Arch_root --set root
 linux /boot/vmlinuz-linux root=LABEL=Arch_root rw
 initrd /boot/initramfs-linux.img
}

Особые типы устройств

LVM

  • При использовании GRUB2 на LVM, как правило, никаких дополнительных команд в конфиге GRUB не требуется, достаточно просто передать ядру в параметре root= обозначение группы и тома LVM, принятое в Linux, то есть /dev/mapper/Group-Name:
menuentry "Arch Linux" {
 linux /vmlinuz-linux root=/dev/mapper/Arch-Root rw
 initrd /initramfs-linux.img
}

или /dev/Group/Name:

menuentry "Arch Linux" {
 linux /vmlinuz-linux root=/dev/Arch/Root rw resume=/dev/Arch/Swap
 initrd /initramfs-linux.img
}
  • Только если GRUB находится на разделе, отдельном от раздела с ядрами, то есть не на корневом, и не на boot-разделе, может потребоваться указать ему нужный раздел с образами ядра и imitramfs. Группа и том LVM в формате GRUB2 задаются так:
set root=lvm/Group-Name
  • И только если GRUB2 установлен не на LVM, а образы ядра он должен прочесть с тома LVM, может также потребоваться предварительно загрузить его модуль командой insmod :
menuentry "Arch Linux" {
 insmod lvm
 set root=lvm/Arch-Root
 linux /vmlinuz-linux root=/dev/mapper/Arch-Root rw
 initrd /initramfs-linux.img
}

Загрузка других операционных систем

GRUB можно использовать для загрузки и других установленных на той же машине дистрибутивов и операционных систем. Для добавления каждого нового пункта загрузочного меню GRUB, в его конфиг добавляется своя секция menuentry. Примеры конфигурации дополнительных пунктов для запуска Linux и Windows приведены ниже.

Если вы используете автоконфигурацию GRUB, но хотите, чтобы в генерируемый конфиг добавлялись ваши пункты меню, написанные вручную, отредактируйте файл /etc/grub.d/40_custom и допишите их в конец этого файла. Всё его содержимое будет добавлено в конфиг загрузчика при запуске grub-mkconfig

GNU/Linux

В этом примере другой дистрибутив Linux загружается с раздела sda2:

submenu "Other Linux" {
 set root=hd0,2
 linux /boot/vmlinuz # добавьте сюда все нужные опции ядра
 initrd /boot/initrd.img # файл initrd, если он используется
}

Windows

Операционные системы Windows не поддерживают протокол Multiboot, и GRUB не может загружать Windows непосредственно. Чтобы загрузить Windows, нужно запустить её собственный загрузчик, который, в свою очередь, загружает ядро Windows и набор необходимых для старта драйверов, по списку, который он читает из реестра Windows.

Для BIOS и для UEFI в одной и той же версии Windows используются две различных версии загрузчика, каждая со своими особенностями. Windows, установленная в режиме BIOS, не имеет UEFI-загрузчика и не стартует в режиме UEFI, и наоборот – будучи установленной в режиме UEFI, Windows не стартует режиме BIOS.

Windows в режиме BIOS

Загрузчик Windows для режима BIOS поддерживает только одну таблицу разделов – MBR, и не поддерживает GPT, независимо от версии Windows. Кроме того, 32-битная версия Windows XP может быть запущена только в режиме BIOS.

Загрузчик Windows может быть запущен через бут-сектор раздела, на который он установлен:

menuentry "Windows" {
 chainloader (hd0,2)+1
}

либо напрямую из его файла, специальной командой ntldr

submenu "Windows XP" {
 set root=hd0,2
 ntldr /ntldr
}

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

submenu "Windows 7" {
 set root=hd0,3
 ntldr /bootmgr
}
Windows в режиме UEFI

Загрузчик Windows, установленной в режиме UEFI, поддерживает только одну таблицу разделов – GPT, и не поддерживает MBR.

Если GRUB2 установлен в режиме UEFI, его стартовый образ лежит в том же ESP/EFISYS разделе, что загрузчик Windows. Полный путь к стартовому образу GRUB2 режима UEFI указывает переменная $cmdpath с содержимым вида (диск,раздел)/EFI/каталог/grubx64.efi.
Чтобы из этого пути получить диск и раздел, можно регулярным выражением обрезать скобки и путь, и записать результат в переменную $root. После этого загрузчик Windows запускается командой chainloader, как обычное EFI-приложение:

submenu "Windows 8" {
 regexp -s root '((.+))' "$cmdpath"
 chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

Запуск FreeDOS

Аналогично командам linux и ntldr, в GRUB предусмотрена возможность прямой загрузки ядра FreeDOS, командой freedos, без использования оригинального загрузочного кода в MBR и бут-секторе:

menuentry "FreeDOS" {
 freedos /KERNEL.SYS
}

Это может быть удобно, когда требуется скопировать уже установленную, к примеру, на флешку, FreeDOS, используемую для запуска MHDD и подобных инструментов.
Такой способ загрузки позволяет под Linux копировать файлы и каталоги однажды установленной FreeDOS на другие носители, в том числе «мультизагрузочные».
(Установка FreeDOS штатным способом, с записью её загрузочного кода в MBR и бут-сектор, требует каждый раз загружать саму FreeDOS, хотя бы в виртуальной машине.)

Запуск программ, работающих без ОС

Memtest86+

Тест памяти memtest86+ (версия для BIOS):

menuentry "Memtest86+" {
 linux16 /boot/memtest86+/memtest.bin
}

Он же, но для UEFI (пакет memtest86+-efi):

menuentry "Memtest86+" {
 linux /boot/memtest86+/memtest.efi
}
EFI-приложения

EFI-приложения можно запускать не только из интерфейса UEFI, но и из других EFI-приложений, в том числе из UEFI-версии GRUB2, с помощью команды chainloader. На примере загрузчика Windows это уже показано выше.

Чтобы запустить EFI-приложение, вовсе не обязательно класть его на раздел EFISYS, особенно если приложение большое, а на спецразделе очень мало места. Достаточно, чтобы файл приложения читался средствами GRUB, а переменная root указывала на EFISYS. В этом примере UEFI Shell запускается прямо из /boot:

submenu "UEFI Shell" {
 archroot=$root
 regexp -s root '((.+))' "$cmdpath"
 chainloader ($archroot)/boot/Shell.efi
}

При выходе из UEFI Shell вы снова увидите меню GRUB.

Debian, Ubuntu и другие дистрибутивы с версионным обновлением ядра

В дистрибутивах с версионными ядрами, при каждом обновлении ядра автоматически вызывается генератор конфигурации загрузчика, поскольку имена загрузочных образов vmlinuz и initrd меняются при каждом обновлении. Это обстоятельство вынудило разработчиков Debian и Ubuntu сделать автоконфигуратор даже для первой версии GRUB, в которой обычно использовались только статические конфиги.

Если другой дистрибутив установлен на отдельный диск (в режиме BIOS), и имеет собственную установку GRUB2, для его загрузки достаточно запустить другой загрузчик:

menuentry "Ubuntu" {
 chainloader (hd1)+1
}

В режиме UEFI несколько загрузчиков могут быть установлены и на один диск, и запускаться один из другого как EFI-приложения:

submenu "Ubuntu" {
 regexp -s root '((.+))' "$cmdpath"
 chainloader /EFI/ubuntu/grubx64.efi
}

В некоторых случаях (не всегда) другую установку GRUB2 можно запустить в режиме BIOS с помощью команды multiboot, минуя встраивание образа в таблицу разделов:

sunmenu "Other Linux" {
 set root=hd0,6
 multiboot /boot/grub/i386-pc/core.img
}

К сожалению, часто встречается ситуация, когда другой дистрибутив установлен в режиме BIOS на тот же самый диск, в таблицу разделов которого можно установить только один загрузчик, и запустить второй проблематично. В этом случае остаётся либо использовать GRUB из состава того дистрибутива, либо учить штатный загрузчик Arch Linux работать с версионными ядрами.

Самый простой способ это сделать – подсунуть «своему» GRUB конфиг от чужого, в котором всё уже предусмотрено, не забыв перед этим сбросить некоторые переменные, которые могут вызвать проблемы:

submenu "Ubuntu" {
 unset lang
 unset gfxmode
 set root=hd0,2
 configfile /boot/grub/grub.cfg
}

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

. $prefix/ubuntu.cfg

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

usettings.cfg
uroot=hd0,2
boot=/boot
opts="root=LABEL=Ubuntu_root ro resume=LABEL=SwapU"
hpref="Ubuntu"

Сам скрипт:

ubuntu.cfg
function usave {
 if [ "$1" != "$usel" ] ; then
  usel="$1"
  save_env usel
 fi
}

function umenu {
 . $prefix/usettings.cfg

 kpref=$boot/vmlinuz-
 ipref=$boot/initrd.img-

 load_env
 default="$hpref $usel"
 if [ -n "$2" ] ; then default="$default $2" ; fi

 kernels=
 for kfile in "$uroot$kpref"* ; do
  k=
  regexp -s k "$kpref"'(.+)' "$kfile"
  kernels="$k $kernels"
 done

 for k in $kernels ; do
  ifile="$uroot$ipref$k"
  if [ -f "$ifile" ] ; then
   head="$hpref $k"
   if [ -n "$2" ] ; then head="$head $2" ; fi
   menuentry "$head" --source="usave $k
linux $uroot$kpref$k $opts $1
initrd $ifile"
  fi
 done
}

submenu "Ubuntu" --hotkey=u {
 insmod regexp

 submenu "Recovery mode" --hotkey=r {
  umenu "recovery nomodeset" "recovery mode"
 }

 umenu
}

Этот скрипт в конфиге GRUB динамически генерирует отдельное подменю со всеми имеющимися ядрами Ubuntu, и отдельно (для Ubuntu) запоминает последнее выбранное ядро.

Прямая загрузка из образа диска

GRUB2 может загружать образы ядер ОС в том числе из файлов-образов, отображаемых в псевдоустройство командой loopback. Однако следует иметь в виду, что псевдоустройство действует только в пределах загрузчика. В общем случае загрузка из образа выглядит примерно так:

loopback loop файл-образа
linux (loop)/путь/к/vmlinuz параметры
initrd (loop)/путь/к/initrd

После отображения образа в loop-устройство (имя может быть любым, не только loop), можно средствами GRUB2 обращаться с ним так же, как и с физическими дисками – не только загружать файлы ядра и initrd, что происходит перед загрузкой, а к примеру, прочитать метку ФС образа (требуется для образа Arch):

probe -s isolabel -l loop

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

  • Установочный образ Arch требует метку ФС образа в параметре ядра archisolabel=, и линуксовое устройство раздела, на котором он лежит, в параметре img_dev= (универсальнее всего прочесть и передать его UUID, но можно использовать и метку, если она есть).
  • Образ Ubuntu довольствуется лишь путём к образу на диске, а остальное находит сам.

В некоторых дистрибутивах средства загрузки из образа могут и вовсе отсутствовать, поэтому не все существующие загрузочные образы могут быть использованы подобным образом.

Во всех приведённых ниже примерах предполагается, что GRUB2 установлен на тот же раздел диска или флешки, где лежат образы (в противном случае см. ниже). Такой способ установки позволяет записать на одну флешку или внешний диск один или несколько образов, при этом сохранив возможность использования оставшегося места на носителе по прямому назначению, с сохранением предпочтительной файловой системы.

Arch Linux ISO

В этом примере GRUB2 загружает официальный установочный образ Arch Linux.

grub.cfg
dir=
arch=x86_64
insmod regexp               # для шаблонов * в именах файлов
probe -s root_uuid -u $root # получаем UUID для подстановки в img_dev=

for iso in $dir/archlinux-*-$arch.iso ; do      # ищем образ(ы) Arch по шаблону
 if [ ! -f "$iso" ] ; then continue; fi        # только если образ существует
 regexp -s build 'archlinux-(.+)-'$arch "$iso"  # получаем из имени образа дату сборки

  menuentry "Arch Linux ISO $build $arch" --source="
loopback loop $iso
probe -s isolabel -l loop
linux (loop)/arch/boot/$arch/vmlinuz archisolabel=$isolabel img_dev=/dev/disk/by-uuid/$root_uuid img_loop=$iso earlymodules=loop
initrd (loop)/arch/boot/$arch/archiso.img"

done

Файл образа с именем вида archlinux-YYYY.MM.DD-x86_64.iso должен лежать в корне раздела. В этом случае текст файла конфигурации можно использовать «как есть», без каких-либо правок – загрузчик сам определит конкретное имя образа (или образов), сам прочитает UUID раздела, метку образа, и при загрузке передаст всё это дистрибутиву через параметры ядра.

Если же вы хотите использовать для образа (образов) особый каталог, впишите путь к нему (относительно корня раздела) в строку dir=, например

dir=/images
Ubuntu desktop ISO

В этом примере GRUB2 загружает любые ISO-образы Ubuntu, кроме серверных. В сгенерированном меню будут варианты загрузки для всех найденных образов Ubuntu.

grub.cfg
dir=
insmod regexp

for iso in $dir/*ubuntu-*.iso ; do         # ищем образ(ы) Ubuntu
 if [ ! -f "$iso" ] ; then continue; fi    # только если образ существует
 regexp -s name '.*/(.+).iso' "$iso"                # выделяем только имя
 if regexp server "$name" ; then continue ; fi              # Ubuntu Server не трогаем, там всё иначе
 if regexp amd64 "$name" ; then efi='.efi' ; else efi= ; fi # для x86_64 образ ядра vmlinuz.efi

  menuentry "$name" --source="
loopback loop $iso
linux (loop)/casper/vmlinuz$efi boot=casper iso-scan/filename=$iso noeject --
initrd (loop)/casper/initrd.lz"

done

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

Загрузка образов с отдельного раздела встроенного диска

Если образы требуется загружать с некорневого раздела встроенного жесткого диска (например, /home ), можно использовать тот же код, создав для него подменю:

submenu "ISO boot" {
 dir=
 set root=hd0,5 # здесь нужно вписать настоящий номер раздела
 # или найти его по метке, например Arch_home:
 # search -s root -l Arch_home
 insmod regexp
 probe -s root_uuid -u $root
 arch=x86_64
 
 # вместо этой строки вставляем основной код, начиная с for
}

Если раздел требуется задать по UUID, можно сделать так:

submenu "ISO boot" {
 dir=
 root_uuid=ef6daeca-9278-40df-8c3b-55cf093ab215
 search -s root -u $root_uuid
 insmod regexp
 arch=x86_64
 
 # вместо этой строки вставляем основной код, начиная с for
}

Управление ходом загрузки

Так же, как и из Linux, из GRUB можно выполнить перезагрузку командой reboot и выключение командой halt

Кроме того, в режиме UEFI есть некоторые специфические действия.

Переход в интерфейс настроек UEFI

Не секрет, что на некоторых прошивках UEFI, особенно это относится к ноутбукам, может быть очень сложно попасть в интерфейс настроек UEFI путём нажатия при включении F2 или других клавиш, особенно если режим совместимости с BIOS (Legacy mode) полностью отключён или вообще отсутствует, а UEFI «видит» доступный загрузчик. Конечно, перезагрузиться в настройки UEFI можно и после загрузки Linux, например, консольной командой

systemctl reboot --firmware-setup

Но есть более быстрый способ: перейти в интерфейс UEFI прямо из загрузчика, для этого в GRUB есть специальная команда fwsetup

Другими словами, вы можете добавить в меню GRUB дополнительный пункт:

menuentry "UEFI Settings" {
 fwsetup
}

и выбрав его, сразу открыть настройки UEFI, без загрузки и перезагрузки ОС.

Защита загрузчика паролем

О защите загрузчика

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

Всё это может помочь при настройке и восстановлении системы, однако те же самые инструменты существенно облегчают любому посетителю взлом системы. Изменение параметров ядра может быть использовано для получения полномочий root без ввода пароля, а загрузка с внешнего носителя – для получения полного доступа ко всем незашифрованным данным.

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

Реализация паролей в GRUB2

Пользователи в GRUB2 делятся на три категории:

  • Гости, они же неавторизованные пользователи. Могут выполнять только не защищённые паролем пункты меню.
  • Авторизованные пользователи. Могут выполнять разрешенные для них пункты меню.
  • Администраторы. Имеют полный доступ – могут выполнять любые пункты меню, редактировать их перед выполнением, и открывать командный терминал.

Для управления доступом к пунктам меню, команды menuentry и submenu поддерживают следующие опции:
--users= позволяет задать список пользователей, которым разрешено выполнять этот пункт меню
--unrestricted разрешает выполнять этот пункт меню без авторизации.

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

Список администраторов задаётся в переменной superusers, например так:

set superusers=root

Пароль для каждого пользователя отдельно может быть задан в открытом виде командой

password пользователь пароль

либо в зашифрованном (хешированном) виде, командой

password_pbkdf2 пользователь хеш

Для хеширования пароля используется утилита grub-mkpasswd-pbkdf2. Запустив её и введя (дважды) пароль, можно получить его хеш, пригодный для вставки в конфиг GRUB2.

Чтобы защитить пароли и хеши от просмотра, можно задать права на файл с конфигом GRUB в виде root:root 600, либо вынести команды с паролями в отдельный файл

. $prefix/secret.cfg

и ограничить доступ только к нему.

Внедрение паролей в генерируемый конфиг

Конфигуратор grub-mkconfig сам не умеет ограничивать доступ к загрузчику, хотя и устанавливает права доступа к конфигу в -rw------- root root, что имеет смысл только для сохранения паролей.

Есть возможность вставить вручную написанный фрагмент конфига с паролями, добавив в конец файла /etc/grub.d/00_header примерно такие строки:

cat << EOF

set superusers=root
password_pbkdf2 root grub.pbkdf2.sha512.10000.C2DDC47FC5C7341CE73DBD6728E8D29A.AA5A1DEA93E23358E908301439DEC488

EOF

Важно: После генерации такого конфига ВСЕ пункты меню станут доступны только администратору!

Более гибкая настройка доступа к загрузчику, например разрешение штатной загрузки системы без ввода пароля, возможна либо путём добавления своих пунктов меню с опцией --unrestricted в конец файла /etc/grub.d/40_custom, либо при самостоятельном написании всего конфига GRUB.

Пример конфига с паролями

Здесь «Arch Linux» разрешено загружать без авторизации, «Windows» разрешено загружать пользователю second с паролем dnjhjq, а активировать «Boot next disk», позволяющий загрузиться с подключённой флешки, может только администратор по имени root, который никому не сказал свой пароль.

set default=0
set timeout=5
set superusers=root

password second dnjhjq
password_pbkdf2 root grub.pbkdf2.sha512.10000.C2DDC47FC5C7341CE73DBD6728E8D29A.AA5A1DEA93E23358E908301439DEC488

menuentry "Arch Linux" --unrestricted {
 linux /boot/vmlinuz-linux root=LABEL=Arch_root rw resume=LABEL=Arch_swap
 initrd /boot/initramfs-linux.img
}

submenu "Windows" --users=second {
 set root=hd0,1
 chainloader +1
}

submenu "Boot next disk" {
 set root=hd1
 chainloader +1
}

Визуальная настройка

GRUB2 предоставляет возможность менять способы отображения и внешний вид меню.

Цвета меню

Цвета меню GRUB2 задаются в переменных menu_color_normal (общие цвета текста/фона) и menu_color_highlight (цвета текста/фона выделенной строки). Например, цвета по умолчанию для Arch задаются в конфиге GRUB (grub.cfg) так:

set menu_color_normal=light-blue/black
set menu_color_highlight=light-cyan/blue

или в настройках /etc/default/grub конфигуратора grub-mkconfig так:

GRUB_COLOR_NORMAL="light-blue/black"
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

Список доступных в GRUB2 цветов можно найти на сайте.

Скрытое меню

grub-mkconfig умеет «скрывать» меню так, что оно появляется на экране только при нажатии клавиши ESC до истечения таймаута. Чтобы использовать эту его возможность, нужно раскомментировать в /etc/default/grub строки

GRUB_HIDDEN_TIMEOUT=5
GRUB_HIDDEN_TIMEOUT_QUIET=true

В конфиг GRUB (grub.cfg) для получения аналогичного результата можно добавить такой код:

set timeout=5

echo -n "Press ESC to see the menu... "
if sleep --verbose --interruptible $timeout
then set timeout=0
else unset timeout
fi

Здесь не задаётся отдельный таймаут для скрытого и видимого меню, а используется общий из переменной timeout. После вывода надписи запускается ожидание sleep с в выводом обратного отсчёта --verbose и прерыванием по ESC --interruptible . Если отсчёт не был прерван, таймаут уменьшается до нуля set timeout=0, и меню проскакивает без вывода на экран. В противном случае таймаут отключается вообще unset timeout, чтобы отсчёт не начался повторно после показа меню.

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

Настройка параметров режима экрана

Проверка доступных режимов экрана

GRUB2 может работать в текстовом и графических режимах экрана. Актуальный список режимов доступных средствами BIOS или UEFI на конкретной машине, можно получить, выполнив команду videoinfo в консоли загрузчика. На разных машинах, с разными графическими адаптерами, прошивками и мониторами, этот список может существенно отличаться.

Выбрав нужный режим желательно предварительно его проверить с помощью команды videotest режим в той же консоли, примерно так:

videotest 1280x1024x32

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

Примечание: Тест графики можно запускать только из текстового режима.

Важно: Автоматический генератор конфигурации включает графический режим по умолчанию, без проверки. Если графический режим уже задан в конфигурации неудачно и вы не видите на экране интерфейса GRUB2 при загрузке, включите текстовый режим в настройках конфигуратора.

Текстовый режим

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

unset lang
terminal_output console

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

GRUB_GFXMODE=console

или же задать текстовый режим только для загрузки ядра:

GRUB_GFXPAYLOAD_LINUX=text
Графические режимы

GRUB2 позволяет задать режим экрана для самого загрузчика в переменной gfxmode , и отдельно режим, который будет использоваться ядром Linux при загрузке, через переменную gfxpayload

Эти режимы могут быть разными:

grub.cfg
set gfxmode=1024x768x32
set gfxpayload=1280x1024x16
/etc/default/grub
GRUB_GFXMODE=1024x768x32
GRUB_GFXPAYLOAD_LINUX=1280x1024x16

или одинаковыми:

grub.cfg
set gfxmode=1280x1024x32
set gfxpayload=$gfxmode
/etc/default/grub
GRUB_GFXMODE=1280x1024x32
GRUB_GFXPAYLOAD_LINUX=keep

Также можно задать только один из них, не задавая другой.

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

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

Существует также старый, специфический для BIOS, способ задать VESA-режим – через параметр ядра Linux vga, например vga=790

Возможные значения для параметра vga, в зависимости от количества цветов и пикселей на экране, можно найти в этой таблице

+-----+--------------------------------------------+
|     |  640x480    800x600   1024x768   1280x1024 |
+-----+--------------------------------------------+
| 256 | 0x301=769  0x303=771  0x305=773  0x307=775 |
| 32K | 0x310=784  0x313=787  0x316=790  0x319=793 |
| 64K | 0x311=785  0x314=788  0x317=791  0x31A=794 |
| 16M | 0x312=786  0x315=789  0x318=792  0x31B=795 |
+-----+--------------------------------------------+

Однако в некоторых версиях BIOS могут использоваться и другие коды режимов. Актуальные значения можно получить из вывода команды videoinfo в консоли GRUB или же выполнить в терминале запущенной ОС GNU/Linux команду

sudo hwinfo --framebuffer

Команда hwinfo доступна в репозитории community.

Графический режим, шрифт и обои

Установка переменной gfxmode сама по себе НЕ переключает GRUB в графический режим. Чтобы перейти в графику, требуется:

  • задать режим в переменной gfxmode
  • загрузить командой loadfont хотя бы один шрифт
  • загрузить модуль поддержки графического режима (vbe для BIOS, либо efi_gop и efi_uga для UEFI)
  • и модуль графического терминала gfxterm
  • после всего этого запустить графический терминал командой terminal_output gfxterm

GRUB2 поддерживает растровые шрифты в собственном формате pf2. Шрифт Unifont включен в пакет grub под именем unicode.pf2, и при установке загрузчика командой grub-install автоматически копируется в каталог /boot/grub/fonts

В графическом режиме GRUB2 также позволяет установить обои командой background_image . Поддерживаются изображения в форматах tga, png и jpeg, для каждого из них требуется предварительно загрузить соответствующий модуль. Максимальный поддерживаемый размер изображения зависит от вашего оборудования.

В настройках конфигуратора /etc/default/grub обои можно задать так:

GRUB_BACKGROUND=/boot/grub/themes/starfield/starfield.png

Пример графического режима с установкой дефолтного шрифта и обоев из дефолтной темы оформления. Нужные модули графического режима выбираются автоматически.

if [ "$grub_platform" = "pc" ] ; then
 insmod vbe                        # загружаем модуль для BIOS
else
 insmod efi_gop                    # или для EFI
 insmod efi_uga
fi
loadfont $prefix/fonts/unicode.pf2  # загружаем шрифт
set gfxmode=auto
insmod gfxterm                      # загружаем модуль графического терминала
terminal_output gfxterm             # эта команда запускает графику
insmod png                          # для этих обой требуется модуль png
background_image $prefix/themes/starfield/starfield.png

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

Важно: Не пытайтесь использовать русский язык в текстовом режиме! Если требуется возврат в текстовый терминал командой terminal_output console , следует предварительно отключить русский язык командой unset lang , иначе вместо надписей на русском останутся одни вопросы.

Чтобы использовать в GRUB свои шрифты, нужно предварительно конвертировать их в формат pf2. Для этого в состав пакета grub входит утилита grub-mkfont . Лучше всего она работает с растровыми шрифтами в формате BDF

grub-mkfont шрифт.bdf -o шрифт.pf2

и векторными в формате TTF

grub-mkfont шрифт.ttf -s размер -o шрифт.pf2
Установка шрифта на примере Terminus

Пакет terminus-font для GRUB не подходит, требуется скачать с официального сайта его исходники, они как раз в формате BDF. Далее остаётся распаковать архив, конвертировать файл со шрифтом нужного размера, и скопировать в каталог, доступный для GRUB:

 $ tar xf terminus-font-4.38.tar.gz
 $ cd terminus-font-4.38/
 $ ls *.bdf
ter-u12b.bdf  ter-u14v.bdf  ter-u18b.bdf  ter-u22b.bdf  ter-u28b.bdf
ter-u12n.bdf  ter-u16b.bdf  ter-u18n.bdf  ter-u22n.bdf  ter-u28n.bdf
ter-u14b.bdf  ter-u16n.bdf  ter-u20b.bdf  ter-u24b.bdf  ter-u32b.bdf
ter-u14n.bdf  ter-u16v.bdf  ter-u20n.bdf  ter-u24n.bdf  ter-u32n.bdf
 $ grub-mkfont -v ter-u16b.bdf -o ter-u16b.pf2
Font name: Terminus Bold 16
Max width: 8
Max height: 16
Font ascent: 12
Font descent: 4
Number of glyph: 879
 $ sudo cp ter-u16b.pf2 /boot/grub/fonts/

Пример фрагмента конфига GRUB со шрифтом Terminus и русским языком:

loadfont $prefix/fonts/ter-u16b.pf2
set gfxmode=auto
set lang=ru      # включаем русский язык
insmod vbe
insmod gfxterm
terminal_output gfxterm
Проверка загрузки шрифтов

Если шрифты должны были быть загружены, но на экране выглядят неправильно, проверить это можно в консоли GRUB, с помощью команды lsfonts, которая выводит список успешно загруженных шрифтов.

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

loadfont $prefix/themes/тема/шрифт.pf2

При попытке загрузить несовместимый шрифт будут выдаваться сообщения об ошибках.

Графическая тема оформления

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

Тема включает в себя файл описания theme.txt, а также может содержать элементы картинок для «рисования» меню, шрифты и обои.

В пакет grub входит дефолтная тема оформления, при установке командой grub-install она копируется в каталог /boot/grub/themes/starfield/ . Тему для GRUB требуется прописывать в виде полного пути к файлу описания темы. В настройках конфигуратора /etc/default/grub это делается так:

GRUB_THEME="/boot/grub/themes/starfield/theme.txt"

В файлах конфигурации GRUB путь к файлу описания темы требуется записать в переменную theme ДО переключения в графический режим. Чтобы тема могла использовать указанные в ней элементы, до перехода в графику также нужно загрузить модули для использованных в ней форматов картинок (чаще всего png) и загрузить все имеющиеся в ней шрифты.

Пример загрузки темы оформления, входящей в пакет grub:

dir=$prefix/themes/starfield # каталог с темой
set theme=$dir/theme.txt     # задаём файл описания
insmod regexp                # этот модуль позволяет использовать шаблоны в именах файлов
loadfont $dir/*.pf2          # загружаем по шаблону сразу все шрифты из темы
insmod png                   # модуль поддержки картинок
set gfxmode=auto
set lang=ru
insmod gfxterm
insmod vbe
terminal_output gfxterm      # включаем графику

Некоторые темы оформления GRUB можно найти в AUR.

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

Автоматизация в меню

Запоминание выбранного пункта меню

В настройках конфигуратора запоминание включается так:

/etc/default/grub
GRUB_DEFAULT="saved"
GRUB_SAVEDEFAULT="true"

Пример реализации запоминания в конфиге GRUB2 приведён ниже.

Однократная загрузка заданного без смены дефолта

Существует утилита grub-reboot, с её помощью можно из-под ОС запланировать однократную загрузку другого пункта меню, например так:

grub-reboot "Windows XP"

В генерированном меню это работает, если перед запуском grub-mkconfig в /etc/default/grub была строка

GRUB_DEFAULT="saved"

Пример реализации однократного выбора в конфиге GRUB2 приведён ниже.

Пример конфига GRUB с реализацией запоминания

set timeout=5
set default=0
load_env # восстанавливаем переменные из файла

if [ -n "$next_entry" ] ; then   # если задан временный выбор
 set default="$next_entry"       # временно подменяем дефолт
 unset next_entry                # и очищаем временный выбор
 save_env next_entry
fi                               # временный дефолт не сохраняем

export default    # на случай использования savedef внутри submenu

function savedef {     # Создаём функцию по имени savedef
 if [ -n "$1" ]               # выбор берём либо
  then def="$1"               # из первого параметра
  else def="$chosen"          # либо из $chosen, переменной GRUB
 fi                           # с заголовком выбранного пункта меню
 if [ "$def" != "$default" ] ; then   # Если выбор отличается
  set default="$def"                  # от текущего дефолта -
  save_env default                    # сохраняем его
 fi
 unset def
}                    # конец функции

menuentry "Arch Linux" {
 savedef
 linux /boot/vmlinuz-linux root=LABEL=Arch_root rw
 initrd /boot/initramfs-linux.img
}

menuentry "Arch Linux fallback" {
 savedef "Arch Linux" # в следующий раз выберется "Arch Linux"
 linux /boot/vmlinuz-linux root=LABEL=Arch_root rw
 initrd /boot/initramfs-linux-fallback.img
}

submenu "Windows XP" {
 savedef
 set root=hd0,1
 ntldr /ntldr
}

В данном примере используется предоставляемая GRUB2 возможность сохранения переменных между сеансами.

Команда load_env загружает из файла все сохранённые в нём переменные.

Команда save_env сохраняет указанные переменные в файл.

В переменную chosen после выбора пункта меню помещается его заголовок. При выборе пунктов вложенных меню, в переменную записывается весь «путь», состоящий из последовательно выбранных заголовков, разделённых знаком «>«. Например, если в подменю «Fallback» выбран пункт «Arch linux-lts», в переменной будет "Fallback>Arch linux-lts".

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

Переменные сохраняются в файле /boot/grub/grubenv . Так как GRUB не умеет корректно модифицировать файловые системы, файл должен быть заранее создан, а длина его при перезаписи не должна меняться, поэтому конец файла до нужной длины в 1024 байта всегда заполнен символами ### . Для просмотра и изменения при загруженной ОС сохранённых в этом файле переменных, настоятельно рекомендуется использовать утилиту grub-editenv, либо grub-reboot и grub-set-default.

Динамическое меню

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

В этом примере загрузчик сам, «на лету», находит в /boot/ все установленные ядра Arch Linux и образы initramfs, правильно группирует их и формирует меню для их загрузки, а после выбора пункта меню запоминает его. При загрузке в параметры ядра подставляется автоматически найденный загрузчиком UUID корневого раздела.

В grub.cfg пишем только ссылку. (причину см. выше.)

/boot/grub/grub.cfg
. $prefix/main.cfg

Пользовательские настройки подключаются из отдельного файла settings.cfg

/boot/grub/settings.cfg
set menu_color_normal=white/blue
set menu_color_highlight=white/black
set timeout=5
set default=0

boot=/boot
probe -s UUID -u $root    # автоматически определяем UUID корня
opts="root=UUID=$UUID rw" # и подставляем его в параметры ядра
addimg=$boot/intel-ucode.img # включаем обновление микрокода CPU intel

load_env

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

/boot/grub/main.cfg
# Подключаем файл настроек
. $prefix/settings.cfg

# Поддержка однократного выбора
if [ -n "$next_entry" ] ; then
 set default="$next_entry"
 unset next_entry
 save_env next_entry
fi

export default

# Описываем функцию запоминания
function savedef {
 if [ -n "$1" ]
 then def="$1"
 else def="$chosen"
 fi
 if [ "$def" != "$default" ] ; then
  set default="$def"
  save_env default
 fi
 unset def
}

# Подключаем динамическое меню
. $prefix/dynamic.cfg

# Подключаем файл для дополнительных пунктов меню, если он есть
c="$prefix/custom.cfg"
if [ -f "$c" ] ; then
 . "$c"
fi

Скрипт поиска ядер и генерации меню:

/boot/grub/dynamic.cfg
insmod regexp

initrd=initrd
if [ -n "$addimg" -a -f "$addimg" ] ; then
 initrd="$initrd $addimg"
fi

kpref="$boot/vmlinuz-"
ipref="$boot/initramfs-"

kernels=
for kfile in "$kpref"* ; do
 k=
 regexp -s k "$kpref"'(.+)' "$kfile"
 kernels="$kernels $k"
done

for ifile in "$ipref"* ; do

 kname=
 for k in $kernels; do
  if regexp "$k" "$ifile" ; then
   if ! regexp "$kname" "$k" ; then continue; fi
   head="Arch $k"
   if regexp -s s "$k"'-(.+).img' "$ifile"
   then head="$head $s"; fi
   kname="$k"
  fi
 done

 if [ -n "$kname" ] ; then
  menuentry "$head" --source="savedef
linux $kpref$kname $opts
$initrd $ifile"
 fi

done

Консоль GRUB2

Загрузчик GRUB2 выполняет свой файл конфигурации как шелл-подобный скрипт, состоящий из команд. Все те же команды он позволяет выполнять и в интерактивном режиме, с помощью консоли.

Нормальная консоль

Запуск консоли

Если вы видите в терминале GRUB2 приглашение вида grub> , значит вы попали в его нормальную консоль.

GRUB2 открывает нормальную консоль, если:

  • при загрузке не найден файл конфигурации grub.cfg;
  • файл конфигурации найден и выполнен, но в ходе его выполнения так и не было создано меню, и не была выполнена команда boot (см. ниже), либо её выполнение завершилось неудачно;
  • в меню загрузчика нажата клавиша «c«.

Команды, полезные в консоли GRUB2

Кроме уже описанных в части «Настройка», в консоли GRUB2 могут пригодиться:

  • Переменная pager . Присвоение ей единицы командой pager=1 поможет вам полностью читать вывод следующих команд, если он не помещается на экран.
  • Команда help . Без параметров выводит список всех поддерживаемых в текущей конфигурации команд загрузчика. При вызове вида help слово выводит справку по командам, в которых присутствует заданное слово. Например, команда help normal покажет справку по командам normal и normal_exit.
  • Команда ls без параметров выводит список дисков и разделов, доступных в данный момент загрузчику. С ключом -l показывает подробные сведения о каждом из них – размер, метку, UUID и тип файловой системы. С ключами -lh выводит размеры в «человекочитаемом» виде. С параметром в виде диска или раздела выводит сведения только о нём, например ls (hd0,1) выведет сведения о первом разделе на нулевом диске.
  • Команда ls с параметром в виде полного пути к каталогу выводит содержимое каталога. С ключом -l показывает подробные ведения о каждом файле и каталоге, с ключами -lh выводит размеры и даты в «человекочитаемом» фромате. К примеру, команда ls -lh /boot подробно выведет содержимое каталога /boot на текущем (в переменной root) разделе, а ls (hd0,1)/ покажет список файлов и каталогов в корневом каталоге раздела hd0,1.
  • Команда set без параметров. Выводит список всех переменных со значениями.
  • Команда echo аналогична такой же команде обычного шелла, и выводит всё, что в ней написано. Может использоваться для вывода переменных, например echo $cmdpath $prefix $root покажет значения трёх самых важных переменных загрузчика.
  • Команда cat аналогична одноимённой команде шелла, и выводит содержимое заданного файла в консоль. Так как перенаправления ввода-вывода GRUB2 не поддерживает, использовать её можно только для просмотра текстовых файлов, например, конфига самого загрузчика, fstab, и т.д.
  • Команда boot запускает образ ядра, другого загрузчика, или EFI-приложения, загруженный перед этим командами linux, initrd, ntldr, chainloader и некоторыми другими. В отличии от меню GRUB, где запуск загруженных образов происходит автоматически после завершения кода пункта меню, в консоли выполнение этой команды обязательно – без неё загруженный образ сам не запустится.

В нормальной консоли GRUB2 поддерживает возврат к предыдущим командам и автодополнение команд, каталогов и файлов по нажатию клавиши TAB, как в консоли Linux.

Пример загрузки Arch Linux из консоли загрузчика

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

probe -s UUID -u $root
linux /boot/vmlinuz-linux rw root=UUID=$UUID
initrd /boot/initramfs-linux.img
boot

Пример загрузки с внешнего диска из консоли

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

root=hd1
chainloader +1
boot

Пример конфига с загрузкой без меню

grub.cfg
set timeout=3

probe -s UUID -u $root
linux /boot/vmlinuz-linux rw root=UUID=$UUID
initrd /boot/initramfs-linux.img

if sleep -vi $timeout
then boot
fi

В этом примере GRUB2 загружает с диска образы ядра и initramfs, ждёт 3 секунды, и запускает ядро.

Если же в течении этих секунд пользователь нажмёт ESC, он попадёт в консоль загрузчика. Так как ядро уже загружено, для продолжения загрузки достаточно набрать команду boot в консоли.

Аварийная консоль

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

Аварийная консоль GRUB2 встроена в стартовый образ загрузчика, и запускается в случаях, когда GRUB2 не может самостоятельно перейти в «нормальный» режим. Такое может случиться, если ядро GRUB2 при загрузке не нашло каталог со своими файлами и модулями по пути, указанному в переменной prefix.

Значение этой переменной обычно имеет вид (диск,раздел)/путь, например (hd0,msdos6)/boot/grub. Обозначение диска подставляется при старте загрузчика, а остальная часть (начиная с запятой) «зашивается» в стартовый образ ещё на этапе установки. Это значит, что после изменения любого из содержащихся в $prefix параметров (таблицы разделов, номера раздела, пути к файлам grub), загрузчик требуется переустанавливать, в противном случае он «вывалится» в аварийную консоль.

В режиме аварийной консоли GRUB2 понимает всего 4 команды: set , unset , ls , и insmod . Повтор и автодополнение не поддерживаются, команда ls поддерживается в урезанном виде – без ключей и с выводом в сведениях о разделах только типа файловой системы, если она опознана. По-умолчанию в стартовый образ загрузчика включается модуль для поддержки таблицы разделов и файловой системы только для того раздела, на который устанавливается GRUB2. Остальные модули должны загружаться уже из файлов, если загрузчику удастся их найти.

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

Если вы попали в аварийную консоль, наберите для начала команду set. Вы увидите значения трёх главных переменных GRUB2. В переменной cmdpath будет обозначение диска, либо полный путь к EFI-файлу, из которого стартовал образ загрузчика. В переменной prefix будет тот путь, по которому должен был быть каталог с остальными файлами загрузчика. В переменной root будет текущий диск или раздел, скорей всего совпадающий с тем, что в $prefix. Попробуйте команды

ls
ls $root
ls $prefix

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

Если в переменной $root оказался не тот или несуществующий раздел, можно проверять командами вида ls (диск,раздел)/ каждый раздел из тех, что вывела первая команда, пока не найдётся нужный. Если он нашелся – к примеру, оказался hd0,msdos5 вместо hd0,msdos6, и читается – запишите его в переменные:

root=hd0,5
prefix=($root)/boot/grub

Если раздел правильный, а неправильный каталог (команда ls $prefix выдаёт ошибку или не то, что нужно), запишите в переменную правильный путь, допустим такой:

prefix=($root)/grub

Если у вас получилось найти правильный диск, раздел и каталог, и вы успешно прописали из в переменные, остаётся загрузить модуль «normal» и выполнить одноимённую команду (она станет доступна после загрузки модуля), чтобы перейти в «нормальный» режим загрузчика:

insmod normal
normal

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

Запуск GRUB2 из других загрузчиков

  • Загрузочный EFI-образ GRUB2 в режиме UEFI может быть запущен так же, как любое EFI-приложение.
  • Загрузочный образ BIOS-сборки GRUB2 новых версий может быть запущен по стандарту Multiboot из других загрузчиков. См. также главу «Генерация загрузочного образа для BIOS без установки».

Загрузка из старых версий GRUB

Код конфига для GRUB Legacy, с загрузкой GRUB2:

menu.lst
default 0
timeout 1

title       Chainload into GRUB v2
root        (hd0,7)
kernel      /boot/grub/i386-pc/core.img

Загрузка из syslinux

Пример загрузки GRUB2 из syslinux приведён в статье о нём.

Примеры исправления проблем

Сообщение о невозможности встраивания в MBR

grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.
            However, blocklists are UNRELIABLE and its use is discouraged.
grub-setup: error: If you really want blocklists, use --force.

Эта ошибка может возникнуть, когда вы попытаетесь установить в виртуальную машину VMware. Читайте больше об этом здесь.

Это также может случится, если первый раздел начинается сразу после MBR, без необходимого места в 60 блоков перед первым разделом.

Смотрите также

  • Статья о GNU GRUB на Википедии
  • Официальное руководство пользователя GRUB (англ.)
  • Статья о GRUB на Ubuntu Wiki (англ.)
  • Загрузка на UEFI-системах (англ.)
  • Загрузочный раздел BIOS (англ.)
  • Настройка GRUB (англ.)
  • Загрузка с помощью GRUB (англ.)

Contents

  1. GRUB 2 Initial Installation

    1. Installation Options (LiveCD)

      1. Using the Entire Drive ( «Erase disk and install Ubuntu» ):
      2. Installing Ubuntu to a Specific Partition («Something Else»):
      3. BIOS/MBR Notes
      4. BIOS/GPT Notes
      5. UEFI
    2. Post-Installation
  2. Reinstalling GRUB 2

    1. Reinstalling GRUB 2 from a Working System
    2. Fixing a Broken System

      1. via Boot-Repair Graphical Tool
      2. via GRUB2 Rescue mode
      3. via the LiveCD terminal
      4. via Partition Files Copy
      5. via ChRoot
      6. Boot repair after a Windows Upgrade on Ubuntu 14.04 (non-RAID)
    3. Purging & Reinstalling GRUB 2

      1. via Boot-Repair Graphical Tool
      2. via Terminal Commands
    4. Post-Restoration Commands
  3. Moving GRUB 2
  4. GRUB Legacy Upgrades and Downgrades
  5. Related Links

This page details the procedures for installing and reinstalling GRUB 2. The information applies to most versions of GRUB 2, but is specifically written for version 1.99. GRUB 1.99 is included on Ubuntu releases 11.04 (Natty Narwhal) and later. For more information on a variety of GRUB 2 topics, please visit the GRUB2 main page. For information on converting to or from GRUB Legacy, please view the Grub2/Upgrading community doc.

The GRUB 2 bootloader is included on all currently-supported versions of the Ubuntu family. GRUB 2 can accomodate traditional computer firmware such as BIOS as well as the newer EFI/UEFI standards. It is compatible with MBR, GPT and other partitioning tables.

All references to GRUB pertain to GRUB 2. Where GRUB 0.97 is discussed, it will be referred to by version number or as GRUB Legacy.

GRUB 2 Initial Installation

GRUB 2 installation is automatically incorporated into a normal Ubuntu installation. Input required by the user for the initial setup is very simple. If the installation will use the entire disk no specific GRUB selections are necessary. If the user wants to use a specific partition for Ubuntu the user must select the Ubuntu partition and the drive on which to embed the bootloader information.

The main GRUB 2 folder locations include /boot/grub/ and /etc/grub.d/. User preferences are stored in the /etc/default/grub file. The GRUB 2 menu is built by information contained in /boot/grub/grub.cfg.

Installation Options (LiveCD)

Using the Entire Drive ( «Erase disk and install Ubuntu» ):

Install on entire drive: The user should select a drive on which Ubuntu and GRUB 2 will be installed. GRUB 2 will overwrite the drive’s boot information and place the GRUB 2 files in the appropriate locations.

Installing Ubuntu to a Specific Partition («Something Else»):

When using the «Something Else» option, you will be offered to choose the «Device for bootloader installation». Please select: * either the disk (eg /dev/sdX, not /dev/sdXY) on which the BIOS is setup to boot (recommended for normal use) * OR the partition (eg /dev/sdXY, not /dev/sdX) on which Ubuntu (/boot, else /) will be installed (only if you want to chainload it from another bootloader; if any doubt, do NOT choose this)

important.png Never choose any other partition! (this may break the boot of your other systems, see Bug #1049549).

g2_installing_partition.png

info.png On a system with multiple drives and OS’s, the user can preserve the original bootloader by installing GRUB 2 on another drive. To accomplish this:

  • specify the disk (eg /dev/sdX, not /dev/sdaXY) not currently used to boot the system for the bootloader location.
  • After the installation is complete, change the boot order (via BIOS setup) so that the disk to which the GRUB information was written is the one booted first.
  • If the user wishes to restore booting with the original bootloader, change the boot order back to the original drive.

BIOS/MBR Notes

GRUB 2 normally writes its bootloader information to an area just beyond the Master Boot Record and before the first partition. Some software on non-Linux operating systems also used this embedded area and broke the system by overwriting the GRUB 2 information on dual-boot systems. GRUB 2 now can recognize this potential problem and avoid it.

The bootloader information does not have to be installed to the embedded area of the MBR. It may also bypass the MBR entirely and be installed to a specific partition. In doing this, the location of the GRUB 2 files are specified by using blocklists. This option is not available via an Ubuntu GUI installation but can be made via the terminal after installation. Even then this method is not as reliable as writing to the MBR and is not recommended by the GRUB developers.

BIOS/GPT Notes

If the BIOS is setup to boot the disk in Legacy/mbr mode, installing GRUB2 on a GPT (GUID Partition Table) disk requires a dedicated BIOS boot partition with a recommended size of at least 1 MiB. This partition can be created via GParted or other partitioning tools, or via the command line. It must be identified with a bios_grub flag. The necessary GPT modules are automatically included during installation when GRUB 2 detects a GPT scheme.

UEFI

GRUB 2 is compatible with EFI/UEFI and will load the necessary modules during installation. For information on this topic, please visit the UEFI community documentation.

Post-Installation

At the conclusion of a normal installation using the default entries:

  • GRUB 2 will be the default bootloader for the computer.
    • GRUB 2 will have written information to the designated drive’s boot area pointing to the Ubuntu installation’s GRUB 2 files. On earlier versions of GRUB 2 on a BIOS systems any information previously contained in the area just beyond MBR will have been overwritten. An improvement to GRUB 2 allows it to write the boot information to another area if a non-Linux application has already used this area.
    • The GRUB 2 files will normally be located in the /boot/grub and /etc/grub.d folders and the /etc/default/grub file in the partition containing the Ubuntu installation.

    • If another Ubuntu/Linux distribution controlled the boot process, it will be replaced by the GRUB 2 settings in the new installation.
    • If the boot was controlled by Windows, the MBR information will now point to the Ubuntu installation and GRUB 2 will control the boot process. The GRUB 2 menu will include an entry for Windows if it found what it considers the necessary Windows boot files.
      • Windows boot files in the Windows partition are not affected by the GRUB 2 installation. Only the MBR data is changed. Windows control of the boot process can be obtained by selecting a Windows entry in the GRUB 2 menu during boot.
  • If GRUB has detected another OS it will display a menu so the user may make a selection. If no selection is made, Ubuntu will boot after a brief timeout.
  • If GRUB has detected no other operating systems, no menu will be displayed and the computer will boot the new Ubuntu installation. If the user wishes to display the menu, hold down the SHIFT key as the computer boots.

To view the GRUB 2 file system and configuration options please refer to Grub 2 community documentation page.

Reinstalling GRUB 2

The user may wish to reinstall GRUB 2 for a variety of reasons, including:

  • After installing another operating system which installed its own bootloader, reinstall GRUB2 to return control to the desired OS. When an operating system is added on a multiboot computer it will generally take command of the boot process. Reinstalling GRUB 2 from a within the desired OS will return control of the boot process to that OS.
  • Add the boot information to an additional drive. GRUB 2 can be installed on multiple drives — all pointing to the same operating system. This provides a backup in case the MBR or boot record data on a particular drive becomes corrupted.
  • Replace missing files
  • Repair a broken system, such as when the user sees only «GRUB» on a black screen with no prompt or when the user cannot boot using GRUB 2’s rescue mode options.
  • Upgrade from Grub Legacy

When using the grub-install command, the boot information is updated and written to the designated drive, missing — but not corrupted or intentionally deleted — files are restored. Specifically the core.img, grubenv, and device.map are updated and missing modules restored. If missing, the grub folder will be recreated. The grub-install command does not generate a new GRUB 2 menu (grub.cfg).

Reinstalling GRUB 2 from a Working System

If Ubuntu is operating normally, boot into the working installation and run the following command from a terminal.

  • X is the drive (letter) on which you want GRUB to write the boot information. Normally users should not include a partition number, which would produce an error message as the command would attempt to write the information to a partition.

    sudo grub-install /dev/sdX  # Example: sudo grub-install /dev/sda

This will rewrite the MBR information to point to the current installation and rewrite some GRUB 2 files (which are already working). Since it isn’t done during execution of the previous command, running sudo update-grub after the install will ensure GRUB 2’s menu is up-to-date.

Fixing a Broken System

If a system has become unbootable due to a GRUB 2 failure or corrupted MBR/boot sector, there are various methods for reinstalling GRUB 2. The simplest is listed first, followed by more complicated methods.

via Boot-Repair Graphical Tool

Boot-Repair is a GUI application which can fix a variety of GRUB 2 problems. It can be used either from a LiveCD, its own CD, or during a normal Ubuntu session. In addition to providing a simple user interface, Boot-Repair also includes the ability to run a script to gather details of the system which can be used for troubleshooting help on various forums and IRC channels.

Please refer to the Boot-Repair community documentation for instructions on how to install and run this application.

via GRUB2 Rescue mode

GRUB 2 provides a rescue mode which allows the user to attempt to repair GRUB 2 from a special GRUB terminal during boot. Refer to the Grub2 Command_Line_and_Rescue_Mode section for information on GRUB terminal operations.

via the LiveCD terminal

This method uses the terminal from a LiveCD. The user must know the device name/partition of the installed system (sda1, sdb5, etc), which is then mounted from the LiveCD. GRUB 2 files are copied from the LiveCD libraries to the proper locations and MBR.

This operation will write to the MBR and restore the modules and core.img to /boot/grub. It will not replace or restore grub.cfg or fix corrupted files. Boot the LiveCD, select «Try It», and open a terminal.

info.png When using a LiveCD, due to GRUB 2 changes between Ubuntu releases, it is recommended that the user boots a LiveCD of the same release (11.10, 12.04, etc) as the release to be repaired. If the user has installed a different version of GRUB 2, use a LiveCD with the same GRUB 2 version.

If necessary, use the fdisk command to help determine the partition on which Ubuntu is installed. The fdisk option «-l» is a lowercase «L». Look for one of the appropriate size or formatting. Running sudo blkid may provide more information to help locate the proper partition, especially if the partitions are labeled. The ‘

  • sudo fdisk -l
    sudo blkid

In the following commands:

  • Use the partition number of the Ubuntu installation with mount command.

  • Do not use the partition number with the grub-install command.

  • X is the drive letter (a, b, c, etc.); Y is the partition number (1, 5, etc).

  • —boot-directory is the folder in which the GRUB folder is located. This is normally /boot but should be changed if the grub folder is located elsewhere.

  • On systems with a separate /boot partition, that partition should be mounted to /mnt/boot. For instance: sudo mount /dev/sda6 /mnt/boot

  • grub-install will restore missing files in the grub folder but will not restore intentionally deleted or corrupted files. To accomplish these tasks GRUB 2 must be completely removed and reinstalled.

    sudo mount /dev/sdXY /mnt # Example: sudo mount /dev/sda5 /mnt
    sudo grub-install --boot-directory=/mnt/boot /dev/sdX # Example: sudo grub-install --boot-directory=/mnt/boot /dev/sda

    If Ubuntu is installed on B-tree file system i.e. btrfs then /boot changes to /@/boot in above commands such that :

    sudo grub-install --boot-directory=/mnt/@/boot /dev/sdX # Example: sudo grub-install --boot-directory=/mnt/@/boot /dev/sda

    For GRUB 2 version 1.98 and earlier (Ubuntu 10.04), the installation command is slightly different. Rather than designating the —boot-directory, the switch is —root-directory. In this case, the location changes to /mnt

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

If the user wishes to explore why the system failed, refer to Post-Restoration Commands section below.

via Partition Files Copy

This method does not work if GRUB has not already been installed, or if GRUB files have been deleted.

important.png This method talks about 9.10, so it may be obsolete.

It consists in locating and mounting the problem boot partition from the LiveCD. The files are then copied from the broken system’s /boot/grub directory to the proper locations and MBR. It requires fewer steps and fewer command line entries than the following CHROOT method. For users with separate system partitions, such as a separate /boot partition, or other special circumstances, using the CHROOT method may provide better results.

  1. Boot to the LiveCD Desktop.
  2. Mount the partition with your Ubuntu installation.
    1. From the Places menu, select and click the partition containing your Ubuntu installation to mount it.

      • grub2.places.devices.png

      • If the partition isn’t recognized, look for apartition of the appropriate size or label.
      • Once mounted, the user should see Ubuntu system directories such as /boot

  3. Open a terminal by selecting Applications, Accessories, Terminal from the menu bar.

  4. Run the grub-setup -d command as described below. This will reinstall the GRUB 2 files on the mounted partition to the proper location and to the MBR of the designated device.

    1. Determine the mount point by referring to the location box in Places. Replace XXXX in the command with the UUID, or replace /media/XXXX with the correct location if the partition is not mounted in /media. The designation may be a UUID, or a label, if the user has created one (see note).

    2. If the location window is not in the format shown, click on the icon to the left to change the presentation.
      • grub2.places.location.png

    3. When ready to copy the UUID/location, by highlighting it with the mouse. Paste it into the terminal by pressing the middle mouse button. If using the keyboard, use CTRL-SHIFT-arrow to select and CTRL-C to copy the location and CTRL-SHIFT-V to paste it into the terminal.

    4. The device/drive is designated by sdX, with X being the device designation. sda is the first device, sdb is the second, etc. For most users the MBR should be installed to sda, the first drive on their system.

      sudo grub-setup -d /media/XXXX/boot/grub /dev/sda

      Example:

      sudo grub-setup -d /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub /dev/sda

    5. If the user gets a «error: Cannot open /boot/grub/device.map» message, add the -m switch and path to the device.map to the command as follows:

      sudo grub-setup -d /media/XXXXX/boot/grub -m /media/XXXXX/boot/grub/device.map /dev/sda

      Example:

      sudo grub-setup -d /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub -m /media/7848138a-41a0-4eba-8aed-d1b625ac8759/boot/grub/device.map /dev/sda

    6. Other switches are available for use with the grub-setup command. In a terminal, type grub-setup —help for a list of available options.

    7. You may find you get a repeated «error: Cannot open /boot/grub/device.map» message. If this happens try rebooting. The UUID method may actually work but throws an error message falsely. Using the label name does not seem to evoke the same repeated error message.

  5. Reboot
  6. Refresh the GRUB 2 menu with sudo update-grub

  7. If the user wishes to explore why the system failed, refer to Post-Restoration Commands section below.

    info.png Disk Utility, introduced in Ubuntu 9.10, can easily assign labels to existing partitions. Access Disk Utility from the System, Administration menu or DASH.

via ChRoot

This method of installation uses the chroot command to gain access to the broken system’s files. Once the chroot command is issued, the LiveCD treats the broken system’s / as its own. Commands run in a chroot environment will affect the broken systems filesystems and not those of the LiveCD.

  1. Boot to the LiveCD Desktop. The CD should be 64bit (not 32bit) if the system to fix is 64 bit.
  2. Open a terminal. The method varies depending on the release.
  3. Assuming the normal system partition(s) are on a software RAID (otherwise skip this step): make sure the mdadm tools are installed in the Live CD environment (e.g. by executing sudo apt-get install mdadm). Then assemble the arrays:

    sudo mdadm --assemble --scan

  4. If using LVM:

    sudo sh -ec "apt-get install lvm2; vgchange -ay"

  5. If using bcache:

    sudo sh -ec "apt-get install software-properties-common; add-apt-repository ppa:g2p/storage; apt-get update; apt-get install bcache-tools"

  6. Determine your normal system partition. The following commands may be helpful. The fdisk switch is a lowercase «L».

    sudo fdisk -l
    sudo blkid
    df -Th

  7. Mount your normal system partition. X is the drive letter. Y is the partition number:

    • Substitute the correct partition: sda1, sdb5, etc.

    sudo mount /dev/sdXY /mnt

    • Example 1: sudo mount /dev/sda1 /mnt

    • Example 2: sudo mount /dev/md1 /mnt

  8. Only if you have a separate boot partition (where sdXY is the /boot partition designation):

    sudo mount /dev/sdXY /mnt/boot

    • Example 1: sudo mount /dev/sdb6 /mnt/boot

    • Example 2: sudo mount /dev/md0 /mnt/boot

  9. Only if (some) of the system partitions are on a software RAID (otherwise skip this step): make sure the output of mdadm —examine —scan agrees with the array definitions in /etc/mdadm/mdadm.conf.

  10. Mount the critical virtual filesystems. Run the following as a single command:
    for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done

  11. Chroot into your normal system device:
    sudo chroot /mnt

  12. Reinstall GRUB 2 (substitute the correct device with sda, sdb, etc. Do not specify a partition number):

    grub-install /dev/sdX

    If the system partitions are on a software RAID install GRUB 2 on all disks in the RAID. Example (software RAID using /dev/sda and /dev/sdb):

    grub-install /dev/sda
    grub-install /dev/sdb

  13. Recreate the GRUB 2 menu file (grub.cfg)

    update-grub

  14. Exit chroot: CTRL-D on keyboard

  1. Reboot.
    • sudo reboot

Boot repair after a Windows Upgrade on Ubuntu 14.04 (non-RAID)

Boot repair may be required when updating Windows (e.g. Windows 8 to Windows 8.1). This will be required for example if the computer has been configured such that Windows/Ubuntu is selected by entering the bios and changing the boot mode between «secure boot»/UEFI and CMS respectively. To manually repair grub (http://howtoubuntu.org/how-to-repair-restore-reinstall-grub-2-with-a-ubuntu-live-cd / http://askubuntu.com/questions/88384/how-can-i-repair-grub-how-to-get-ubuntu-back-after-installing-windows );

  • Insert Ubuntu installation media (e.g. Ubuntu 14.04 LTS 64 bit DVD)
  • Ensure the bios boot order is set to read the media first (consult your motherboard/computer manual) and restart the computer
  • Select Ubuntu Live/Try mode (do not install)
  • Click on the purple Ubuntu search button — enter «gparted» and click on its icon
  • Determine the name of your linux partition (/dev/sdXY) — you should be able to identify it by recognising its format (most likely ext4) and size (number of GB)
  • Click on purple Ubuntu search button — enter «gnome-terminal» and click on its icon
  •  sudo mount /dev/sdXY /mnt [where sdXY has previously been identified using gparted]

  •  for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

  •  sudo chroot /mnt

  •  sudo grub-install /dev/sdX [note this is sdX not sdXY!]

  •  update-grub

  •  exit

  • restart PC and remove Ubuntu installation media

Purging & Reinstalling GRUB 2

The difference between using the grub-install command and purging & reinstalling GRUB 2 is that the latter completely removes all GRUB 2 files and system settings. Purging GRUB 2 is also a method to reset all configuration settings to the default values on a working system. This may correct GRUB 2 failures due to corrupted files and improper configurations as well as for missing folders/files deleted by the user. The GRUB 2 packages removed and reinstalled via this procedure include grub-pc, grub-common and, in Grub 1.99 and later, grub-gfxpayload-lists.

important.png During this operation the user will be temporarily left with no bootloader. Ensure you have a working Internet connection and access to the repositories before purging the GRUB 2 packages.

This procedure can be accomplished very simply via Boot-Repair, or via the terminal procedure below.

Remark: the Boot-Repair procedure will also remove custom files that may block the boot. It is also able to purge and reinstall GRUB2 for UEFI / LVM / RAID systems.

via Boot-Repair Graphical Tool

* Run Boot-Repair either from liveCD or from your installed session * Click «Advanced options» —> «GRUB options» tab * Tick the «Purge GRUB and reinstall it» option —> Apply

via Terminal Commands

The commands from a working Ubuntu installation or once within the ChRoot of a LiveCD are the same.

  1. If using the LiveCD, complete the steps up to and including the sudo chroot command (Step 9) in the previous section.

Run the following commands as root. If not in a ChRoot environment, preface each command with sudo.

  1. Update the repositories to get a list of the most recent packages available. Ensure you have a working Internet connection and access to the repositories. If you do not, STOP!
    apt-get update

  2. The following command will completely remove grub-pc and grub-common. In GRUB 1.99 and later, grub-gfxpayload-lists will also be removed.

    • You will be warned you are removing the bootloader. TAB to OK and press ENTER.

    apt-get purge grub-common

  3. Reinstall GRUB 2. When you run the following command:
    • You will be given the opportunity to add kernel options. TAB to OK. You will be given the opportunity to select the devices/drives on which to install GRUB 2. Select the appropriate drive(s) with the SPACEBAR. Normally you do NOT want to select any partitions. TAB to OK after selecting the drive(s), then press ENTER.

    apt-get install grub-pc

  4. If using the ChRoot procedure, Exit chroot then continue the ChRoot procedure at Step 13:

Post-Restoration Commands

Once the user can boot to a working system, the following commands may prove useful in locating and/or fixing the problem.

  • To refresh the available devices and settings in /boot/grub/grub.cfg

    • sudo update-grub

    To look for the bootloader location.

    • grub-probe -t device /boot/grub

    To install GRUB 2 to the sdX drive’s MBR or boot sector (sda, sdb, etc.)

    • sudo grub-install /dev/sdX

Moving GRUB 2

The command to change the GRUB 2 installation device or boot files is grub-install run as root. This command allows the user to modify the installation by setting the ROOT directory, preload modules, run specific setup files and more. When executed, grub-install may run one or more other commands, such as grub-probe, grub-mkimage, and grub-setup. Here are some considerations when running grub-install:

  • The grub-install command should be used rather than grub-setup under normal circumstances. grub-setup will be called by grub-install when needed.

  • The command should specify a device and when executed will install the required GRUB files to the location called for in the options.
    • If only the device is specified (sda, sdb, etc), the boot information will be written to the specified device’s boot record. (example: sudo grub-install /dev/sda )

    • If the —boot-directory= switch is used, the grub folder will will become a subfolder of the location specified. The —boot-directory switch is available in GRUB 1.99 and later.

  • If the user attempts to run the command with a specific partition (example: sudo grub-install /dev/sda6 ) a warning will be issued. Specifying a partition is not recommended due to the use of blocklists, which the developers consider unreliable. An option is provided on how to override this recommendation if the user still wishes to do so.

  • The list of options available for grub-install can be displayed in a terminal with grub-install —help

  • An alternative command to install or move GRUB 2 from a particular device is to use the dpkg-reconfigure command. As the command runs, the user will be offered the opportunity to add kernel options on the first page and to specify the devices/drives on the second screen. Use the TAB key to highlight OK and press ENTER to continue.

    • Add the desired kernel options (such as ‘noapic’), TAB to OK when finished, and press ENTER.

    • Select the drive(s) with the SPACEBAR. It is not recommended to select any partition. TAB to OK when finished and press ENTER.

GRUB Legacy Upgrades and Downgrades

For information on how to switch from GRUB Legacy to GRUB 2, or from GRUB 2 to GRUB Legacy, please refer to the Grub2/Upgrading community documentation.


Grub2

Grub2/Submenus

Grub2/Upgrading

Boot-Repair

GNU GRUB Manual


CategoryBootAndPartition CategoryBootAndPartition

Оригинал: GRUB bootloader — Full tutorial

Автор: Igor Ljubuncic

Дата публикации: 13 сентября 2007г.

Перевод: С. Русинов

Дата публикации перевода: 07 января 2013г.

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

Самое пугающее в Linux — это страшная фраза «начальный загрузчик». Главная причина этого состоит в том, что большинство новых пользователей Linux работали только с операционной системой Windows, в которой отсутствует полноценный начальный загрузчик или взаимодействие с ним пользователя сведено к минимуму. В мире Windows они никогда не задумывались о начальном загрузчике. Для них процесс загрузки операционной системы был полностью прозрачен. Самое большее, что они делали — это использовали Windows Recovery Console для решения возникающих проблем. Поэтому им необходимо познакомиться с одной из важнейших частей программного обеспечения компьютера — маленькой программой, выполняющей загрузку операционной системы.

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

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

Ну, если вы готовы, читайте дальше.

Но, сначала, важное предисловие. Эта статья состоит из поясняющей информации и примеров, которые помогут вам изучить GRUB. Конечно, все это есть на просторах интернета. Однако, новые пользователи Linux возможно потратят часы на поиск необходимой информации (особенно, если их ПК — персональный компьютер не загружается) немного разочаровавшись. Цель данного руководства предоставить простые и быстрые решения часто встречающихся проблем при мультизагрузочной установки и установки Linux операционных систем.

Содержание

  1. Все есть файл
  2. Введение

    1. Что такое LILO?
  3. Как работает GRUB?
  4. Терминология GRUB
  5. Конфигурация GRUB

    1. Установка GRUB

      1. GRUB на флоппи диске
      2. Установка GRUB по умолчанию
      3. Установка GRUB с помощью grub-install
    2. Настройка GRUB вручную (после установки)

      1. Резервное копирование!
      2. Добавление новой операционной системы в меню GRUB
  6. Типичные проблемы

    1. Как восстановить GRUB после удаления?

      1. Простой способ
      2. Сложный способ
    2. Windows установлена не на первом жестком диске (Своппинг)
    3. Несколько Windows операционных систем установлены на одном первом жестком диске (Скрыть/Показать)
    4. Вы изменили размер раздела; GRUB не работает
  7. Полезные инструменты
  8. Дополнительная информация (специально для фанатов)
  9. Ссылки

    1. Другие мои статьи
    2. Общая информация (в алфавитном порядке)

Все есть файл

Для того чтобы успешно овладеть секретами GRUB вы должны понять один из фундаментальных принципов *NIX-ориентированных операционных систем. Все есть файл. Даже жесткие диски и разделы рассматриваются как файлы. Это не магия. Если вы помните это, то рискованная задача изменения разделов жесткого диска покажется вам ничем не отличающейся от манипуляции с файлами в файловом менеджере (или командной строке).

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

Введение

GNU GRUB это загрузчик (то есть начальный или первичный загрузчик) способный загружать различные свободно распространяемые и проприетарные операционные системы. GRUB будет хорошо работать с Linux, DOS, Windows или BSD. Аббревиатура GRUB расшифровывается, как GRand Unified Bootloader (Главный унифицированный загрузчик).

GRUB является динамически конфигурируемым. Это означает, что пользователь может внести изменения в настройки GRUB во время загрузки. Например, изменить существующие загрузочные записи, добавить новые пользовательские записи, выбирать различные ядра операционной системы или модифицировать initrd.
GRUB также поддерживает режим логической адресации блоков (Logical Block Address). Это означает, что если ваш компьютер оснащен достаточно современной BIOS, то может быть доступно более 8ГБ (первые 1024 цилиндра) места на жестком диске. Соответственно и GRUB будет автоматически доступно все это пространство.

GRUB может быть запущен или установлен с любого устройства (гибкого диска — дискеты, жесткого диска, CD- ROM привода, USB диска, сетевого диска) и может загружать операционные системы из различных источников, включая сетевые диски. Также он может может распаковать образ операционной системы перед ее загрузкой.

Вы можете получить дополнительную информацию, гораздо больше, чем в данной статье, из официального руководства GNU GRUB Manual 0.97.

Что такое LILO?

Вы, наверное, слышали о другом начальном загрузчике Linux, который называется LILO (образовано из начальных букв LInux LOader, что означает загрузчик Linux). Не смотря на то, что LILO для многих пользователей Linux подходящий вариант, я считаю, что GRUB — лучший выбор по нескольким причинам:

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

Подводя итог изложенному выше, отметим, что GRUB выглядит победителем. Итак, позвольте показать, что эта малютка может делать.

Как работает GRUB?

Когда компьютер загружается, BIOS передает управление первому загрузочному устройству, которое может быть жестким диском, дискетой, CD-ROM или другим устройством, распознаваемым BIOS. Для простоты будем считать, что это жесткий диск.

Первый сектор жесткого диска называется Master Boot Record (MBR)(Главная Загрузочная Запись). Длина этого сектора всего 512 байт. Он содержит небольшой фрагмент кода (446 байт), который называется основной загрузчик, и таблицу разделов (64 байта). Таблица разделов содержит описание первичных и дополнительных разделов жесткого диска.

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

GRUB заменяет код MBR по умолчанию собственным кодом.

При этом работа GRUB состоит из нескольких стадий.

Стадия 1: размещение в MBR. Из-за малого объема MBR размещается только ссылка для перехода к Стадии 2, которая содержит все требуемые данные.

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

Еще существует Стадия 1.5, которая используется, если загрузочная информация не может быть размещена непосредственно после MBR.

Структура Стадии позволяет GRUB иметь довольно большой объем (~20-30К). Поэтому GRUB достаточно сложный и хорошо конфигурируемый, по сравнению с большинством загрузчиков, которые более компактные и проще укладываются в ограничения для Таблицы Разделов.

Терминология GRUB

Этот раздел предназначен для того чтобы помочь вам освоиться с GRUB без соприкосновения с ним. В следующем разделе рассматриваются актуальные файлы и ручная конфигурация GRUB.

GRUB имеет собственные условные обозначения, которые немного отличаются от общепринятых условных обозначений применяемых в Linux.

Вот, пример типичного начала GRUB:

(hd0,1)
  • Обязательные скобки, в которые должны быть заключены все устройства представленные в списке меню GRUB.
  • hd означает жесткий диск. Гибкий диск обозначается как fd, CD-ROM как cd и т.д.
  • Первый номер (целое число, для квалифицированных пользователей) — это ссылка на номер физического жесткого диска. Нумерация первого привода начинается с нуля. В качестве примера, hd2 ссылка на третий физический жесткий диск.
  • Второй номер, ссылка на номер раздела выбранного жесткого диска. Нумерация разделов тоже начинается с нуля. В этом случае, 1 соответствует второму разделу.

Отсюда следует, что в GRUB (меню) не различаются IDE и SCSI приводы или первичный и логический разделы. Задача определения какой жесткий диск или раздел должен быть загружен, определяется BIOS и на Стадии 1.

Как видите, условные обозначения очень простые.

Первичные разделы имеют обозначения от 0 до 3 (hd?,0), (hd?,1), (hd?,2), (hd?,3). Логические разделы в дополнительном разделе нумеруются начиная с 4. Их нумерация не зависит от текущего количества первичных разделов на жестком диске. Например, (hd1,7).

Только этих входных данных недостаточно для загрузки операционной системы.

Также GRUB необходимо знать какой из образов операционной системы загружать. Эти параметры и специальные флаги (ключи) присваиваются каждому загрузочному устройству. Например, специальный флаг для Windows Safe Mode.

Здесь показан пример меню GRUB загружающего только Ubuntu.

GRUB загрузка Ubuntu

Здесь показан пример меню GRUB для компьютера с тройной загрузочной конфигурацией (SUSE 10.2, Ubuntu 6.10 и Windows XP). Это реальный menu.lst на одной из моих действующих машин.

GRUB конфигурация тройной загрузки

Попытайтесь понять, что означают эти данные. Считаются только незакомментированные строки. Комментарии обозначаются специальным символом #. Строки начинающиеся с нескольких последовательных серых x (индикатор предыдущей строки) являются продолжением предыдущей строки. Другими словами, текст просто перенесен на другую строку, чтобы улучшить зрительное восприятие на экране длинных строк, с учетом размеров окна текстового редактора и разрешения экрана.

default 0
timeout 8

Первая строка (default 0) означает, что будет загружена первая операционная система из списка. В нашем случае, это SUSE 10.2. Вторая строка (timeout 8) сообщает сколько времени (в секундах) имеется у пользователя чтобы выбрать систему для загрузки до того как загрузится система по умолчанию. Просто, не правда ли?

gfxmenu (hd0,2)/boot/message

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

title openSUSE 10.2
root (hd0,2)
kernel /boot/vmlinuz-...
initrd /boot/initrd.img-...

Это первая операционная система в меню.

  • title (заголовок) — элементарно, означает тоже, что и его смысл. Эта строка предназначена помочь пользователю прочитать меню в более доступной терминологии.
  • root (hd0,2) указывает GRUB, где размещены его конфигурационные файлы. В этом примере они могут быть найдены на (hd0,2)/boot/grub.
  • kernel /boot/vmlinuz-... загрузка модуля ядра текущей операционной системы. Может быть доступно несколько подобных образов. Тот факт, что отсутствует ссылка на загрузочное устройство перед /boot/vmlinuz означает, что образ размещен на том же разделе жесткого диска, что и сам GRUB. Это обстоятельство часто определяет ваш выбор операционной системы, загружаемой по умолчанию.
  • initrd /boot/initrd.img-... является временным системным файлом, который создается системой при подготовке к загрузке. Подготовка включает в себя адаптацию универсального модуля ядра для конкретного оборудования, до его загрузки.

Дополнительные ключи используются после указания ядра. Они определяют текущее размещение корневой директории (root), используемый графический режим и размещение раздела подкачки (swap). В этой статье не будут рассматриваться подробно расширенные конфигурации GRUB.

title Ubuntu, kernel ... (/dev/sda9)
kernel (hd0,8)/boot/vmlinuz-...
initrd (hd0,8)/boot/initrd.img-...
  • В данном случае, title отображаемое имя, с некоторыми дополнительными техническими подробностями.
  • kernel (hd0,8)/boot/vmlinuz-... размещение 9-й раздел на первом жестком диске (hd0,8). Флаг root (/dev/sda9) обозначает, что root раздел так же содержит в себе модуль ядра, то есть размещаются они на одном разделе жесткого диска. Обычно, это делается из соображений практичности и простоты. Вы можете изменить это размещение во время установки операционной системы.
  • initrd (hd0,8)/boot/initrd.img-... здесь ничего нового.

Замечания по разделам модулей ядра и корневому разделу: на старых компьютерах, BIOS которых не поддерживает доступ к более чем 1024 цилиндрам, вы должны были установить загрузочный раздел, содержащий модуль ядра и корневой раздел, в разных местах. Однако пользователи с компьютерами младше чем проблема Y2K (проблема 2000 года) могут не беспокоиться.

Другая вещь, на которую вы должны обратить внимание, это подробная загрузка Ubuntu. Ubuntu загружается с помощью загрузчика OpenSUSE. Это свойство называется совместимая мультизагрузка (Multi-boot Compliance). OpenSUSE распознает Ubuntu и может правильно вызвать ее модули (включая специальные ключи) и cмонтировать разделы. Однако большинство операционных систем лишь частично совместимы с данным свойством (Multi-boot Compliance).

Позже я покажу вам как по разному может быть выполнен вход в Ubuntu с одинаковыми результатами.

title Windows
rootnoverify (hd0,0) 
chainloader (hd0,0)+1
  • rootnoverify (hd0,0) означает, что openSUSE не может определить Windows операционную систему, так как она не обладает свойством мультизагрузочной совместимости (Multi-boot Compliance). По этой причине операционная система вызывается без какой-либо дополнительной информации о ее ядре. GRUB предполагает, что требуемый образ ядра будет находиться на указанном разделе и монтирует загрузчик операционной системы. Как вы видите, Windows была установлена на первом разделе первого жесткого диска. Это самое удачное расположение системы.
  • Команда chainloader (hd0,0)+1 специально предназначается для применения с операционными системами, которые не могут быть непосредственно загружены. Не удивительно, что Windows операционные системы не могут быть загружены напрямую. Они загружаются с использованием метода chainloading. Как следует из названия, GRUB передает управление загрузочной последовательностью другому загрузчику, размещенному на устройстве, которое указано в меню GRUB. Это может быть Windows операционная система или любая другая, например, Linux.

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

title Ubuntu
root (hd0,8)
chainloader (hd0,8)+1

Это будет работать также хорошо.

Следующий пункт в меню позволяет вам загрузить SUSE в защищенном (failsafe) режиме (разновидность безопасного режима). Этот пункт не содержит очень ценной и полезной информации, поэтому пропустим его, без ущерба для наших знаний.

Позвольте привести несколько примеров.

Приведенный ниже действующий пример, который записан в Ubuntu menu.lst (конечно, закомментирован).

title Windows 95/98/NT/2000
root (hd0,0)
makeactive
chainloader +1

title Linux
root (hd0,1)
kernel /vmlinuz root=/dev/hda3 ro

Теперь вы можете легко понимать язык GRUB. Мы начали с title. root определенный раздел на котором мы рассчитываем найти ядро Windows и смонтировать его (rootnoverify эта работа будет предоставлена загрузчику Windows). makeactive команда, которая делает активным раздел с корневой директорией на диске, указанном в предыдущей строке GRUB root device. Это означает, что команда chainloader выполняется без указания целевого раздела системы (так как этот раздел совпадает с активным).

Второй пункт меню еще проще. Мы назвали его Linux, определили его раздел и загружаем его ядро. Этот случай очень интересный. Так как образ ядра и корневой раздел (root или /) находятся на разных разделах. Этот случай очень похож на случай со старыми компьютерами или компьютером с одним загрузочным разделом.

И наконец, совершенно безумные вещи:

Меню GRUB загружающего более 100 операционных систем: DOS, Windows, Linux, BSD и Solaris

Вы понимаете, что все просто! Когда вы набьете руку, все сомнения исчезнут.

Для получения дополнительной информации, вам необходимо обратиться к GNU GRUB Manual 0.97.

Также вам нужно ознакомиться со статьей The list of command line and menu entry commands.

Конфигурация GRUB

Большую часть времени, у вас не будет желания или необходимости конфигурировать GRUB. Когда вы устанавливаете операционные системы, GRUB будет устанавливаться автоматически и соответствующие строки будут добавлены в конфигурационный файл, особенно, если выбрана правильная последовательность установки операционных систем
(авторитарные, то есть Windows подобные операционные системы, — первыми, гибкие операционные системы, то есть Linux и его семейство, — после).

Тем не менее, вам необходимо знать где и что нужно делать, если что-то пойдет не так.

Установка GRUB

GRUB может быть установлен на различные устройства. Большинство людей будет интересовать процесс установки GRUB на жесткий диск. Однако, изучение других его настроек совсем не повредит. Конечно, вы можете перейти дальше.

Ранее мы не устанавливали GRUB, поэтому нам необходимо знать местонахождение требуемых файлов.

Если GRUB установлен, то его меню находится внутри корневого раздела:

/boot/grub/menu.lst

Всегда, всегда делайте резервную копию этого файла перед любыми изменениями!

Так же GRUB файлы могут находиться внутри образа вашей операционной системы (как правило, CD):

/usr/lib/grub/i386-pc

Вы должны также знать основные команды Linux, относящиеся к жестким дискам и разделам. С этой целью, вы можете посмотреть мою статью «Самые полезные настройки и команды Linux».

Тем не менее здесь приводится ее краткая версия, для тех кого не радует чтение еще одной статьи.

Вы можете вывести на экран любую информацию о среде вашего ПК (персональный компьютер), используя терминал или текстовый редактор. Чтобы открыть файлы в текстовом редакторе необходимо указать в командной строке текстовый редактор, имя файла и путь к нему. Для открытия системных файлов необходимо иметь права суперпользователя (su или sudo для системных файлов).

$ sudo vi /etc/fstab
ИЛИ
$ sudo gedit /etc/fstab

Или вы можете просто вывести на экран содержимое файлов прямо в терминале с помощью команды cat.

$ (sudo) cat /etc/fstab

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

Выводит на экран таблицу разделов:

$ fdisk -l

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

$ cat /etc/fstab

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

GRUB на флоппи диске

Для того чтобы установить GRUB на флоппи диск, мы должны скопировать файлы (Стадия 1 и Стадия 2) из директории образа операционной системы , в первый и второй сектор флоппи диска. Для этого будем использовать команду dd, которая копирует информацию посекторно.

Ниже приводится список команд, которые необходимо выполнить (они взяты из руководства):

$ cd /usr/lib/grub/i386-pc
$ dd if=stage1 of=/dev/fd0 bs=512 count=1
$ dd if=stage2 of=/dev/fd0 bs=512 seek=1

Небольшое пояснение: if обозначает файл ввода, of обозначает файл вывода, /dev/fd0 ссылка на первый смонтированный дисковод флоппи дисков, bs заданный размер блока (в байтах), count инструкция, указывающая на количество блоков, которое должно быть скопировано, и seek указывает сколько блоков будет пропущено перед записью. Неудивительно что выбрана такая последовательность команд записи. В начале мы записали stage1 в первый сектор и скопировали stage2 во второй (пропустили первый сектор и затем записали).

Теперь, когда вы поняли всю мощь командной строки, в качестве домашней работы, предлагаю вам самим разобраться с особенностями других команд. Более подробно о команде dd на Wikipedia.

Это все насчет установки GRUB на флоппи диск. Так как мы скопировали стадии из образа операционной системы, то у нас имеется вся необходимая информация для настройки. Конечно, вы всегда можете внести изменения вручную. Однако об этом в следующем разделе.

Установка GRUB по умолчанию

Установка по умолчанию означает размещение GRUB Стадия 1 в первом секторе на жестком диске (Главная Загрузочная Запись - MBR или Таблица Разделов). Это значит, что вы сможете загрузиться без второго устройства, подобного флоппи диску, который стал редким в наши дни. Так же это означает, что если вы установите авторитарную операционную систему позже (подобную Windows) или восстановите главную загрузочную запись по какой-то причине (запустите fdisk /MBR из командной строки DOS) , вы удалите GRUB и сделаете не загружаемыми все системы, представленные в menu.lst.

Для установки GRUB в MBR вам необходимо загрузиться с внешнего носителя (флоппи
диск, live CD Linux). После загрузки, как только будет доступно приглашение
на ввод команды GRUB (grub>), выполните следующие команды:

Найдите корневое устройство GRUB:

grub> find /boot/grub/stage1

GRUB будет искать все доступные Стадии 1 и отобразит их на экране. Если у вас имеется более одного образа операционной системы (например, SUSE, Kubuntu, Mandriva), вам будут доступны несколько Стадий 1.

Пример:

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

  • SUSE на (hd0,1)
  • Kubuntu на (hd0,2)
  • Mandriva на (hd0,4)

Эти системы имеют свой собственный GRUB, поэтому любая из них может быть использована в качестве GRUB устройства (так как каждая из них имеет свои собственные файлы GRUB).

Если вы хотите использовать SUSE GRUB, вам необходимо сделать корневым устройством GRUB (GRUB root device) первый раздел жесткого диска (hd0,1):

grub> root (hd0,1)

Если вы хотите использовать Mandriva's GRUB, необходимо сделать следующее:

grub> root (hd0,4)

Если вам известно размещение корневого раздела GRUB и необходимых файлов, то можете обойтись без команды find.

Если вы определили корневой раздел, вам необходимо записать информацию в MBR (Главную Загрузочную Запись):

grub> setup (hd0)

И наконец, выйдите из GRUB консоли:

grub> quit

Вот вся последовательность команд, которую вам необходимо выполнить:

grub> find /boot/grub/stage1 (optional)
grub> root (hdX,Y)
grub> setup (hd0)
grub> quit

Вы можете установить GRUB на другой физический диск или раздел. В этом случае вам нужно будет осуществить последовательную загрузку (chainload), то есть необходимо передать управление от GRUB другому загрузчику, который выполнит загрузку системы вместо него.

Это все. Просто и быстро!

Установка GRUB с помощью grub-install

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

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

$ grub-install /dev/hda
$ grub-install /dev/hd0
$ grub-install '(hd0)'
$ grub-install hd0

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

Настройка GRUB вручную (после установки)

Вы можете переконфигурировать или переустановить GRUB в любой момент.

Резервное копирование!

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

$ cp /boot/grub/menu.lst /boot/grub/menu.lst_backup

Для получения доступа к GRUB выполните следующую команду в Linux терминале:

$ sudo grub

Через какое-то время, приглашение GRUB будет показано на экране. Наличие приглашение
вы можете определить по его виду: grub>.

GRUB консоль - приглашение на ввод команды

Также вы можете получить доступ к командной строке GRUB во время загрузки. Когда меню GRUB загружается, нажмите кнопку C на клавиатуре.

Добавление новой операционной системы в меню GRUB

Предположим, вы имеете ранее установленную операционную систему Sabayon (Sabayon Linux ранее известный как RR4 и RR64 — дистрибутив на ядре Linux, представляющий собою форк дистрибутива Gentoo). В процессе установки вы пропускаете установку GRUB. Это означает, что конфигурационные файлы ранее установленного GRUB не изменились и не содержат данных о Sabayon. И Sabayon не сможет быть загружен.

Примечание: Разделы GRUB меню названы комнатами (возможно это особенность данного экземпляра?).

Таким образом, нам необходимо добавить Sabayon в конфигурационный файл GRUB.

Если вы знаете, где Sabayon был установлен, то вам надо добавить его данные в menu.lst.

title Sabayon
root (hdX,Y)
chainloader +1

Это все.

Однако это можно сделать во время загрузки компьютера без редактирования меню. Когда установленный GRUB начнет загружаться, нажмите кнопку C, чтобы вызвать командную строку. И затем:

grub> root (hdX,Y)
grub> chainloader +1

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

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

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

Типичные проблемы

Как восстановить GRUB после удаления?

Это часто происходит, если вы устанавливаете Windows после Linux. Windows считает, что она единственная операционная система в мире и не пытается интерпретировать существующую информацию, находящуюся в MBR.
Она ее просто перезаписывает. Для людей, у которых имеется система двойной загрузки и небольшие познания в Linux, — это просто катастрофа. К счастью это очень легко поправимо.

Простой способ

Используйте Super Grub Disk. Я писал об этой утилите в статье A (cool) list of Linux tools, в разделе Rescue.

Сложный способ

  • Загрузитесь с флоппи диска или CD (любой Linux live CD должен подойти)
  • Войдите в режим командной строки GRUB.
grub> find /boot/grub/stage1 (optional)
grub> root (hdX,Y)
grub> setup (hd0)
grub> quit

Все тоже самое, что и раньше!

Windows установлена не на первом жестком диске (Своппинг)

GRUB не может загрузить напрямую операционную систему Microsoft. Иногда даже последовательная загрузка может не работать, особенно, если Windows установлена не на первом жестком диске. И снова вы должны помнить, что нужно устанавливать Windows первой, на первый жесткий диск и на первый раздел (правило 3П — трех первых). При этом, даже если вы установили Windows на отдельном диске, вы можете решить проблему с помощью своппинга.

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

grub> map (hd0) (hd1)
grub> map (hd1) (hd0)

После добавления этих двух строк, вы должны загрузить Windows (или DOS).

Несколько Windows операционных систем установлены на одном первом жестком диске (Скрыть/Показать)

С Windows опять могут возникнуть проблемы, если имеется несколько экземпляров размещенных на одном жестком диске, в особенности, если они установлены на первичных разделах. Раньше, когда вы использовали команду chainloader (последовательная загрузка), вы передавали управление начальному загрузчику Windows. Какому загрузчику операционной системы передать управление сейчас?

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

Приводимый здесь пример, взят из руководства, он демонстрирует этот момент.

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

grub> unhide (hd0,0)
grub> hide (hd0,1)
grub> rootnoverify (hd0,0)
grub> chainloader +1
grub> makeactive

Вы изменили размер раздела; GRUB не работает

Это интересный случай. Он может случиться после использования программного обеспечения для работы с жесткими дисками (управление разделами жесткого диска, восстановление разделов из образов разделов, и т.д.), которое изменяет Таблицу Разделов. Обычно это случается, когда вы делаете такие изменения из Windows. Linux не будет информирована об этих изменениях, потому что Windows не обращает внимания ни на что, кроме имеющихся на этой машине продуктов Microsoft. Следовательно, GRUB не будет работать.

Скорее всего повреждена файловая система и ее необходимо восстановить для решения данной проблемы.

Загрузитесь с live CD и выполните следующие команды (предполагается что вы знаете, где размещены Linux-разделы).

Выполните проверку файловой системы:

$ fsck.ext2 /dev/hdXY

Замените X и Y буквой жесткого диска и номером раздела, который вы хотите проверить (hda2, hdb3, и т.д.).

Измените тип файловой системы на файловую систему ext2/3.

$ tune2fs -j /dev/hdXY

Теперь монтируйте корневую файловую систему на /mnt/sysimage и запустите grub:

$ mount -t ext2 /dev/hdXY /mnt/sysimage
ИЛИ
$ mount -t ext2 /dev/hdXY /mnt/sysimage
        
$ cd /mnt/sysimage/sbin
$ grub

Вы снова вернулись в знакомую среду.

Для получения дополнительной информации о командах Linux, например, fsck.ext2, tune2fs и других, обратитесь к Manual pages на Linux Reviews.

В заключение, несколько каверзных вопросов, отвеченных в Ubuntu wiki:

How to restore GRUB menu after Windows installation

How to identify the name of the boot drive (hd0, hd1, hd2, etc)

How to add Windows entry into GRUB menu

How to boot into Windows installed on a separate SATA drive

Полезные инструменты

GParted

GParted — это редактор разделов Gnome. Несмотря на то, что он является Linux ориентированным, он полностью поддерживает NTFS файловую систему. Он запускается непосредственно с CD.

SystemRescueCD

Это live CD, который специально предназначен для аварийного восстановления. Этот пакет инструментальных программных средств включает несколько очень важных утилит доступных пользователю Linux, например, GParted, QTParted, Partimage, Grub, Lilo, sfdisk, утилиты обеспечения безопасности, сетевые утилиты и много других.

Super Grub Disk

Super Grub Disk предназначен для запуска с флоппи диска или CD, и применяется для восстановления системы. Самое важное, что он может восстановить первичный загрузчик, например, GRUB, LILO и даже загрузчик Windows.

TestDisk

TestDisk — это утилита, специально разработана для восстановления поврежденных разделов и загрузочных дисков. Это очень полезный инструмент, который может быть найден на ряде live CD, включая Knoppix и GParted. Он поддерживает NTFS разделы и имеет версию работающую под Windows.

Дополнительная информация специально для фанатов

Multiboot with GRUB Mini-HOWTO

How To Multi-boot Operating Systems

How to boot Ubuntu from the Windows Bootloader

Filesystems and Mounting

Ссылки:

GNU GRUB

GNU GRUB FAQ

GNU GRUB Manual 0.97

The list of command line and menu entry commands

GNU GRUB on Wikipedia

Меню GRUB загружающего более 100 операционных систем: DOS, Windows, Linux, BSD и Solaris

Другие мои статьи:

Самые полезные настройки и команды Linux

A (cool) list of Linux tools

Общая информация (в алфавитном порядке):

cat

dd

initrd

LILO

Logical Block Address

Manual pages (man) on Linux Reviews

NTLDR

Вот и все. Не скучайте!

Если вам понравилась статья, поделитесь ею с друзьями:


1. Введение

GRUB или Grand Unified Bootloader (Унифицированный системный загрузчик) является наиболее распространенным системным загрузчиком в среде Linux. Он занимает свое место по праву, ведь благодаря ему становится возможной загрузка практически всех актуальных операционных систем. Это все существующие дистрибутивы Linux, версии ОС Windows, версии DOS, версии BSD, версии Mac OS X, а также некоторые другие менее популярные операционные системы.

По сути, это небольшое технологическое чудо. Например, в течение некоторого времени на моем ноутбуке было установлено около 10 разных операционных систем, которые были доступны из меню системного загрузчика GRUB и отлично работали, не конфликтуя друг с другом.

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

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

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

2.1. Когда приходится восстанавливать системный загрузчик

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

GRUB состоит из двух программных компонентов. Первым программным компонентом является сам системный загрузчик, который размещается в основной загрузчоной записи (Master Boot Record или MBR). Эта запись расположена в рамках первого сектора жесткого диска. Вторым программным компонентом является реализация меню загрузки и используемые ею дополнительные файлы. Они располагаются за пределами основной загрузочной записи, а именно, в директории boot корневого раздела Linux.

В вашем компьютере установлено несколько жестких дисков? В таком случае вам придется помнить и о том, что системный загрузчик должен располагаться в основной загрузочной записи жесткого диска, выбранного для загрузки в меню Boot Sequence BIOS. При восстановлении GRUB вам придется указывать путь к директории с файлами системного загрузчика.

2.2. Процесс восстановления системного загрузчика в системах с BIOS

Данное описание процесса восстановления системного загрузчика подойдет для систем с классической прошивкой BIOS (это системы с предустановленными ОС Windows XP или Windows Vista). Оно также подойдет для систем с прошивками UEFI, работающих в режиме совместимости с BIOS (это системы с предустановленной ОС Windows 7). При этом оно не подойдет для систем с прошивками UEFI, не поддерживающих режимы совместимости с BIOS (это системы с предустановленными ОС Windows 8.x и Windows 10). Если в вашей системе используется новейшая прошивка UEFI, не совместимая с BIOS, вам придется обратиться к следующему разделу.

Предположим, что нам нужно восстановить системный загрузчик, затертый системным загрузчиком ОС Windows.

A. В первую очередь следует загрузить дистрибутив Linux с загрузочного оптического диска или флеш-накопителя с интерфейсом USB. Нужно выбирать вариант загрузки системы без установки.

Примечание: вам придется использовать загрузочный носитель той версии системы, которая установлена на вашем жестком диске. Например, в том случае, если на вашем жестком диске установлена система Ubuntu 16.04, вы должны использовать загрузочный диск Ubuntu 16.04.

B. Теперь следует выяснить имя файла устройства раздела с корневой директорией установленной системы. Для этого можно воспользоваться приложением Диски, доступным в Linux Mint, Ubuntu и Fedora Workstation.

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

В моем случае файл устройства раздела с корневой директорией имеет имя sda5. Я буду использовать имя этого файла устройства в данном руководстве, вам же придется изменить его на имя вашего файла устройства.

C. Теперь нужно открыть окно терминала.

D. Далее нужно скопировать и вставить в окно терминала следующую команду (напоминаю, что вы должны заменить sda5 на имя файла устройства раздела с корневой директорией установленной системы):

sudo mount /dev/sda5 /mnt

После окончания ввода команды следует нажать клавишу Enter для ее исполнения. В результате раздел с корневой директорией установленной системы будет смонтирован в директорию /mnt системы, загруженной с установочного диска.

E. Теперь нужно выполнить следующую последовательность команд с помощью терминала (в последней команде должно использоваться имя файла устройства корневого раздела установленной системы без его номера):

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 grub2-mkconfig -o /boot/grub/grub.cfg
sudo grub2-install /dev/sda

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

Примечание: в ходе исполнения двух последних команд может быть выведено предупреждение:

grub probe: error: failed to get canonical path of /cow
Installation finished. No error reported.

Оно никоим образом не повлияет на установку системного загрузчика.

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

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

После окончания ввода каждой из команд также следует нажимать клавишу Enter для ее исполнения.

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

sudo grub2-mkconfig -o /boot/grub/grub.cfg

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

После перезагрузки пункт для загрузки Windows появится в меню загрузчика GRUB. При необходимости вы можете открыть меню системного загрузчика, зажав и удерживая клавишу Shift сразу же после исчезновения экрана загрузки BIOS.

2.3. Процесс восстановления системного загрузчика в системах с UEFI

Данное описание процесса восстановления системного загрузчика подойдет для систем с прошивкой UEFI (это системы с предустановленными ОС Windows 8.x или Windows 10). Например, после успешной установки одного из дистрибутивов Linux на такую систему в меню UEFI может не оказаться пункта для его загрузки. Кроме того, вы можете случайно привести раздел UEFI к оригинальному состоянию или обновить его содержимое, в результате чего загрузка Linux также станет невозможной. К счастью, данная проблема может быть решена без переустановки системы. Однако, вам придется неукоснительно следовать приведенным ниже инструкциям.

Примечание: данные инструкции подходят лишь для современных систем с прошивками UEFI, не работающих в режиме совместимости с BIOS. Обычно такие системы продаются с предустановленными ОС Windows 8.x или Windows 10. При этом они не подойдут для систем с классическими прошивками BIOS (это системы с предустановленными ОС Windows XP, Windows Vista и Windows 7). Если в вашей системе используется классическая прошивка BIOS, вам придется обратиться к предыдущему разделу.

На системы с прошивками UEFI традиционно устанавливаются 64-битные операционные системы, поэтому мы будем рассматривать случай «исчезновения» пункта для загрузки 64-битной Linux-системы из меню UEFI. Для решения аналогичной проблемы вам придется действовать следующим образом:

A. В первую очередь следует загрузить дистрибутив Linux с загрузочного оптического диска или флеш-накопителя с интерфейсом USB. Нужно выбирать вариант загрузки системы без установки.

Примечание: вам придется использовать загрузочный носитель той версии системы, которая установлена на вашем жестком диске. Например, в том случае, если на вашем жестком диске установлена система Ubuntu 16.04, вы должны использовать загрузочный диск Ubuntu 16.04.

B. Далее следует установить соединение с сетью Интернет. Оно необходимо для переустановки пакетов программного обеспечения.

C. Теперь нужно узнать имена файлов устройств двух разделов жесткого диска, а именно, раздела с корневой директорией системы (с системными файлами дистрибутива) и раздела EFI (содержащего загрузчики Linux и Windows). Для этого можно воспользоваться приложением Диски, доступным в Linux Mint, Ubuntu и Fedora Workstation.

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

В моем случае файл устройства раздела с корневой директорией имеет имя sda5, а раздела EFI — имя sda2. Я буду использовать имена этих файлов устройств в данном руководстве, вам же придется изменить их на имена ваших файлов устройств.

D. Теперь нужно открыть окно терминала.

E. Далее нужно скопировать и вставить в окно терминала следующую команду (напоминаю, что вы должны заменить sda5 на имя файла устройства раздела с корневой директорией установленной системы):

sudo mount /dev/sda5 /mnt

После окончания ввода команды следует нажать клавишу Enter для ее исполнения. В результате раздел с корневой директорией установленной системы будет смонтирован в директорию /mnt системы, загруженной с установочного диска.

Пришло время сделать то же самое с разделом EFI. Вам придется скопировать и вставить в окно терминала следующую команду (напоминаю, что вы должны заменить sda2 на имя файла устройства раздела EFI установленной системы):

sudo mount /dev/sda2 /mnt/boot/efi

После окончания ввода команды также следует нажать клавишу Enter для ее исполнения. В результате раздел EFI установленной системы будет смонтирован в директорию /mnt/boot/efi системы, загруженной с установочного диска.

F. Теперь нужно выполнить следующую последовательность команд с помощью терминала:

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 modprobe efivars
sudo chroot /mnt

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

G. Пришло время переустановить пакеты программного обеспечения, в результате чего пункт для загрузки дистрибутива Linux должен снова появиться в меню UEFI. Вам придется выполнить команду, актуальную для вашего дистрибутива.

Linux Mint/Ubuntu:

sudo apt-get install --reinstall grub-efi-amd64

Fedora Workstation:

sudo dnf reinstall grub2-efi grub2-efi-modules shim

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

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

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

После окончания ввода каждой из команд также следует нажимать клавишу Enter для ее исполнения.

I. Далее следует воспользоваться функцией перезагрузки системы и не забыть извлечь загрузочный накопитель. В последующем процессе загрузки вы должны обнаружить пункт для загрузки установленной Linux-системы в меню UEFI. Если из этого меню исчез пункт для загрузки Windows, следует загрузить Linux, открыть окно терминала и выполнить с помощью него следующую команду:

Linux Mint/Ubuntu:

sudo grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

Fedora Workstation:

sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

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

Примечание: файл конфигурации GRUB в Linux Mint находится в директории ubuntu, так как дистрибутив Linux Mint основан на Ubuntu.

После перезагрузки пункт для загрузки Windows появится в меню UEFI.

3. Настройка GRUB

3.1. О сторонних приложениях

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

3.2. Перемещение Windows на первое место в меню системного загрузчика

В начале знакомства с Linux многим пользователям хочется, чтобы ОС Windows была выбрана и загружалась по умолчанию (рано или поздно это проходит!). Это не так сложно реализовать.

3.3. Использование изображения в качестве фона меню системного загрузчика

Меню системного загрузчика GRUB, с помощью которого вы можете выбрать операционную систему для загрузки, по умолчанию является функциональным, но не очень красивым. К счастью, это легко исправить, к примеру, использовав красивое изображение в качестве его фона.

3.4. Изменение времени показа меню системного загрузчика

Для произвольного изменения времени показа меню системного загрузчика GRUB достаточно отредактировать файл конфигурации /etc/default/grub, изменив значение переменной GRUB_TIMEOUT, после чего обновить конфигурацию самого загрузчика. Обратите внимание на то, что установка значения 0 не даст никакого эффекта: будет использоваться стандартное значение, равное 10 секундам. Если же вы все же хотите установить минимальное время показа меню, вы можете использовать значение 0.1. Для обновления конфигурации системного загрузчика в системе с классической прошивкой BIOS следует воспользоваться следующей командой:

sudo grub2-mkconfig -o /boot/grub/grub.cfg

Если у вас система с современной прошивкой UEFI, вы можете использовать одну из следующих команд:

Linux Mint/Ubuntu:

sudo grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

Fedora Workstation:

sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

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

3.5. Использование дополнительных параметров конфигурации ядра ОС

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

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

A. В первую очередь следует открыть окно терминала и ввести в него следующую команду:

Linux Mint:

gksudo xed /etc/default/grub

Ubuntu/Fedora Workstation:

gksudo gedit /etc/default/grub

После окончания ввода команды следует нажать клавишу Enter. При запросе пароля вы должны будете ввести свой пароль. Символы вашего пароля не будут отображаться никоим образом, даже с помощью точек, и это нормально. После ввода пароля следует снова нажать клавишу Enter. В результате откроется окно текстового редактора с содержимым файла конфигурации GRUB.

B. В открывшемся файле конфигурации GRUB следует найти следующую строку:

GRUB_CMDLINE_LINUX=""

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

GRUB_CMDLINE_LINUX="nomodeset"

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

C. Для обновления конфигурации системного загрузчика придется выполнить еще одну команду. В случае использования системы с классической прошивкой BIOS следует воспользоваться командой:

sudo grub2-mkconfig -o /boot/grub/grub.cfg

Если у вас система с современной прошивкой UEFI, вы можете использовать одну из следующих команд:

Linux Mint/Ubuntu:

sudo grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

Fedora Workstation:

sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

После окончания ввода команды следует нажать клавишу Enter для ее исполнения.

D. Наконец, следует перезагрузить компьютер.

3.5.1. Параметр nomodeset

В современных версиях ядра Linux реализован механизм установки параметров графических карт практически всех производителей. То есть, запись данных в регистры графических карт осуществляется на уровне ядра ОС, а не на уровне модуля графического сервера X.org после его запуска. Данный механизм позволяет использовать заставки с высоким разрешением при загрузке системы и избавиться от искажений при переходе от экрана загрузки к экрану входа в систему.

К сожалению при использовании некоторых видеокарт данный механизм работает ненадежно и может приводить к черному экрану после загрузки системы. Параметр nomodeset сообщает ядру ОС о том, что не нужно использовать механизм установки параметров графических карт до момента запуска графического сервера X.org. Однако, стоит учесть, что некоторые графические карты могут работать некорректно при передаче данного параметра, поэтому не стоит злоупотреблять им.

3.5.2. Параметры noacpi, noapic и nolapic

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

Стандарт ACPI (Advanced Configuration and Power Interface) описывает механизмы управления питанием. Старые системы могут не поддерживать его в полной мере, поэтому в некоторых случаях стоит сообщать ядру ОС об этом. Вы можете сделать это, передав параметр acpi=off или noacpi.

Стандарт APIC (Advanced Programmable Interrupt Controller) реализуется в более новых системах. Локальной версией данного стандарта является стандарт LAPIC. Данный стандарт описывает механизм генерации и обработки прерываний, то есть, сигналов, используемых аппаратным обеспечением компьютера. И снова, некоторые реализации APIC могут быть неполными в старых системах, поэтому стоит деактивировать их поддержку. Вы можете сделать это, передав параметры noapic и nolapic.

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

3.5.3. Параметры quet splash

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

4. Удаление GRUB из основной загрузочной записи (возврат к Windows)

Удаление GRUB является печальным событием, ведь это такой отличный инструмент! Однако, если вы хотите знать все о системном загрузчике GRUB, вы также должны знать о том, как удалить его. Если говорить максимально кратко, то можно сказать, что под удалением GRUB чаще всего подразумевается замена системного загрузчика GRUB из состава дистрибутива Linux на системный загрузчик NTLoader из состава ОС Windows в основной загрузочной записи. Это может быть сделано различными способами.

4.1. Удаление GRUB с помощью Ultimate Boot CD

Вы можете заменить системный загрузчик GRUB на системный загрузчик NTLoader с помощью загрузочного диска Ultimate Boot CD (UBCD). Образ этого загрузочного диска доступен на данном веб-сайте.

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

Ultimate Boot CD содержит несколько инструментов, предназначенных для восстановления системного загрузчика NTLoader в основной загрузочной записи диска. Рассмотрим методику использования одного из них.

Сначала вам нужно будет с помощью меню выбрать жесткий диск, после чего выбрать действие Boot Management и, наконец, выбрать инструмент Super Grub Disk. После этого вам нужно будет снова нажать клавишу Enter для запуска Super Grub Disk. Далее нужно просто выбрать пункт:

Win => MBR &  !WIN!   :(((((((((((((((((((((((((((((((((

и нажать клавишу Enter.

Примечание: использование огромного количества круглых скобок является не моей идеей, а идеей автора Super Grub Disk…

И это все, что нужно было сделать! Теперь вы можете перезагрузить свой компьютер. После перезагрузки будет загружена ОС Windows.

4.2. Удаление GRUB с помощью FreeDOS

Для удаления системного загрузчика может также использоваться флеш-накопитель с интерфейсом USB. Вам понадобятся три приложения: Unetbootin, FreeDOS и Testdisk для DOS.

A. Для начала нужно загрузить приложение Unetbootin и создать с помощью него загрузочный флеш-накопитель. При запросе названия операционной системы следует выбрать FreeDOS.

B. Теперь нужно загрузить версию утилиты Testdisk для DOS/Win9x (версия для Windows не подойдет!).

C. Далее нужно извлечь файлы testdisk.exe и CWSDPMI.exe из архива утилиты Testdisk на загрузочный флеш-накопитель (прямо в корневую директорию, не создавая каких-либо поддиректорий).

D. Теперь нужно загрузить компьютер с созданного флеш-накопителя. При появлении начального окна достаточно нажать на клавишу Enter.

E. На данном этапе должна начаться загрузка операционной системы FreeDOS. Вы должны выбрать вариант загрузки:

FreeDOS Safe Mode (don't load any drivers)

Для продолжения процесса загрузки следует нажать клавишу Enter.

F. После окончания процесса загрузки операционной системы нужно перейти в корневую директорию флеш-накопителя с помощью следующей команды:

C:

После окончания ввода команды следует нажать клавишу Enter для ее исполнения.

G. Теперь нужно запустить утилиту Testdisk с помощью следующей команды:

testdisk

После окончания ввода команды следует также нажать клавишу Enter для ее исполнения.

H. Утилита должна начать работу. Для начала следует выбрать режим без журналирования [No Log] и нажать клавишу Enter.

I. Далее следует выбрать нужный жесткий диск: обычно это второй диск в списке (первым диском является сам флеш-накопитель). После выбора диска нужно нажать на клавишу Enter.

J. Далее нужно выбрать вариант [Intel] и нажать клавишу Enter.

K. Наконец, нужно выбрать вариант [MBR Code] и нажать клавишу Enter. При запросе подтверждения следует ввести y (yes) и снова нажать клавишу Enter.

И это все, что нужно было сделать! Теперь вы можете перезагрузить свой компьютер. После перезагрузки будет загружена ОС Windows.

5. Хотите ознакомиться с дополнительными советами?

Хотите узнать о других настройках и приемах работы с Linux-системами? На данном веб-сайте размещено большое количество подобных материалов.

Понравилась статья? Поделить с друзьями:
  • Как найти свой личный кабинет билайн
  • Как найти гипотенузу произвольного треугольника
  • Как найти бирюзовый краситель в майнкрафте
  • Расстояние по рейке как найти
  • Как найти карту сбербанка с помощью телефона