stringtranslate.com

GNU GRUB

GNU GRUB (сокращение от GNU GRand Unified Bootloader , обычно называемый GRUB ) — пакет загрузчика из проекта GNU . GRUB — это эталонная реализация спецификации Multiboot от Free Software Foundation , которая предоставляет пользователю возможность выбора между загрузкой одной из нескольких операционных систем, установленных на компьютере, или выбором определенной конфигурации ядра , доступной на разделах конкретной операционной системы.

GNU GRUB был разработан на основе пакета Grand Unified Bootloader (игра слов Grand Unified Theory [6] ). Он в основном используется для Unix-подобных систем.

Операция

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

Загрузка

Когда компьютер включается, его BIOS находит первичное загрузочное устройство (обычно жесткий диск компьютера) и запускает начальную программу начальной загрузки из главной загрузочной записи (MBR). MBR — это первый сектор жесткого диска. Эта программа начальной загрузки должна быть небольшой, поскольку она должна умещаться в одном секторе. Долгое время размер сектора составлял 512 байт. С 2009 года доступны жесткие диски с размером сектора 4096 байт, называемые дисками Advanced Format , но по состоянию на октябрь 2013 года такие жесткие диски по-прежнему доступны в секторах по 512 байт, используя эмуляцию 512e . [7] Устаревшая таблица разделов MBR поддерживает максимум четыре раздела и занимает 64 байта в совокупности. Вместе с дополнительной сигнатурой диска (четыре байта) и временной меткой диска (шесть байт) это оставляет от 434 до 446 байт, доступных для машинного кода загрузчика. Хотя такого небольшого пространства может быть достаточно для очень простых загрузчиков, [8] оно недостаточно велико для загрузчика, поддерживающего сложные и множественные файловые системы , выбор вариантов загрузки с помощью меню и т. д. Загрузчики с большим объемом памяти поэтому разбиваются на части, где наименьшая часть помещается в MBR, в то время как одна или несколько более крупных частей хранятся в других местах, таких как пустые сектора между MBR и первым разделом. Код в MBR затем делает немного больше, чем запускает вторую часть.

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

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

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

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

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

Версия 0 (GRUB Legacy)

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

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

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

Версия 2 (GRUB2)

GRUB 2 – визуализация разбиения на разделы MBR и GPT, а также последовательности загрузки (системы, использующие прошивку BIOS).

Запуск в системах с использованиемБИОСпрошивка

Запуск в системах с использованиемУЕФИпрошивка

После запуска

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

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

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

Идентификация разделов (обходной путь UUID)

К компьютеру может быть подключено несколько жестких дисков. Они могут быть идентифицированы через их порт SATA. Каждый раз, когда компьютер проходит процедуру POST , жесткому диску, подключенному к определенному порту материнской платы, может быть назначен один и тот же идентификатор, например hd0, hd1, …. Но что, если такая согласованность не может быть гарантирована? Что, если созвездие подключенных жестких дисков изменится от одного запуска к другому? Что, если жесткий диск будет подключен к другому компьютеру?

Введя lsлибо консоль восстановления GRUB (доступна после загрузки core.img), либо консоль GRUB (доступна после загрузки normal.mod), можно получить список всех доступных жестких дисков и разделов. Например, ls (hd0,5)/) покажет номера, которые могут быть назначены фактическим жестким дискам и разделам.

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

Файловые системы ext2, ext3, ext4 и xfs используют UUID для уникальной идентификации экземпляра. UUID создается при форматировании раздела. UUID является частью файловой системы и записывается в суперблок . Все операции, кроме форматирования, должны оставлять UUID неизменным. Можно изменить UUID или дублировать его, используя dd для клонирования всего раздела.

Файл grub.cfgиспользуется для настройки GRUB. Он содержит команды, которые должны быть выполнены при каждом запуске. Без существующего и действительного grub.cfgGRUB выдаст приглашение.

Абсолютный минимум grub.cfgможет содержать только следующие две команды (ср. начальный электронный диск ):

linux (hd0,1)/kernel/vmlinuz-3.20.1-4 ro # использовать имя файла "vmlinuz-…", расположенного в каталоге /kernel на первом разделе первого жесткого диска, как образ ядра Linuxinitrd (hd0,1)/boot/initrd.img-3.20.1-4 # использовать файл с именем "initrd.img–…", расположенный в каталоге /boot на первом разделе первого жесткого диска, как начальный ramdisk

