3. Подсистема загрузки grub
GRUB (GRand Unified Bootloader) — программа-загрузчик операционных систем.
GRUB является эталонной реализацией загрузчика, соответствующего спецификации Multiboot и может загрузить любую совместимую с ней операционную систему. Среди них: Linux, FreeBSD, Solaris и многие другие. Кроме того, GRUB умеет по цепочке передавать управление другому загрузчику, что позволяет ему загружать Windows (через загрузчик NTLDR), MS-DOS, OS/2 и другие системы.
После настройки GRUB пользователь при включении компьютера видит список операционных систем, которые установлены на его компьютер и которые можно загрузить, выбрав подходящую и нажав Enter.
GRUB позволяет пользователю при загрузке задавать произвольные параметры и передавать их в ядро Multiboot-совместимой ОС для дальнейшей обработки.
GRUB — самый популярный загрузчик в мире Linux и является загрузчиком по умолчанию в большинстве известных дистрибутивов.
Ниже по тексту под названием программы GRUB подразумевается GRUB 2 до него использовался GRUB первой версии, сейчас известный как GRUB Legacy. GRUB 2 полностью переписан с нуля и не имеет ничего общего с GRUB Legacy, разработка которого была остановлена в пользу более совершенного и мощного GRUB.
Подсистема загрузки GRUB устроена более сложно. Она также имеет первичный загрузчик, который записывается в первый сектор диска или раздела, и вторичный загрузчик, располагаемый в файловой системе. Однако карта размещения в GRUB обычно используется только для т. н. «полуторного» загрузчика («stage 1.5») — по сути дела, драйвера одной определённой файловой системы. Процедура загрузки при этом выглядит так. Первичный загрузчик загружает полуторный по записанной в него карте размещения. Эта карта может быть очень простой, так как обычно полуторный загрузчик размещается непосредственно после первичного подряд в нескольких секторах, или в ином специально отведённом месте вне файловой системы. Полуторный загрузчик умеет распознавать одну файловую систему и находить там вторичный уже по имени (обычно /boot/grub/stage2). Наконец, вторичный загрузчик, пользуясь возможностями полуторного, читает из файла /boot/grub/menu.lst меню, в котором пользователь может выбирать варианты загрузки так же, как и в LILO. Таким образом, обновление и перенастройка установленного GRUB не требует пересчёта карт размещения и изменения чего-то, кроме файлов в каталоге /boot/grub.
Разница между lilo.conf только в синтаксисе, да ещё в том, что жёсткие диски и разделы на них GRUB именует по-своему, в виде (hdномер_диска,номер_раздела), причём нумеровать начинает с нуля. Метки («title») тоже нумеруются с нуля, так что запись default 0 означает, что по истечении тайм-аута будет загружена самая первая конфигурация (по имени «linux-up»).
Изучая руководство по GRUB, было обнаружено гораздо более важное отличие от LILO. Оказывается, в GRUB не только параметры, но и сами файлы (ядро, стартовый виртуальный диск и т. п.) распознаются и загружаются в процессе работы. Вместо пунктов меню можно выбрать режим командной строки, подозрительно похожий на bash, в котором заставить GRUB загрузить какое-нибудь другое, не предписанное конфигурацией, ядро, посмотреть содержимое каталогов файловой системы, распознаваемой полуторным загрузчиком, и даже содержимое этих файлов, невзирая ни на какие права доступа: система-то ещё не загружена. Мало того, можно по-своему перенастроить загрузчик и записать результаты настройки. Так и не успев сполна насладиться неожиданной свободой, было обнаружено, что выход в командную строку защищён паролем.
4. GRUB 2 и GRUB Legacy
GRUB Legacy — это оригинальная версия GRUB, разработанная в 1995 году. Позже она стала загрузчиком по умолчанию для многих дистрибутивов Linux, заменив более ранние альтернативы, такие как LILO.
GRUB 2 — это полная перепись GRUB, которая стремится быть более чистой, безопасной, надёжной и мощной. Среди преимуществ перед GRUB Legacy — более гибкий файл конфигурации (с большим количеством команд и условных выражений), более модульный дизайн и лучшая локализация/интернационализация.
Сравнение GRUB 2 и GRUB Legacy:
1. Конфигурационные файлы
— GRUB Legacy: использует один конфигурационный файл — «/boot/grub/menu.lst» или «/boot/grub/grub.conf». Этот файл нужно редактировать вручную.
— GRUB 2: использует более сложную систему конфигурации. Основной файл — «/boot/grub/grub.cfg», его не рекомендуется редактировать вручную. Вместо этого используется файл «/etc/default/grub» и скрипты в директории «/etc/grub.d/». Конфигурационный файл генерируется автоматически помощью команды «update-grub».
2. Поддержка файловых систем
— GRUB Legacy: поддерживает ограниченное количество файловых систем, таких как ext2, ext3 и ReiserFS.
— GRUB 2: поддерживает гораздо больше файловых систем, включая ext4, Btrfs, XFS, ZFS и другие. 3. Поддержка устройств и архитектур
— GRUB Legacy: ограниченная поддержка современных устройств и архитектур.
— GRUB 2: поддерживает больше количество архитектур (например, x86, x86_64, ARM) и устройств, включая современные UEFI-системы.
4. Модули и расширяемость
— GRUB Legacy: модульная система отсутствует. Все функции встроены в основной код.
— GRUB 2: использует модульную архитектуру. Это позволяет загружать только необходимые модули, что делает систему более гибкой и расширяемой Модули можно загружать динамически во время загрузки.
5. Графический интерфейс
— GRUB Legacy: поддержка графики ограничена. В основном использовался текстовый режим.
— GRUB 2: поддерживает графический интерфейс с изображениями фона и шрифтами. Это позволяет создавать более наглядные и удобные меню.
6. Автоматическое обнаружение операционных систем
— GRUB Legacy: автоматическое обнаружение операционных систем отсутствует. Все операционные системы нужно было добавлять вручную в конфигурационный файл.
— GRUB 2: имеет встроенные скрипты для автоматического обнаружения установленных операционных систем (например, Windows, другие дистрибутивы Linux). Есть управление мультизагрузкой.
7. Редактирование во время загрузки
— GRUB Legacy: позволяет редактировать параметры загрузки во время загрузки, но интерфейс менее удобен.
— GRUB 2: также позволяет редактировать параметры загрузки, но интерфейс более интуитивно понятен и удобен для пользователя.
8. Поддержка UEFI
— GRUB Legacy: не поддерживает UEFI (Unified Extensible Firmware Interface).
— GRUB 2: полностью поддерживает UEFI, что делает его подходящим для современных систем.
9. Скрипты и кастомизация
— GRUB Legacy: ограниченные возможности для кастомизации и использования скриптов.
— GRUB 2: использует скрипты настройки загрузки, что делает его более гибким Например, можно добавив свои скрипты в «/etc/grub.d/» для изменения поведения загрузчика.
10. Безопасность
— GRUB Legacy: имеет базовые механизмы защиты, такие как пароли для доступа к меню загрузки.
— GRUB 2: обладает улучшенными механизмами безопасности, включая поддержку шифрования паролей более гибкие настройки доступа.
11. Поддержка LVM и RAID
— GRUB Legacy: ограничена поддержка LVM (Logical Volume Manager) и RAID.
— GRUB 2: поддерживает LVM и RAID "из коробки", что делает его более подходящим для сложных конфигураций дисков.
12. Сообщество и поддержка
— GRUB Legacy: Официальная поддержка прекращена, и сообщество в основном перешло на GRUB2.
— GRUB 2: активно поддерживается и развивается сообществом.
