Что такое GRUB: полное руководство по GNU Boot Manager

Последнее обновление: 14 октября 2025
Автор: TecnoDigital
  • GRUB — это менеджер загрузки GNU, который выбирает и загружает операционную систему, поддерживая BIOS/UEFI и мультизагрузку.
  • GRUB 2 добавляет модули, улучшенную поддержку файловой системы, поиск UUID и графическое меню/терминал.
  • Конфигурация управляется через /etc/default/grub и 40_custom, обновляется с помощью update-grub или grub2-mkconfig.
  • Безопасность: Защитите GRUB паролем, используйте шифрование LUKS и примените надежную политику паролей.

Общая иллюстрация GRUB

Если вы установили GNU/Linux на свой компьютер или используете несколько операционных систем, вы, вероятно, слышали о GRUB. Это небольшая, но мощная программа, которую вы видите непосредственно перед загрузкой системы, позволяющая выбрать, что загрузить. Хотя она часто остается незамеченной, ее роль имеет решающее значение для запуска операционной системы и плавной передачи управления ядру.

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

Что такое GNU GRUB и для чего он нужен?

GNU GRUB (GNU GRand Unified Bootloader) — это менеджер мультизагрузки: программное обеспечение, которое запускает микропрограмма (BIOS или UEFI) при включении компьютера для выбора и загрузки операционной системы. Он позволяет пользователям выбирать пункты меню, передавать параметры ядру, загружаться по сети и даже взаимодействовать с консолью для устранения конкретных проблем.

В основном он используется в дистрибутивах GNU/Linux, хотя также применялся и в других системах, таких как Solaris на x86. В современных системах UEFI прошивка напрямую загружает исполняемый файл GRUB, расположенный в системном разделе EFI (ESP) , при условии, что он зарегистрирован в NVRAM; в BIOS/MBR GRUB занимает начальные сектора диска и продолжает работу с них.

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

Экран параметров загрузки GRUB

Технический паспорт и данные проекта

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

Он написан в основном на C и ассемблере и работает на нескольких платформах: IA-32, x86-64 и PowerPC, среди прочих. Текущая ветка — GRUB 2 (реализация исторической «GRUB Legacy»). Последняя выпущенная стабильная версия — 2.12 (20 декабря 2023 г.). Чтобы проверить свою локальную версию, выполните: grub-install --version и вы увидите соответствующую цепочку.

Немного истории и эволюции

GRUB зародился как инициатива Эриха Стефана Болейна в контексте GNU Hurd и микроядра Mach. Для решения проблемы несоответствия методов загрузки была создана спецификация Multiboot, которая позволила загрузчикам и ядрам «говорить на одном языке». В 1999 году Гордон Мацигкейт и Йошинори Окудзи возглавили работу по её принятию в качестве официального пакета проекта GNU.

Примерно в 2002 году группа японских исследователей начала работу над проектом PUPA (Preliminary Universal Programming Architecture) с целью переписать GRUB, чтобы сделать его более надежным и модульным. Результатом этой работы стал GRUB 2 , в то время как предыдущая версия стала известна как "GRUB Legacy" (версия 0.97 была в последний раз обновлена ​​в 2005 году). Начиная с 2007 года, несколько дистрибутивов перешли на GRUB 2, и к концу 2009 года подавляющее большинство включало его по умолчанию.

Схема процесса загрузки GRUB

Как загрузить компьютер с помощью GRUB (BIOS и UEFI)

При включении компьютера прошивка выполняет проверки (ОЗУ, тактовой частоты, устройств, порядка загрузки) и ищет загрузчик. В системах с BIOS/MBR управление передаётся Основная загрузочная запись (MBR), начальные 512 байт дискаGRUB был разделён на этапы: этап 1 (минимальный код в MBR), этап 1.5 (в последующих секторах, мосты для понимания файловых систем) и этап 2 (меню и расширенные функции). В GRUB 2 этот «1.5» больше не существует; теперь есть специальные образы, такие как boot.img, core.img и модули (*.mod), которые объединяются в соответствии с установкой.

  Как пошагово настроить BIOS или UEFI на вашем ПК

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

