Внутреннее устройство Linux - Уорд Брайан. Страница 36
Чтобы установить загрузчик GRUB на устройстве хранения вне текущей системы, необходимо вручную указать каталог загрузчика на таком устройстве, каким его видит ваша система. Допустим, у вас есть целевое устройство /dev/sdc, а корневая/загрузочная файловая система этого устройства (например, /dev/sdc1) смонтирована в каталоге /mnt вашей нынешней системы. Это подразумевает, что при установке загрузчика GRUB ваша система будет видеть файлы загрузчика в каталоге /mnt/boot/grub. При запуске команды grub-install сообщите ей, где расположены эти файлы, таким образом:
# grub-install —boot-directory=/mnt/boot /dev/sdc
Установка загрузчика GRUB в интерфейсе UEFI
Предполагается, что установка в интерфейсе UEFI происходит проще, поскольку вам потребуется лишь скопировать загрузчик системы на место. Помимо этого, необходимо также «известить» прошивку о загрузчике системы с помощью команды efibootmgr. Если команда grub-install доступна, она выполнит это, поэтому теоретически для установки загрузчика в раздел с интерфейсом UEFI вам необходимо запустить такую команду:
# grub-install —efi-directory=efi_dir –-bootloader-id=name
Здесь параметр efi_dir задает расположение каталога UEFI, как он виден вашей системе (обычно это /boot/efi/efi, поскольку раздел UEFI часто монтируется в точке /boot/efi), а параметр name является идентификатором загрузчика системы, как рассказано в разделе 5.8.2. Загрузка в интерфейсе UEFI.
К сожалению, при установке загрузчика в интерфейсе UEFI может возникнуть множество проблем. Например, если вы устанавливаете его на диск, который в итоге окажется в другой системе, вы должны выяснить, как объявить данный загрузчик прошивке новой системы. Есть также отличия в процедуре установки для сменных накопителей.
Одной из самых больших проблем является безопасная загрузка интерфейса UEFI.
5.6. Проблемы с безопасной загрузкой UEFI
Одной из новейших проблем, влияющих на установку систем Linux, является функция безопасной загрузки, которая присутствует на современных компьютерах. Если она активна, то в интерфейсе UEFI данный механизм требует, чтобы загрузчики системы для возможности своего запуска были снабжены надежной цифровой подписью. Компания Microsoft требует, чтобы поставщики системы Windows 8 использовали безопасную загрузку. В результате, если вы попытаетесь установить неподписанный загрузчик системы (а в большинстве современных версий Linux это именно так), он не станет работать.
Простейший обходной путь для тех, кого не интересует Windows, состоит в отключении безопасной загрузки в настройках интерфейса EFI. Однако это не будет четко работать в системах с двухвариантной загрузкой, а также вряд ли устроит всех пользователей. По этой причине в дистрибутивах Linux предлагаются подписанные загрузчики системы. Одни представляют собой всего лишь внешний интерфейс к загрузчику GRUB, другие же предлагают полностью подписанную загрузочную последовательность (от загрузчика системы до ядра); есть также абсолютно новые загрузчики (некоторые основаны на интерфейсе efilinux).
5.7. Передача управления загрузчикам других операционных систем
Интерфейс UEFI позволяет сравнительно легко осуществить поддержку загрузки других операционных систем, поскольку в разделе EFI можно установить несколько загрузчиков системы. Тем не менее «старый стиль» MBR не поддерживает это, и даже при наличии интерфейса UEFI вам может потребоваться отдельный раздел с загрузчиком системы, который использует MBR. Можно сделать так, чтобы загрузчик GRUB загрузил и запустил другой загрузчик системы в определенном разделе диска с помощью передачи управления загрузчику.
Для передачи управления создайте новый пункт меню в конфигурации загрузчика GRUB (используя один из методов пункта «Обзор файла Grub.cfg» в подразделе 5.5.2). Вот пример для установленной в третьем разделе диска Windows:
menuentry "Windows" {
insmod chain
insmod ntfs
set root=(hd0,3)
chainloader +1
}
Параметр +1 в строке chainloader сообщает загрузчику, чтобы он загрузил то, что находится в первом секторе раздела. Можно также напрямую указать загрузку файла, использовав строку, подобную приведенной ниже для загрузчика io.sys системы MS-DOS:
menuentry "DOS" {
insmod chain
insmod fat
set root=(hd0,3)
chainloader /io.sys
}
5.8. Детали загрузчика системы
Теперь мы рассмотрим некоторые внутренние части загрузчика системы. Можете спокойно переходить к следующей главе, если данный материал вам неинтересен.
Чтобы понять, как работают загрузчики системы, подобные GRUB, сначала исследуем, как загружается персональный компьютер, когда вы его включаете. Вследствие неадекватности традиционных механизмов загрузки ПК есть несколько вариантов, однако основных схем две: MBR и UEFI.
5.8.1. Загрузка с применением таблицы MBR
В дополнение к информации о разделе, которая описана в разделе 4.1, таблица MBR (Master Boot Record, главная загрузочная запись) содержит небольшую область (441 байт), которую система BIOS выполняет по завершении проверки POST (Power-On Self-Test, самотестирование при включении питания). К сожалению, эта область слишком мала, чтобы разместить загрузчик системы, поэтому необходимо дополнительное пространство. В результате возникает то, что иногда называют многоэтапным загрузчиком системы. В этом случае начальный фрагмент кода в таблице MBR не делает ничего, кроме загрузки оставшейся части кода загрузчика системы. Эти фрагменты загрузчика обычно помещаются в область между таблицей MBR и первым разделом диска.
Это не слишком безопасно, поскольку данный код может перезаписать кто угодно. Однако большинство загрузчиков, включая версии GRUB, поступают именно так. Более того, эта схема не будет работать для диска с разделами GPT при использовании системы BIOS для загрузки, поскольку информация таблицы GPT размещена в области после таблицы MBR. Таблица GPT не затрагивает традиционную таблицу MBR в целях обратной совместимости.
Обходной путь для таблицы GPT состоит в создании небольшого загрузочного раздела BIOS со специальным идентификатором UUID, чтобы предоставить место для размещения полного кода загрузчика системы. Однако таблица GPT обычно используется с интерфейсом UEFI, а не с традиционной системой BIOS, это приводит нас к схеме загрузки с применением интерфейса UEFI.
5.8.2. Загрузка с применением интерфейса UEFI
Производители компьютеров и компании, занимающиеся разработкой ПО, осознали, что традиционная система BIOS является весьма ограниченной, поэтому они решили разработать замену под названием расширенный интерфейс прошивки (EFI, Extensible Firmware Interface). Этому интерфейсу потребовалось некоторое время, чтобы прижиться в ПК, а теперь он достаточно распространен. Текущим стандартом является унифицированный интерфейс UEFI (Unified EFI), содержащий такие функции, как встроенная оболочка, а также возможность чтения таблиц разделов и навигация по файловым системам. Схема GPT является частью стандарта UEFI.
Загрузка систем с интерфейсом UEFI происходит совершенно иначе, и понять ее гораздо проще. Вместо исполняемого кода загрузки, который расположен вне файловой системы, здесь всегда присутствует специальная файловая система под названием «системный раздел EFI» (ESP, EFI System Partition), содержащий каталог efi. Каждый загрузчик системы обладает идентификатором и соответствующим подкаталогом, например efi/microsoft, efi/apple или efi/grub. Файл загрузчика системы снабжен расширением .efi и располагается в одном из таких подкаталогов вместе с дополнительными файлами поддержки.