Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

GNU GRUB (сокращение от GNU GR и унифицированный загрузчик , обычно называемый GRUB ) - это пакет загрузчика из проекта GNU . GRUB является эталонной реализацией из Фонда свободного программного обеспечения «s Multiboot Спецификации , которая обеспечивает пользователь выбор загрузка одного из нескольких операционных систем , установленный на компьютере , или выбрать конкретное ядро конфигурации доступна на разделах конкретной операционной системы.

GNU GRUB был разработан на основе пакета под названием Grand Unified Bootloader (игра на Теории Великого Объединения [5] ). Он преимущественно используется для Unix-подобных систем. Операционная система GNU использует GNU GRUB в качестве загрузчика, как и большинство дистрибутивов Linux и операционной системы Solaris на системах x86, начиная с Solaris 10 1/06 выпуска.

Операция [ править ]

GRUB2 на жестком диске с разделами на MBR ; stage 1 ( boot.img) также можно записать в один из загрузочных секторов раздела .
GRUB2 на жестком диске с разделами GPT , загрузка с прошивкой BIOS или режим совместимости с UEFI (CSM)

Загрузка [ править ]

Когда компьютер включен, BIOS находит настроенное основное загрузочное устройство (обычно жесткий диск компьютера), загружает и выполняет программу начальной загрузки из основной загрузочной записи (MBR). MBR - это первый сектор жесткого диска со смещением нуля (счет секторов начинается с нуля). Долгое время размер сектора составлял 512 байт, но с 2009 года доступны жесткие диски с размером сектора 4096 байт, которые называются дисками расширенного формата . По состоянию на октябрь 2013 года такие жесткие диски по-прежнему доступны в секторах размером 512 байт с использованием эмуляции 512e . [6]

Наследство MBR таблица разделов поддерживает максимум четырех разделов и занимает 64 байт, вместе взятой. Вместе с дополнительной подписью диска (четыре байта) и меткой времени диска (шесть байтов) это оставляет от 434 до 446 байтов доступными для машинного кода загрузчика. Хотя такого небольшого пространства может хватить для очень простых загрузчиков [7], его недостаточно для размещения загрузчика, поддерживающего сложные и множественные файловые системы., выбор вариантов загрузки с помощью меню и т. д. Таким образом, загрузчики с большей занимаемой площадью разделяются на части, где самая маленькая часть помещается в MBR и находится в ней, в то время как более крупные части хранятся в других местах (например, в пустые секторы между MBR и первым разделом) и вызываются кодом MBR загрузчика.

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

Одним из возможных подходов загрузчиков к загрузке образов ядра является прямой доступ к секторам жесткого диска без понимания базовой файловой системы. Обычно требуется дополнительный уровень косвенного обращения в виде карт или файлов карт. - вспомогательные файлы, содержащие список физических секторов, занятых образами ядра. Такие карты необходимо обновлять каждый раз, когда образ ядра меняет свое физическое местоположение на диске из-за установки новых образов ядра, дефрагментации файловой системы и т. Д. Кроме того, в случае изменения физического местоположения карт их местоположения необходимо обновить в пределах MBR-код загрузчика, поэтому механизм косвенного обращения к секторам продолжает работать. Это не только громоздко, но и требует ручного ремонта системы на случай, если что-то пойдет не так во время обновления системы. [8]

Другой подход состоит в том, чтобы сообщить загрузчику о лежащих в основе файловых системах, чтобы образы ядра были настроены и доступны с использованием их фактических путей к файлам.. Для этого требуется, чтобы загрузчик содержал драйвер для каждой из поддерживаемых файловых систем, чтобы они могли быть поняты и доступны для самого загрузчика. Этот подход устраняет необходимость в жестко заданных местоположениях секторов жесткого диска и существовании файлов карты, а также не требует обновления MBR после добавления или перемещения образов ядра. Конфигурация загрузчика хранится в обычном файле, доступ к которому также осуществляется с учетом требований файловой системы для получения конфигураций загрузки перед фактической загрузкой любых образов ядра. В результате вероятность того, что что-то пойдет не так во время различных обновлений системы, значительно снижается. С другой стороны, такие загрузчики имеют повышенную внутреннюю сложность и занимают еще больше места. [8]