Любитель grub.cfgопишет меню, которое будет представлено, использует несколько цветов и может указать фоновое изображение.

История

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

Разработка

GRUB версии 0 (также известный как «GRUB Legacy») больше не находится в разработке и постепенно прекращает свое существование. [15] Разработчики GNU GRUB переключили свое внимание на GRUB 2, [16] полностью переписанный с целями сделать 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 года. [17] [18]

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

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

Варианты

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

Коммунальные услуги

Инструменты конфигурации GRUB

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

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

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

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

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

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.12 в раздел NTFS. Затем приложение Windows GUI используется для настройки меню загрузки GRUB, тем, порядка загрузки UEFI, скриптов и т. д. Все скрипты и команды GNU GRUB поддерживаются как для UEFI, так и для устаревших систем. Grub2Win может настраивать GRUB для мультизагрузки Windows, Ubuntu, openSuse, Fedora и многих других дистрибутивов Linux. Он свободно доступен по лицензии GNU GPL на SourceForge.

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

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

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

Неграфические альтернативы:

Внешние ссылки

Инструкции и устранение неполадок

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

Документация

Вводные статьи

Технические детали

Смотрите также

Примечания

  1. ^ GPL-3.0 или более поздняя версия с 21 июля 2007 г. [4]
  2. ^ GPL-2.0 или более поздняя с 1999 по 2 июля 2007 г.

