Открыть сервис

GRUB 2

GRUB 2 (GRand Unified Bootloader версии 2) — это загрузчик операционной системы, свободное программное обеспечение, распространяемое по лицензии GNU General Public License (GPL). Является преемником загрузчика GRUB Legacy и стандартным загрузчиком для большинства дистрибутивов Linux и других Unix-подобных систем. GRUB 2 отвечает за загрузку ядра операционной системы, предоставляя пользователю возможность выбора между несколькими установленными ОС (мультизагрузка) и настройку параметров загрузки.

История

Первая версия загрузчика GRUB была разработана Эрихом Болейном (Erich Boleyn) в 1995 году для операционной системы GNU Hurd. В 1999 году, после выхода версии 0.5, разработка была передана команде GNU. К середине 2000-х годов GRUB Legacy (версия 0.9x) стал стандартным загрузчиком в большинстве дистрибутивов Linux, однако его архитектура имела ряд ограничений: плохая поддержка не-x86 архитектур, сложность с поддержкой новых файловых систем и ограниченные возможности скриптования.

В 2002 году началась работа над полностью переработанной версией — GRUB 2. Проект изначально назывался PUPA (Proposed Unified Paging Architecture), но позже был переименован. Первый стабильный релиз GRUB 2 (версия 1.96) состоялся в 2008 году. С 2010 года большинство дистрибутивов Linux (Ubuntu, Fedora, Debian, openSUSE) перешли на GRUB 2 по умолчанию, заменив им GRUB Legacy. Версия GRUB 2.0 была выпущена в 2012 году.

Архитектура и устройство

GRUB 2 состоит из нескольких компонентов, которые загружаются последовательно:

Загрузчик первого этапа (boot.img)

Этот компонент записывается в главную загрузочную запись (MBR) или в загрузочный сектор GPT-диска. Его размер составляет 512 байт (для MBR) или меньше. Код boot.img не содержит информации о файловых системах и просто загружает следующий этап — core.img.

Загрузчик второго этапа (core.img)

Файл core.img генерируется автоматически при установке GRUB 2. Он содержит драйверы для файловых систем (например, ext4, NTFS, Btrfs, XFS) и может загружать модули из директории /boot/grub. core.img обычно располагается в области между MBR и первым разделом диска (так называемый «зазор MBR»), либо в отдельном разделе BIOS Boot Partition (для GPT-дисков).

Модули и конфигурация

Основная логика GRUB 2 реализована в виде модулей, которые загружаются динамически. Модули находятся в каталоге /boot/grub/<архитектура>/ (например, /boot/grub/x86_64-efi/). Основной файл конфигурации — /boot/grub/grub.cfg. Он генерируется автоматически из скриптов, расположенных в /etc/grub.d/, и из файла /etc/default/grub. Пользователь не должен редактировать grub.cfg вручную, так как его изменения будут перезаписаны при обновлении конфигурации.

Ключевые возможности

Поддержка множества файловых систем

GRUB 2 может читать файлы с разделов, отформатированных в ext2/3/4, Btrfs, XFS, JFS, ReiserFS, FAT, NTFS, HFS+, ZFS, F2FS и других. Это позволяет загружать ядро непосредственно с раздела, не требуя отдельного загрузочного раздела (хотя /boot часто выделяют отдельно).

Мультизагрузка

GRUB 2 поддерживает загрузку различных операционных систем: Linux, Windows (через цепочку загрузки), BSD, macOS (на оборудовании Apple с EFI), а также других загрузчиков (например, Windows Boot Manager). Для каждой ОС создаётся отдельное меню.

Скриптовый язык и интерактивная оболочка

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

Поддержка UEFI и Secure Boot

GRUB 2 полностью совместим с интерфейсом UEFI (Unified Extensible Firmware Interface). Для работы с Secure Boot используется подписанная версия загрузчика — shim. Shim проверяет подпись GRUB 2, а GRUB 2, в свою очередь, проверяет подпись ядра Linux. Это позволяет загружать Linux на системах с включённым Secure Boot, включая компьютеры с предустановленной Windows 8/10/11.

Тема оформления и графическое меню