GNU GRUB использует второй подход, понимая лежащие в основе файловые системы. Сам загрузчик разделен на несколько этапов , что позволяет ему вписаться в схему загрузки MBR.

Обычно используются две основные версии GRUB: GRUB версии 1, называемой GRUB legacy, преобладает только в более старых выпусках дистрибутивов Linux, некоторые из которых все еще используются и поддерживаются, например CentOS 5. GRUB 2 был написан с нуля и предназначен для замены своего предшественника и сейчас используется в большинстве дистрибутивов Linux.

Версия 0 (GRUB Legacy) [ править ]

Меню GRUB v1 (работает как часть установки Ubuntu 8.04)

GRUB 0.x использует двухэтапный подход. Основная загрузочная запись (MBR) обычно содержит этап 1 GRUB или может содержать стандартную реализацию MBR, которая загружает этап 1 GRUB по цепочке из загрузочного сектора активного раздела . Учитывая небольшой размер загрузочного сектора (512 байт), этап 1 может делать немного больше, чем загружать следующий этап GRUB, загружая несколько секторов диска из фиксированного места рядом с началом диска (в пределах его первых 1024 цилиндров).

Ступень 1 может загружать ступень 2 напрямую, но обычно она настроена на загрузку ступени 1.5. , расположенный на первых 30 Кбайт жесткого диска сразу после MBR и перед первым разделом. Если это пространство недоступно (необычная таблица разделов, специальные драйверы диска, GPT или LVM- диск), установка этапа 1.5 завершится ошибкой. Этап 1,5 образом содержит драйвера файловой системы, что позволяет ему непосредственно загружать этап 2 из любого известного места в файловой системе, например , с /boot/grub. Затем на этапе 2 будет загружен файл конфигурации по умолчанию и любые другие необходимые модули.

Версия 2 (GRUB 2) [ править ]

GRUB 2 - визуализация разделов MBR и GPT и последовательности загрузки (системы с прошивкой BIOS).

Запуск в системах с использованием прошивки BIOS [ править ]

  • См. Иллюстрацию на последнем изображении справа. [9]
  • boot.img( этап 1 ) записывается в первые 440 байтов главной загрузочной записи (загрузочный код MBR в секторе 0) или, необязательно, в загрузочный сектор раздела (PBR). Он обращается diskboot.imgпо 64-битному адресу LBA. Фактический номер сектора записывается с помощью grub-install. diskboot.imgявляется первым сектором core.imgс единственной целью загрузить остальные, core.imgидентифицированные номерами секторов LBA, также записанными grub-install.
  • На дисках с MBR-разделами core.img( стадия 1.5 ) сохраняется в пустых секторах (если есть) между MBR и первым разделом. Последние операционные системы предлагают здесь зазор в 1 Мбайт для выравнивания (2047 * 512 байт или 255 * 4 КБ секторов). Раньше этот промежуток составлял 62 сектора (31 КиБ) в качестве напоминания о предельном количестве секторов для адресации Цилиндр-Головка-Сектор (C / H / S), который использовался BIOS до 1996 года, поэтому core.imgон спроектирован таким образом, чтобы он был меньше 32 КиБ.
  • На дисках с разделами GPT: количество основных разделов не ограничено четырьмя, поэтому они core.imgзаписываются в собственный крошечный (1 МБ) загрузочный раздел BIOS без файловой системы.
  • этап 2: core.img загрузка /boot/grub/i386-pc/normal.modиз раздела, настроенного с помощью grub-install. Если индекс раздела изменился, GRUB не сможет найти normal.mod, и представляет пользователю запрос восстановления GRUB.
  • В зависимости от того, как был установлен GRUB2, он /boot/grub/находится либо в корневом разделе дистрибутива Linux, либо в отдельном разделе / boot .
  • после загрузки normal.mod: normal.mod анализирует /boot/grub/grub.cfg, дополнительно загружает модули (например, для поддержки графического интерфейса и файловой системы) и показывает меню.