Ссылки

  1. ^ Дэниел Кипер (20 декабря 2023 г.). "GRUB 2.12 выпущен" . Получено 20 декабря 2023 г.
  2. ^ "GRUB 2.12 релиз-кандидат 1". 10 июля 2023 г.
  3. ^ "Ohloh Analysis Summary – GNU GRUB". Ohloh . Архивировано из оригинала 4 февраля 2009 г. Получено 12 мая 2010 г.
  4. ^ «Перейти на GNU General Public License версии 3». 21 июля 2007 г. Архивировано из оригинала 27 октября 2021 г. Получено 27 октября 2021 г.
  5. ^ "Лицензия GNU GRUB". Архивировано из оригинала 11 сентября 2013 г.
  6. ^ Определения EnterpriseLinux.com Архивировано 3 декабря 2010 г. на Wayback Machine Определение GRand Unified Bootloader
  7. ^ Смит, Райан (18 декабря 2009 г.). «Продвинутый формат Western Digital: переход сектора 4K начинается». AnandTech . Архивировано из оригинала 12 марта 2012 г. Получено 10 октября 2013 г.
  8. ^ "mbldr (Master Boot LoaDeR)". mbldr.sourceforge.net . 2009. Архивировано из оригинала 16 марта 2013 г. Получено 10 октября 2013 г.
  9. ^ ab "Booting and Boot Managers". SUSE. Архивировано из оригинала 17 сентября 2013 г. Получено 10 октября 2013 г.
  10. ^ "GNU GRUB Manual 2.04". www.gnu.org . Архивировано из оригинала 3 апреля 2018 г. Получено 10 ноября 2020 г. .
  11. ^ Хоффман, Крис (22 сентября 2014 г.). «Как настроить параметры загрузчика GRUB2». HowToGeek.com . Архивировано из оригинала 28 апреля 2015 г. . Получено 25 апреля 2015 г. .
  12. ^ "GNU GRUB documentation". Архивировано из оригинала 18 апреля 2014 г. Получено 16 апреля 2014 г.
  13. ^ ab Руководство GRUB – 1.2 История Grub Архивировано 16 апреля 2014 г. на Wayback Machine . Gnu.org (2012-06-23). ​​Получено 2012-12-01.
  14. ^ "PS4 работает под управлением Orbis OS, модифицированной версии FreeBSD, похожей на Linux". extremetech.com . 24 июня 2013 г. Архивировано из оригинала 18 ноября 2020 г. Получено 23 октября 2013 г.
  15. ^ GNU GRUB – GRUB Legacy Архивировано 20 апреля 2014 г. на Wayback Machine . Gnu.org. Получено 01.12.2012.
  16. ^ "GNU GRUB – GRUB 2". Архивировано из оригинала 7 июня 2008 г. Получено 18 апреля 2014 г.{{cite web}}: CS1 maint: бот: исходный статус URL неизвестен ( ссылка ).
  17. Сербиненко, Владимир (28 июня 2012 г.). "GRUB 2.00 выпущен". grub-devel (список рассылки). Архивировано из оригинала 13 января 2013 г. Получено 1 декабря 2012 г.
  18. ^ Ларабель, Майкл. "GRUB 2.00 Boot-Loader Officially Released". Phoronix.com . Архивировано из оригинала 13 сентября 2016 г. Получено 28 июня 2012 г.
  19. Haddon, Tom (26 января 2012 г.). «Введение в Ubuntu». WebJunction. Архивировано из оригинала 28 октября 2012 г. Получено 21 сентября 2012 г.
  20. ^ Янссен, Кори. «Что такое Red Hat Enterprise Linux (RHEL)?». Technopedia. Архивировано из оригинала 3 октября 2012 г. Получено 21 сентября 2012 г.
  21. ^ Варгезе, Сэм (20 сентября 2012 г.). «Глава SUSE перечисляет прогресс с момента приватизации». Архивировано из оригинала 22 сентября 2012 г. Получено 21 сентября 2012 г.
  22. ^ "9.10 Karmic GRUB version". Distrowatch.com. Архивировано из оригинала 9 мая 2012 г. Получено 8 июля 2012 г.
  23. ^ GRUB 2 Архивировано 5 августа 2012 г. на Wayback Machine . FedoraProject. Получено 01.12.2012.
  24. ^ openSUSE:Предстоящие функции – openSUSE Архивировано 20 сентября 2012 г. на Wayback Machine . En.opensuse.org. Получено 01.12.2012.
  25. Solaris 11.1 Архивировано 19 июня 2018 г. на Wayback Machine . Oracle Получено 19 марта 2015 г.
  26. ^ Khandelwal, Swati (16 декабря 2015 г.). «Вы можете взломать компьютер Linux, просто нажав клавишу «Backspace» 28 раз». thehackernews.com . Архивировано из оригинала 30 апреля 2017 г. . Получено 13 марта 2017 г. .
  27. ^ Марко и Гектор; Риполл, Исмаэль (декабрь 2015 г.). «Назад к 28: Аутентификация Grub2 0-Day». Архивировано из оригинала 17 мая 2017 г. Получено 13 марта 2017 г.
  28. ^ x86: Изменение поведения загрузки путем редактирования меню GRUB во время загрузки Архивировано 19 июля 2011 г. на Wayback Machine , Изменение поведения загрузки Solaris в системах на базе x86 (карта задач) – Руководство по системному администрированию: Базовое администрирование
  29. ^ x86: Поддерживаемые реализации GRUB Архивировано 21 октября 2009 г. на Wayback Machine , (Руководство по системному администрированию: основы администрирования) – Sun Microsystems
  30. ^ Пэн, Тао. "Grub4ext4". Архивировано из оригинала 31 декабря 2016 г. Получено 13 июня 2017 г.
  31. ^ 2.3 Почему у Syllable есть своя собственная версия GRUB? Архивировано 7 января 2011 г., на Wayback Machine , Syllable Documentation
  32. ^ "Проект TrustedGRUB". sourceforge.net . 5 июня 2013 г. Архивировано из оригинала 29 ноября 2014 г. Получено 18 ноября 2014 г.
  33. Набор тестов реализации BIOS. Архивировано 19 октября 2016 г. на Wayback Machine , официальном сайте BITS.
  34. ^ "grub4dos". Google Site . Архивировано из оригинала 7 апреля 2019 г. Получено 7 апреля 2019 г.
  35. ^ "GRUB for DOS Introduction". grub4dos.sourceforge.net . 2007. Архивировано из оригинала 7 апреля 2019 г. Получено 7 апреля 2019 г.
  36. ^ grub4dos на GitHub
  37. ^ "StartUp-Manager мертв : StartUp-Manager". launchpad.net . 6 мая 2011 г. Архивировано из оригинала 1 августа 2020 г. Получено 9 апреля 2017 г.
  38. ^ Редактор загрузчика GRUB2 Архивировано 7 сентября 2015 г. на Wayback Machine . Kde-apps.org (18.06.2012). Получено 01.12.2012.
  39. ^ "Grub2 KCM". KDE-Apps.org . Архивировано из оригинала 6 сентября 2015 г. Получено 27 января 2011 г.
  40. ^ "Grub4dos tutorial". Narod.ru . Архивировано из оригинала 3 мая 2015 . Получено 25 апреля 2015 .