Спецификация и совместимость мультизагрузки

GRUB реализует технологию Multiboot, позволяющую загружать совместимые ядра без специальных «хитростей». Кроме того, для систем, которые её не поддерживают (например, Windows или DOS ), он предлагает цепную загрузку, ориентированную на первый сектор раздела, где находятся его загрузчики.

Его файловая система совместима со многими системами: Btrfs, ext2/3/4, FAT12/16/32, exFAT, HFS/HFS+, ISO9660, Nilfs2, NTFS, ReiserFS, ZFS, ROMFS, JFS, XFS и другими. Он также может считывать данные с томов LVM и RAID-массивов, что является существенным преимуществом при сложной структуре хранения.

Рекомендуемые возможности и функции

  • Интерфейс меню Настраиваемый и очень гибкий интерактивный терминал с функцией автодополнения по клавише Tab и сочетаниями клавиш в стиле Bash.
  • Поддержка LBA (логическая блочная адресация) для преодоления классических ограничений BIOS и чтения за пределами 1024 цилиндров.
  • Емкость для сетевая загрузка (PXE/TFTP) и удаленные терминалы, полезные в сценариях централизованного управления.
  • Автоматическая распаковка и распознавание нескольких форматов исполняемых файлов.
  • Постоянное хранение переменных с save_env/load_env y grub-editenv (когда платформа это позволяет).
  • Все функции обнаружения оперативной памяти, независимость от геометрии диска и механизмы поиска по меткам и UUID.
  • Графическая поддержка меню и фонов, а также модульная конструкция, которая поддерживает core.img небольшой и загружает модули по мере необходимости.

Ключевая терминология: устройства, разделы и пути

GRUB именует диски и разделы по-своему. Первый диск обычно (hd0), первый раздел (hd0,1) В GRUB 2 (помните: в GRUB 2 нумерация начинается с 1; в Legacy — с 0). Для обозначения всего диска раздел опускается: (hd0).

Для обозначения файлов устройство комбинируется с путем: (hd0,1)/ruta/al/archivo. Он также поддерживает черные списки (черные списки), когда необходимо указать точное местоположение на диске файла, который не виден как таковой в файловой системе, например (hd0,1)+1 для первого сектора раздела, полезно с chainloader +1.

«Корневая файловая система» в GRUB — это не то же самое, что «/» в Linux. Это просто корневой раздел, с которого GRUB будет читать свои файлы ; как только ядро ​​Linux берет управление на себя, оно определяет свой собственный фактический корневой раздел, и все остальное в GRUB становится неактуальным.

Интерфейсы GRUB

GRUB предлагает три основных режима просмотра. Наиболее привычный — это меню с предварительно настроенными пунктами; вы можете перемещаться по нему с помощью клавиш со стрелками, загружать систему с помощью клавиши Enter, редактировать запись с помощью клавиши «e» или открывать консоль с помощью клавиши «c».

Редактор ввода позволяет изменять строки на лету (добавлять с помощью "o/O", редактировать с помощью "e", удалять с помощью "d") и, если все выглядит правильно, загружаться с помощью "b". Он идеально подходит для тестирования параметров ядра без изменения файлов.

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