Запуск в системах с прошивкой UEFI [ править ]

  • /efi/<distro>/grubx64.efi(для систем x64 UEFI) устанавливается как файл в системном разделе EFI и загружается непосредственно микропрограммой, без a boot.imgв секторе 0 MBR. Этот файл, как stage1 и stage1.5.
  • /boot/grub/может быть установлен в системный раздел EFI или отдельный загрузочный раздел.
  • Для систем x64 UEFI stage2 - это /boot/grub/x86_64-efi/normal.modфайл и другие /boot/grub/файлы.

После запуска [ править ]

GRUB представляет меню, в котором пользователь может выбрать операционную систему (ОС), найденную с помощью grub-install. GRUB можно настроить на автоматическую загрузку указанной ОС по истечении заданного пользователем тайм-аута. Если тайм-аут установлен на ноль секунд, нажатие и удерживание ⇧ Shiftво время загрузки компьютера позволяет получить доступ к меню загрузки. [10]

В меню выбора операционной системы GRUB принимает несколько команд:

  • Нажав e, можно отредактировать параметры ядра выбранного пункта меню до запуска операционной системы . Причиной для выполнения этого в GRUB (т.е. отсутствия редактирования параметров в уже загруженной системе) может быть экстренный случай: система не загрузилась. Используя строку параметров ядра, можно, среди прочего, указать модуль, который должен быть отключен (занесен в черный список) для ядра. Это может потребоваться, если конкретный модуль ядра сломан и, таким образом, препятствует загрузке. Например, чтобы внести модуль ядра в черный список nvidia-current, можно добавить его modprobe.blacklist=nvidia-currentв конце параметров ядра.
  • При нажатии cпользователь входит в командную строку GRUB. Командная строка GRUB не является обычной оболочкой Linux, такой как, например, bash , и принимает только определенные специфичные для GRUB команды, задокументированные различными дистрибутивами Linux. [11]

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

История [ править ]

GRUB изначально был разработан Эрихом Болейном в рамках работы по загрузке операционной системы GNU / Hurd , разработанной Free Software Foundation . [12] В 1999 году Гордон Мацигкейт и Ёсинори К. Окуджи сделали GRUB официальным программным пакетом проекта GNU и открыли процесс разработки для общественности. [12] По состоянию на 2014 год большинство дистрибутивов Linux приняли GNU GRUB 2, а также другие системы, такие как Sony PlayStation 4 . [13]

Развитие [ править ]

GRUB версии 1 (также известной как «GRUB Legacy») больше не находится в разработке и постепенно прекращается. [14] Разработчики GNU GRUB переключили свое внимание на GRUB 2, [15] полностью переписан с целями включая обеспечение GNU GRUB уборщика, более мощный, более портативный и более мощный. GRUB 2 стартовал под названием PUPA . PUPA была поддержана Агентством по продвижению информационных технологий (IPA) в Японии. PUPA была интегрирована в разработку GRUB 2 примерно в 2002 году, когда версия GRUB 0.9x была переименована в GRUB Legacy.

Некоторые из целей проекта GRUB 2 включают поддержку платформ , отличных от x86 , интернационализацию и локализацию , символы, отличные от ASCII, динамические модули, управление памятью , мини-язык сценариев , перенос кода, специфичного для платформы (x86), в модули, специфичные для платформы, и объектно-ориентированный фреймворк. GNU GRUB версии 2.00 был официально выпущен 26 июня 2012 г. [16] [17]

Три наиболее широко используемых дистрибутива Linux используют GRUB 2 в качестве основного загрузчика. [18] [19] [20] Ubuntu принял его в качестве загрузчика по умолчанию в своей версии 9.10 в октябре 2009 года. [21] Fedora последовала его примеру с Fedora 16, выпущенной в ноябре 2011 года. [22] OpenSUSE принял GRUB 2 в качестве загрузки по умолчанию. загрузчик с его выпуском 12.2 от сентября 2012. [23] Solaris также принял GRUB 2 на платформе x86 в выпуске Solaris 11.1. [24]