GRUB 2 поддерживает настраиваемые темы оформления, включая фоновые изображения, шрифты и цветовые схемы. Пользователь может изменить внешний вид меню загрузки, отредактировав файлы в /boot/grub/themes/ или используя утилиты, такие как grub-customizer.

Установка и настройка

Установка

Установка GRUB 2 выполняется с помощью утилиты grub-install. Типичная команда для установки на диск: `` grub-install /dev/sda ` Для систем с UEFI используется команда: ` grub-install --target=x86_64-efi --efi-directory=/boot/efi ` После установки необходимо сгенерировать файл конфигурации: ` grub-mkconfig -o /boot/grub/grub.cfg ``

Основные параметры конфигурации

Файл /etc/default/grub содержит ключевые настройки:

  • GRUB_DEFAULT — пункт меню по умолчанию (может быть числом или именем).
  • GRUB_TIMEOUT — время ожидания выбора в секундах (0 — мгновенная загрузка, -1 — бесконечное ожидание).
  • GRUB_CMDLINE_LINUX — параметры, передаваемые ядру Linux при загрузке.
  • GRUB_GFXMODE — разрешение графического меню (например, 1024x768).
  • GRUB_DISABLE_OS_PROBER — отключает автоматический поиск других ОС.

Скрипты в /etc/grub.d/

Каталог /etc/grub.d/ содержит исполняемые скрипты, которые формируют разделы меню. Основные скрипты:

  • 00_header — загружает настройки из /etc/default/grub.
  • 10_linux — находит установленные ядра Linux.
  • 30_os-prober — обнаруживает другие ОС (Windows, macOS и т.д.).
  • 40_custom — позволяет добавлять пользовательские пункты меню.

Применение

GRUB 2 используется в подавляющем большинстве дистрибутивов Linux, включая Ubuntu, Debian, Fedora, CentOS, Arch Linux, openSUSE, Linux Mint и многие другие. Он также применяется в некоторых Unix-подобных системах, таких как FreeBSD (ограниченно) и в специализированных загрузочных средах (например, SystemRescueCD). В системах с двойной загрузкой (Linux + Windows) GRUB 2 обычно выступает в роли первичного загрузчика, передавая управление Windows Boot Manager при выборе соответствующего пункта меню.

Критика и ограничения

  • Сложность конфигурации. Для новичков ручная настройка GRUB 2 может быть нетривиальной, особенно при проблемах с загрузкой. Редактирование /etc/grub.d/ требует понимания скриптового языка.
  • Размер. По сравнению с GRUB Legacy, GRUB 2 занимает больше места (несколько мегабайт), что может быть критично для встраиваемых систем с ограниченным хранилищем.
  • Проблемы с Secure Boot. Несмотря на поддержку Secure Boot, на некоторых системах (особенно с UEFI от Microsoft) могут возникать проблемы с подписями, требующие ручного вмешательства (например, добавления ключа MOK).
  • Зависимость от файловой системы. Если /boot находится на зашифрованном или повреждённом разделе, GRUB 2 может не загрузиться. Для таких случаев существуют альтернативы, такие как systemd-boot или LILO.

Альтернативы

  • systemd-boot (ранее gummiboot) — простой загрузчик для UEFI, используемый в некоторых дистрибутивах (например, Arch Linux, Fedora). Не поддерживает скриптование и мультизагрузку с Windows по цепочке.
  • LILO (Linux Loader) — устаревший загрузчик, не поддерживающий файловые системы и UEFI.
  • rEFInd — графический менеджер загрузки для UEFI, поддерживающий множество ОС, включая Linux, Windows и macOS.
  • GRUB Legacy — предшественник GRUB 2, всё ещё используется в некоторых старых дистрибутивах и встраиваемых системах.

Источники

  • Официальная документация GNU GRUB 2 (GNU GRUB Manual 2.12)
  • Статья «GRUB 2» в ArchWiki
  • Статья «GRUB» в Ubuntu Community Help Wiki
  • Книга «Linux Kernel in a Nutshell» (Грег Кроа-Хартман, раздел о загрузчиках)
  • Статья «The GRUB 2 Bootloader» на сайте Linux.com
  • Документация проекта Fedora: «GRUB 2»

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →