Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Гибридная запись GRUB для MBR+GPT: BIOS и UEFI

Гибридная запись GRUB — это установка загрузчика на один диск дважды: для BIOS (цель i386-pc) и для UEFI (цель x86_64-efi). После этого диск с GPT-разметкой загружается и на старых машинах с Legacy BIOS, и на современных с UEFI. Для этого нужны два служебных раздела: EFI System Partition с файловой системой FAT32 и BIOS Boot Partition размером 1–8 МБ с флагом bios_grub.

Что такое гибридная запись GRUB

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

В BIOS-режиме загрузчик пишет код в первые сектора диска: в MBR попадает первая ступень, а core.img — в отдельный раздел. В UEFI-режиме GRUB работает как обычное EFI-приложение: файл grubx64.efi лежит в ESP, а запись о нём — в NVRAM прошивки.

Обычно ставят один вариант: либо BIOS, либо UEFI. Гибридная запись — это обе установки на одном диске. Конфиг grub.cfg при этом общий, генерируется один раз. Диск один, разметка одна — GPT, а загрузчик умеет работать в обоих режимах.

Важно понимать: гибридная запись не делает диск «двухзагрузочным» в смысле двух операционных систем. Система на диске одна, просто загрузчик умеет стартовать двумя способами. Какой именно сработает, решает прошивка конкретной машины: она либо запускает код из MBR (BIOS), либо ищет EFI-приложение на ESP (UEFI). GRUB в обоих случаях показывает одно и то же меню и грузит одну и ту же систему.

Какая разметка нужна, чтобы диск грузился и в BIOS, и в UEFI

Основа — GPT-таблица разделов. На GPT-диске в BIOS-режиме нет места для кода загрузчика в MBR-зоне: там стоит защитный MBR, который занимает ровно один сектор. Поэтому GRUB кладёт core.img в отдельный раздел — BIOS Boot Partition.

Почему так? В классическом MBR весь код загрузчика помещался в первые 440 байт диска. На GPT-диске эти байты заняты защитной записью, которая нужна, чтобы старые утилиты не принимали диск за пустой. Код первой ступени GRUB всё же вписывается в этот сектор, а вот core.img — уже нет: он больше. Для него и выделяют отдельный раздел, который прошивка и GRUB распознают по флагу bios_grub.

Итого нужны три вещи:

  • GPT-таблица разделов.
  • ESP — раздел с FAT32 и флагом esp. Обычно 100–512 МБ. Точка монтирования — /boot (или /efi, если /boot отдельный).
  • BIOS Boot Partition — раздел 1–8 МБ без файловой системы, с флагом bios_grub. В него GRUB пишет core.img для BIOS-режима.

Подробнее про выбор таблицы разделов — в статье «Разметка диска: GPT или MBR».

Как разметить диск под гибридную загрузку

Разметку удобно делать через fdisk. Пример для диска /dev/sdX:

fdisk /dev/sdX
# в интерактивном режиме:
# g      — создать новую GPT-таблицу
# n +512M — раздел под ESP
# t 1    — пометить его как EFI System
# n +2M  — раздел под BIOS Boot
# t 4    — пометить его как BIOS boot
# n      — третий раздел на всё оставшееся место
# w      — записать таблицу

После этого отформатируй ESP в FAT32:

mkfs.fat -F32 /dev/sdX1

Второй раздел форматировать не нужно — он остаётся пустым, GRUB сам запишет туда core.img.

То же самое через parted:

parted /dev/sdX
mklabel gpt
mkpart ESP fat32 1MiB 513MiB
set 1 esp on
mkpart BIOS 513MiB 515MiB
set 2 bios_grub on

Флаг bios_grub — ключевой момент. Без него GRUB в BIOS-режиме на GPT-диске просто не найдёт, куда писать core.img, и установка упадёт с ошибкой.

Как установить GRUB для BIOS-режима

Смонтируй разделы и войди в chroot, как при обычной установке. Затем:

grub-install --target=i386-pc --recheck /dev/sdX

В команде указывай диск (/dev/sdX), а не раздел. Флаг --recheck пересоздаёт device.map и помогает, если диск переставляли между машинами. core.img уйдёт в BIOS Boot Partition, а первая ступень — в защитный MBR.

Как установить GRUB для UEFI-режима

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB

--efi-directory — точка монтирования ESP (в нашем случае /boot), --bootloader-id — имя записи в NVRAM. Команда создаст /boot/EFI/GRUB/grubx64.efi и добавит запись в прошивку.

Теперь сгенерируй общий конфиг — один раз, он подходит обоим режимам:

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

Готово. Диск загружается в том режиме, который поддерживает конкретная машина: на старой — через BIOS, на новой — через UEFI.

Как проверить, что оба режима работают

Сначала проверь, что обе части на месте:

ls /boot/grub/i386-pc/core.img     # BIOS-часть
ls /boot/EFI/GRUB/grubx64.efi      # UEFI-часть

Если оба файла есть — установка прошла. Дальше проверь разметку:

parted -l

В выводе у второго раздела должен стоять флаг bios_grub, у первого — esp. На UEFI-машине дополнительно посмотри записи загрузки:

efibootmgr

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

Финальная проверка — физическая: воткни диск в машину с BIOS и убедись, что меню GRUB появляется, потом в машину с UEFI и повтори. Если на одной из них диск не виден — смотри раздел про режим Legacy/CSM ниже.

Почему гибридный MBR — не то же самое

Иногда «гибридной записью» называют другое: гибридный MBR, который создают через gdisk (тип 0xEE). Это когда в защитный MBR вписывают до трёх реальных разделов, чтобы старые утилиты и BIOS-загрузчики видели диск как MBR-диск.