В конце 2015 года был обнаружен и быстро исправлен эксплойт по нажатию клавиши Backspace 28 раз для обхода пароля входа. [25] [26]

Варианты [ править ]

GNU GRUB - бесплатное программное обеспечение с открытым исходным кодом , поэтому было создано несколько вариантов. Некоторые примечательные, которые не были объединены в основную ветку GRUB:

  • OpenSolaris включает модифицированный GRUB Legacy, который поддерживает метки дисков BSD , автоматический выбор 64-битного ядра и загрузку из ZFS (со сжатием и несколькими средами загрузки). [27] [28]
  • В Google Summer of Code 2008 был проект по поддержке устаревшей версии GRUB для загрузки с разделов, отформатированных в ext4 . [29]
  • Проект Syllable создал модифицированную версию GRUB для загрузки системы из файловой системы AtheOS . [30]
  • TrustedGRUB расширяет GRUB, реализуя проверку целостности системы и безопасность процесса загрузки с помощью доверенного платформенного модуля (TPM). [31]
  • Набор тестов реализации Intel BIOS (BITS) предоставляет среду GRUB для тестирования BIOS и, в частности, их инициализации процессоров, оборудования и технологий Intel. BITS поддерживает создание сценариев через Python и включает API-интерфейсы Python для доступа к различным низкоуровневым функциям аппаратной платформы, включая ACPI, регистры процессора и набора микросхем, PCI и PCI Express. [32]
  • GRUB4DOS - это уже не существующая унаследованная ветвь GRUB, которая улучшает процесс установки в DOS и Microsoft Windows , помещая все, кроме конфигурации GRLDR, в один файл образа. Его можно загрузить с помощью диспетчера загрузки Windows . [33] [34]

Утилиты [ править ]

Инструменты настройки GRUB [ править ]

StartUp-Manager , программа, используемая для настройки GRUB

Инструменты установки, используемые различными дистрибутивами, часто включают модули для установки GRUB. Например, YaST2 в дистрибутивах SUSE Linux и openSUSE и Anaconda в дистрибутивах Fedora / RHEL . StartUp-Manager и GRUB Customizer - это графические редакторы конфигурации для дистрибутивов на основе Debian. Разработка StartUp-Manager была остановлена ​​6 мая 2011 года после того, как ведущий разработчик привел личные причины неактивного развития программы. [35] GRUB Customizer также доступен для дистрибутивов на основе Arch.

Для GRUB 2 существуют модули управления KDE. [36] [37]

GRLDR ICE - это крошечный инструмент для изменения конфигурации файла grldr по умолчанию для GRUB4DOS. [38]

Утилиты восстановления загрузки [ править ]

Boot-Repair - это простой графический инструмент для восстановления после частых проблем, связанных с загрузкой, с загрузчиком GRUB и Microsoft Windows . Это приложение доступно под лицензией GNU GPL . Boot-Repair может восстановить GRUB в нескольких дистрибутивах Linux, включая, помимо прочего, Debian, Ubuntu, Mint , Fedora, openSUSE и Arch Linux .

Настройщик GRUB

Установщик для Windows [ править ]

Grub2Win - это программный пакет с открытым исходным кодом для Windows. Он позволяет GNU GRUB загружаться из каталога Windows. Программа установки устанавливает GNU GRUB версии 2.04 в раздел NTFS. Затем приложение Windows GUI используется для настройки меню загрузки GRUB, тем, порядка загрузки UEFI, сценариев и т. Д. Все сценарии и команды GNU GRUB поддерживаются как для UEFI, так и для устаревших систем. Grub2Win может настроить GRUB для мультизагрузки Windows, Ubuntu, openSuse, Fedora и многих других дистрибутивов Linux. Он находится в свободном доступе под лицензией GNU GPL на SourceForge .