Распространенные сообщения об ошибках

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

  • 1: Неверный или неабсолютный путь; 2: Неверный тип файла (не обычный файл); 3–4: Поврежденные данные/заголовок во время распаковки; 5: поврежденная таблица разделов или недействительным.
  • 6: Несовместимость Stage1/Stage2; 7: Загрузка менее 1 МБ не поддерживается; 8: Попытка загрузки без загрузки ядра; 9: Неизвестная ошибка загрузки.
  • 10: Функции мультизагрузки не поддерживаются; 11: Устройство не распознано; 12: Недопустимое устройство; 13: Неподдерживаемый формат исполняемого файла.
  • 14: Файловая система препятствует чтению всего файла; 15: файл не найден; 16: Непоследовательная структура файловой системы.
  • 17: Невозможно смонтировать выбранный раздел; 18: Цилиндр вне диапазона, поддерживаемого BIOS (типично для старых дисков); 19: Initrd перед ядром.
  • 20: Модули перед мультизагрузочным ядром; 21: Выбранный диск не существует; 22: Несуществующий раздел; 23: Ошибка интерпретации числа.
  • 24: Доступ к блоку за пределами раздела; 25: Ошибка чтения диска; 26: Слишком много символических ссылок; 27: Неизвестная команда.
  • 28: Элемент не помещается в память; 29: Ошибка записи на диск; 30: Недопустимый аргумент; 31: Файл не выровнен по секторам (ReiserFS, используйте нотейл).
  • 32: Требуется аутентификация; 33: Последовательное устройство не настроено; 34: Нет свободных секторов для этапа 1.5 после MBR (конфликт с EZ-BIOS или раздел начинается слишком рано).
  Как включить и настроить скрытые параметры Windows 11

Основные команды GRUB

В консоли можно выполнять очень полезные интерактивные команды. Например, boot запускает последнюю загрузку (ядро или цепной загрузчик), и chainloader <archivo> загружает сектор или файл из цепочки; типичный ярлык для Windows — chainloader +1.

displaymem отображает использование памяти в соответствии с BIOS, что удобно, если вы не уверены в обнаруженном объёме оперативной памяти. initrd <archivo> вы указываете начальный образ RAM-диска, необходимый ядру.

Для установки в MBR из консоли GRUB Legacy вы использовали install с маршрутами к stage1, stage2 и, опционально, в файл конфигурации. Сегодня в GRUB 2, из системы, обычно используется grub-install и регенерировать меню с помощью update-grub/grub2-mkconfig.

Команда kernel определяет двоичный файл ядра и его параметры, например: kernel /vmlinuz root=/dev/sda5Обычно ему предшествует root (hdX,Y) o rootnoverify для установки раздела, с которого GRUB будет производить чтение.

Конфигурационные файлы и директивы

В GRUB Legacy меню располагалось в /boot/grub/menu.lst o grub.conf, с такими директивами, как color, default, fallback, hiddenmenu, password, timeout, splashimage и блоки title с заказами для каждой системы.

Классический пример (перефразированный) включает раздел Linux с root (hd0,2), kernel с корневой параметр=/…, y boot; и еще один для Windows с rootnoverify (hd0,1) y chainloader +1.

В GRUB 2 автоматически сгенерированный файл — /boot/grub/grub.cfg. Не рекомендуется редактировать его вручную, вместо этого он корректируется /etc/default/grub (такие значения, как GRUB_TIMEOUT, GRUB_DEFAULTи т.д.) и пользовательские записи добавляются в /etc/grub.d/40_custom. Затем он выполняется. update-grub o grub2-mkconfig для регенерации меню.

Ключевые различия между GRUB Legacy и GRUB 2

  • Файл конфигурации перешел из menu.lst/grub.conf a grub.cfg, с обновленным синтаксисом и командами и автоматической генерацией с помощью grub-mkconfig.
  • Нумерация разделов начинается в 1 году в GRUB 2 (в Legacy он начинался с 0).
  • Сохранение переменных с save_env/load_env в некоторых конфигурациях.
  • Лучшее обнаружение маршрута и поиск по UUID/тегам; поддерживается больше файловых систем.
  • Прямое чтение из LVM и RAID.
  • Графика терминала и меню, а также реорганизованные изображения: этап 1.5 удален; boot.img, core.img и динамические модули (*.mod).

Безопасность и укрепление с помощью GRUB

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

Установить Надежный пароль для ограничения изменения записей или доступа к консоли. В GRUB 2 используйте имена пользователей и пароли с grub-mkpasswd-pbkdf2 и настроить соответствующие правила в скриптах /etc/grub.d/.

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

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

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

  Освоение команды tar gz в Linux

Установка и обслуживание