Это костыль для совместимости с инструментами, а не способ загрузки. GRUB в BIOS-режиме на GPT-диске работает через BIOS Boot Partition, и гибридный MBR ему не нужен. Более того, гибридная разметка часто создаёт путаницу: разделы видны дважды — и в GPT, и в MBR, — а правки в одном месте не отражаются в другом. Для загрузки на двух типах машин гибридный MBR не требуется.

Ещё один момент: гибридный MBR умеет описывать максимум три раздела, а остальные остаются видимыми только в GPT. Некоторые утилиты, работающие с MBR, могут перезаписать таблицу и повредить GPT. Поэтому для гибридной записи GRUB гибридный MBR не просто не нужен — он вреден. Правильная схема всегда одна: чистая GPT, ESP и BIOS Boot Partition.

Когда гибридная запись реально нужна

  • Аварийная флешка. Воткнул в любой компьютер — и старый, и новый загрузились. На такой флешке удобно держать live-образы: как это настроить, описано в статье «Загрузка ISO через GRUB».
  • Внешний HDD или SSD. Переносишь диск между машинами — дома и на работе, у себя и у знакомых. Пример такой установки — в статье «Установка Arch на внешний SSD».
  • Переезд диска со старого ПК на новый. Не знаешь, какой режим у новой машины, — гибридная запись покрывает оба.
  • Ремонт чужого компьютера. Неизвестно, BIOS там или UEFI, а загрузиться нужно.

Отдельный случай — машины с UEFI, где выключен режим Legacy/CSM. На них BIOS-часть гибридной записи не сработает, но UEFI-часть отработает штатно. И наоборот: старый BIOS вообще не знает про UEFI и всегда стартует через MBR. Гибридная запись хороша тем, что ей не нужно ничего переключать — прошивка сама выбирает подходящий путь.

Если загрузчик всё же сломался — починить его можно по инструкции «grub rescue: что делать».

Как не запутаться в именах устройств

Имя /dev/sda непостоянно: подключил второй диск — и система может стать /dev/sdb. Для установки на съёмный диск лучше использовать стабильные имена из /dev/disk/by-id:

ls -l /dev/disk/by-id/

Выбери запись без суффикса -part1/-part2 — это сам диск. Например, usb-SanDisk_Ultra_Fit_...-0:0. И подставляй её в grub-install:

grub-install --target=i386-pc --recheck /dev/disk/by-id/usb-SanDisk_Ultra_Fit_...-0:0

Так команда сработает независимо от того, каким именем система назвала диск в этот раз.

Имена by-id строятся по серийному номеру устройства, поэтому они одинаковы на любой машине. Это особенно удобно, когда диск подключают то как /dev/sda, то как /dev/sdb — например, на ноутбуке и на стационарном ПК. Ошибка здесь дорогая: если перепутать диски в grub-install, загрузчик уедет не туда, и система может перестать грузиться.

В grub.cfg имена устройств вообще не участвуют: grub-mkconfig по умолчанию пишет UUID разделов. Поэтому после переноса диска на другую машину конфиг остаётся рабочим — главное, чтобы UUID в нём совпадали с реальными.

Частые вопросы

Можно ли сделать гибридную запись на диске с MBR-разметкой?

Нет. BIOS Boot Partition существует только в GPT, и именно она нужна GRUB для BIOS-режима на GPT-диске. На MBR-диске BIOS-загрузка работает через классический код в MBR, а UEFI с MBR-диска поддерживается не всеми прошивками. Для гибридной записи бери GPT.

Сколько места занимает BIOS Boot Partition?

Достаточно 1–8 МБ. GRUB кладёт туда core.img — это сотни килобайт. Ставь 2 МБ, с запасом. Раздел не форматируется и не монтируется, он целиком принадлежит загрузчику.

Нужно ли переустанавливать GRUB при переносе диска на другую машину?

Нет, если запись уже гибридная. Диск сам загрузится в том режиме, который поддерживает машина. Но проверь, что grub.cfg ссылается на UUID, а не на имена /dev/sdX, иначе после перестановки диск может не найти корень.

Почему после гибридной записи диск не грузится в BIOS?

Чаще всего забыли BIOS Boot Partition или флаг bios_grub. Проверь через parted -l, что раздел с флагом bios_grub на месте. Вторая причина — в BIOS машины выключен режим Legacy/CSM: включи его, иначе прошивка вообще не увидит диск.

Что делать, если запись UEFI пропала из NVRAM?

Переустанови GRUB для UEFI или добавь запись вручную через efibootmgr. Как устроен порядок загрузки и записи NVRAM, разобрано в статье «Порядок загрузки NVRAM и efibootmgr».

Нужно ли обновлять grub.cfg после каждой установки?

Нет. grub-mkconfig запускается один раз, после обеих команд grub-install. Оба режима читают один и тот же файл /boot/grub/grub.cfg, поэтому повторная генерация ничего не меняет. Перегенерируй конфиг только когда меняется состав системы: добавил ядро, поменял параметры загрузки, обновил os-prober.

Полезные ресурсы

Заключение

Гибридная запись GRUB — это две команды grub-install (для i386-pc и для x86_64-efi) на один диск с GPT-разметкой. Главное — не забыть BIOS Boot Partition с флагом bios_grub и ESP с FAT32. После этого один и тот же диск загружается и на старых BIOS-машинах, и на новых UEFI — удобно для аварийной флешки, внешнего диска и переезда между компьютерами.

Никакого гибридного MBR для этого не нужно: GRUB сам умеет грузиться с GPT в BIOS-режиме. Разметил диск, поставил загрузчик дважды, сгенерировал один конфиг — и забыл про проблему. Диск работает везде, где есть USB-порт и поддержка хотя бы одного из двух режимов.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max