Альтернативные менеджеры загрузки [ править ]

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

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

  • rEFInd - графический менеджер загрузки в стиле Macintosh, только для компьютеров на базе UEFI (BIOS не поддерживается).
  • CloverEFI - графический менеджер загрузки в стиле Macintosh для компьютеров на базе BIOS и UEFI. Эмулирует UEFI с сильно модифицированным DUET от проекта TianoCore. Требуется раздел в формате FAT даже в системах BIOS. В качестве преимущества он имеет базовый драйвер файловой системы в загрузочном секторе раздела, что позволяет избежать уязвимости 2-го и 3-го этапов GRUB и печально известного приглашения GRUB Rescue. Пользовательский интерфейс похож на rEFInd: оба наследуются от заброшенного менеджера загрузки rEFIt .
  • BOOTBOOT - простой и удобный в использовании 64-битный протокол загрузки. Поддерживает BIOS, UEFI, ARM Raspberry Pi (3 и выше), El Torito CDROM, протокол загрузки Linux x86, дополнительные ПЗУ UEFI PCI и т. Д. Он также совместим с мультизагрузкой, поэтому его можно добавить в меню grub.cfg. Графический экран и последовательный порт (для сообщений отладки) настраиваются для ядра независимо от платформы. Для ядер ELF64 и PE32 +, поддерживаемых с компоновкой более высокой половины, а также примеры C / C ++ и Rust, предоставленные разработчикам ОС для любителей.

Альтернативы без графики:

  • systemd-boot - Легкий менеджер загрузки только для UEFI с текстовым меню выбора ОС.

Внешние ссылки [ править ]

Практические инструкции и устранение неполадок [ править ]

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

  • Arch Linux / GRUB
  • Ubuntu / Grub2 (также см. Ссылки внизу)
  • Fedora / GRUB_2
  • Gentoo / GRUB2
  • Учебник по теме Grub2

Документация [ править ]

  • Руководство GRUB - самая подробная документация, включая все команды
  • Официальный веб-сайт
  • GRUB wiki, архивная в 2010 г.

Вводные статьи [ править ]

  • Загрузка с GRUB , статья в Linux Journal от апреля 2001 г.

Технические характеристики [ править ]

  • Загрузка Linux на x86 с использованием Grub2 - подробная статья
  • Единый расширяемый интерфейс прошивки (прошивка UEFI, распространена с 2012 года)
  • Таблица разделов GUID (GPT) - обрабатывает жесткие диски размером более 2 ТиБ и более 4 разделов.
  • Основная загрузочная запись, используемая с прошивкой BIOS (материнские платы примерно до 2012 года)
  • Спецификация загрузки BIOS версии 1.01 (11 января 1996 г.) - трудно найти

См. Также [ править ]

  • SysLinux (IsoLinux) - часто используемый загрузчик на CD, DVD
  • BOOTMGR - текущий загрузчик Windows
  • NTLDR - предыдущий загрузчик Windows, использовавшийся до Windows Vista
  • rEFInd - альтернативный загрузчик для компьютеров на базе UEFI
  • Сравнение загрузчиков