Если вы не установили GRUB во время установки дистрибутива, вы можете сделать это позже. В GRUB 2 выполните команду sudo grub-install /dev/sdX (замените на свой диск) и затем sudo update-grub o sudo grub2-mkconfig -o /boot/grub/grub.cfgМеню появится при следующей загрузке.

Из консоли GRUB Legacy классическая процедура — указать root и запустить установку: root (hd1,0) с последующим setup (hd1,0) для первого раздела второго диска, или setup (hd1) если вы укажете MBR этого второго диска.

Редактировать напрямую /boot/grub/grub.cfg Это не очень хорошая идея в GRUB 2, даже если это технически возможно. Рекомендуемый маршрут это изменить /etc/default/grub, использование /etc/grub.d/40_custom для собственного содержания и регенерации.

Практические вопросы и полезные советы

Как узнать, какой раздел является загрузочным на /dev/sda? В системах BIOS/MBR: sudo fdisk -l /dev/sda (см. звёздочку для «Загрузки»). В GPT/UEFI: lsblk -o NAME,FSTYPE,PARTTYPE,PARTFLAGS,MOUNTPOINT и найдите раздел EFI (FAT32, введите EF00/flags esp). Также sudo efibootmgr -v отображает записанные записи загрузки.

Как получить UUID раздела? В лице blkid o lsblk -f, Например: sudo blkid /dev/sda2 возвращает его UUID и другие метаданные.

Как заставить GRUB 2 ждать 10 секунд перед вводом записи по умолчанию? Регулирует /etc/default/grub c GRUB_TIMEOUT=10 (и, если применимо, GRUB_TIMEOUT_STYLE=menu) и выполняет sudo update-grub o grub2-mkconfig.

Команды GRUB Legacy для установки на первый раздел второго диска? Откройте консоль и выполните: root (hd1,0) , а затем setup (hd1,0)Если бы вам нужен был MBR, это было бы setup (hd1).

Действия по изменению конфигурации GRUB 2? 1) Редактировать /etc/default/grub (например., GRUB_DEFAULT, GRUB_TIMEOUT), 2) добавить записи в /etc/grub.d/40_custom если они вам нужны, 3) регенерируйте с помощью update-grub/grub2-mkconfig, 4) перезагрузите и проверьте.

Где разместить пользовательские меню в GRUB 2? En /etc/grub.d/40_custom (или собственные файлы в /etc/grub.d/ (с соответствующими разрешениями). Никогда не редактируйте вручную. /boot/grub/grub.cfg за исключением экстренных случаев.

Где хранились записи в GRUB Legacy? En /boot/grub/menu.lst o grub.conf, согласно распределению.

Как получить доступ к консоли GRUB из меню? В GRUB 2 или Legacy нажмите клавишу "c". Чтобы отредактировать определенную запись, нажмите "e". Оба сочетания клавиш очень полезны, когда нужно быстро диагностировать проблемы.

Примеры распространенных вариантов

Выбор загрузки по умолчанию: GRUB_DEFAULT=0 начинается первый иннинг; с GRUB_DEFAULT=saved Запоминает последнюю использованную конфигурацию. После изменения необходимо сгенерировать конфигурацию заново.

Время ожидания: GRUB_TIMEOUT=4 регулирует задержку меню; с 0 запускается без паузы; в некоторых сценариях вы можете скрыть меню с помощью GRUB_TIMEOUT_STYLE=hidden для более чистого старта.

Обновление меню: в Debian/Ubuntu и производных, sudo update-grub; в других случаях, sudo grub2-mkconfig -o /boot/grub/grub.cfg. Убедитесь, что у вас есть os-prober устанавливается, если вы хотите автоматически обнаруживать другие системы.

Хотя GRUB встречается и за пределами GNU/Linux, помните, что это не служба поддержки. Если ваша проблема специфична для Windows, наиболее практичным решением будет обратиться за специализированной помощью на форумы, посвященные этой системе.

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

UEFI Буткит
Связанная статья:
UEFI Bootkit: Bootkitty в Linux и наследие BlackLotus