https://wiki.archlinux.org/title/GRUB_(Русский)
GRUB (Grand Unified Bootloader) — мультисистемный модульный программируемый кроссплатформенный загрузчик с поддержкой сети, множества файловых систем, таблиц разделов, логических томов, образов и архивов.
Участие 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
…
fdisk:
https://www.altlinux.org/Fdisk разбиение диска:
https://www.altlinux.org/%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5%D0%94%D0%B8%D1%81%D0%BA%D0%B0GPT disk – /usr/sbin/gdisk
http://manual.aptosid.com/ru/part-gdisk-ru.htmhttps://wiki.archlinux.org/title/GPT_fdisk_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
то в большинстве случаев этого места (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