Ссылки [ править ]

  1. ^ https://alpha.gnu.org/gnu/grub/
  2. ^ Кипер, Daniel (4 июля 2019). «Выпуск GRUB 2.04» . grub-devel (список рассылки) . Проверено 5 июля 2019 года .
  3. ^ "Резюме анализа Ohloh - GNU GRUB" . Охлох . Проверено 12 мая 2010 года .
  4. ^ "Лицензия GNU GRUB" . Архивировано из оригинального 11 сентября 2013 года .
  5. ^ EnterpriseLinux.com Определения Определение GRand Unified Bootloader
  6. ^ Смит, Райан (18 декабря 2009 г.). «Расширенный формат Western Digital: переход в сектор 4K начинается» . AnandTech . Проверено 10 октября 2013 года .
  7. ^ "mbldr (главный загрузочный LoaDeR)" . mbldr.sourceforge.net . 2009 . Проверено 10 октября 2013 года .
  8. ^ a b «Загрузка и менеджеры загрузки» . SUSE . Проверено 10 октября 2013 года .
  9. ^ "Руководство 2.04 GNU GRUB" . www.gnu.org . Проверено 10 ноября 2020 года .
  10. Хоффман, Крис (22 сентября 2014 г.). «Как настроить параметры загрузчика GRUB2» . HowToGeek.com .
  11. ^ "Документация GNU GRUB" .
  12. ^ a b Руководство GRUB - 1.2 История Grub . Gnu.org (23.06.2012). Проверено 1 декабря 2012.
  13. ^ «PS4 работает под управлением ОС Orbis, модифицированной версии FreeBSD, похожей на Linux» . extremetech.com . 24 июня 2013 . Проверено 23 октября 2013 года .
  14. ^ GNU GRUB - Наследие GRUB . Gnu.org. Проверено 1 декабря 2012.
  15. ^ "GNU GRUB - GRUB 2" . Архивировано 7 июня 2008 года . Проверено 18 апреля 2014 года .CS1 maint: bot: исходный статус URL неизвестен ( ссылка ).
  16. ^ Сербиненко, Владимир (28 июня 2012). «Выпущен GRUB 2.00» . grub-devel (список рассылки) . Проверено 1 декабря 2012 года .
  17. ^ Ларабель, Майкл. "Официальный выпуск загрузчика GRUB 2.00" . Phoronix.com . Проверено 28 июня 2012 года .
  18. Хэддон, Том (26 января 2012 г.). «Введение в Ubuntu» . WebJunction. Архивировано из оригинального 28 октября 2012 года . Проверено 21 сентября 2012 года .
  19. ^ Янссен, Кори. "Что такое Red Hat Enterprise Linux (RHEL)?" . Технопедия . Проверено 21 сентября 2012 года .
  20. ^ Varghese, Сэм (20 сентября 2012). «Руководитель SUSE перечисляет прогресс с момента приватизации» . Проверено 21 сентября 2012 года .
  21. ^ "9.10 Кармическая версия GRUB" . Distrowatch.com . Проверено 8 июля 2012 года .
  22. ^ GRUB 2 . FedoraProject. Проверено 1 декабря 2012.
  23. ^ openSUSE: Предстоящие возможности - openSUSE. Архивировано 20 сентября 2012 г. на Wayback Machine . En.opensuse.org. Проверено 1 декабря 2012.
  24. ^ Solaris 11.1 . Oracle Дата обращения 19 марта 2015.
  25. ^ Khandelwal, Свати (16 декабря 2015). «Вы можете взломать компьютер с Linux, просто нажав« Backspace »28 раз» . thehackernews.com .
  26. ^ Марко и Гектор; Риполл, Исмаэль (декабрь 2015 г.). «Назад к 28: 0-дневная аутентификация Grub2» .
  27. ^ x86: Изменение поведения загрузки путем редактирования меню GRUB во время загрузки Архивировано 19 июля 2011 г. на Wayback Machine , Изменение поведения загрузки Solaris в системах на базе x86 (карта задач) - Руководство системного администратора: базовое администрирование
  28. ^ x86: Поддерживаемые реализации GRUB. Архивировано 21 октября 2009 г. на Wayback Machine (Руководство системного администратора: базовое администрирование) - Sun Microsystems
  29. ^ Пэн, Дао. «Grub4ext4» . Проверено 13 июня 2017 года .
  30. ^ 2.3 Почему у Syllable есть собственная версия GRUB? Архивировано 7 января 2011 года на Wayback Machine , Syllable Documentation.
  31. ^ "Проект TrustedGRUB" . sourceforge.net . Проверено 18 ноября 2014 года .
  32. ^ Набор тестов реализации BIOS , официальный веб-сайт BITS
  33. ^ "grub4dos" . Сайт Google . Проверено 7 апреля 2019 года .
  34. ^ "Введение в GRUB для DOS" . grub4dos.sourceforge.net . 2007. Архивировано из оригинала 2 июня 2008 года . Проверено 7 апреля 2019 года .
  35. ^ "StartUp-Manager мертв: StartUp-Manager" . launchpad.net . Проверено 9 апреля 2017 года .
  36. ^ Редактор загрузчика GRUB2 . Kde-apps.org (18.06.2012). Проверено 1 декабря 2012.
  37. ^ "Grub2 KCM" . KDE-Apps.org . Проверено 27 января 2011 года .
  38. ^ "Учебник по Grub4dos" . Народ.ру .