В Gentoo Handbook в главе про настройку загрузчика нам предлагается несколько вариантов:
- GRUB2
Привычный всем GRUB первой версии со временем заменили на вторую. Новая версия была создана на базе проекта PUPA. Может работать как в обычном режиме BIOS, так и в режиме EFI. - LILO
Устаревший загрузчик, который уже почти нигде не используется. Не поддерживает EFI. - Ядро как загрузчик
Ядро Linux позволяет собрать его с поддержкой EFI Stub, давая возможность загружаться сразу в него, минуя сторонние загрузчики. Естественно, этот вариант не подразумевает загрузки в Microsoft Windows (если, конечно, это не будет делаться через меню загрузки BIOS/EFI, что требует дополнительных действий от пользователя, чтобы выбрать другую ОС).
Однако, это не все доступные варианты. В качестве альтернативы можно также использовать нативные загрузчики EFI — например, rEFInd. Об этом и пойдёт речь в посте.
[mwm-aal-display]
Предисловие
Во-первых, по традиции хочу напомнить, что в этом посте некоторые действия (например, монтирование раздела в Linux) требуют прав root. Однако, в приведённых примерах я не буду указывать команду sudo.
Также, стоит отметить, что в данном примере есть некоторые допущения: Secure Boot выключен; /boot находится на отдельном разделе; жёсткий диск имеет таблицу разделов GPT, Microsoft Windows была установлена до Gentoo Linux и раздел EFI уже существует, с ядром не используется initrd, и некоторые другие маловажные моменты. Всё абсолютно неважно если понять принцип работы, который довольно прост.
Кроме того, важно понимать, что данные принципы будут работать для любого дистрибутива с небольшими изменениями.
Установка
Первой половиной действий необходимых для организации загрузки в режиме EFI будет установка загрузчика. Его дистрибутив можно взять на сайте проекта. Там нам будет необходимо взять последнюю версию по ссылке «A binary zip file».
Копирование
Linux
Для начала распакуем архив с загрузчиком.
$ unzip refind-bin-0.9.0.zip
В архиве мы увидим скрипты для установки, инструкции, лицензию и прочее. Так как мы будем устанавливать загрузчик вручную, нас интересует только папка refind. В ней мы найдём сам загрузчик (refind_ia32.efi refind_x64.efi), директории драйверов (drivers_ia32 drivers_x64), пример конфига (refind.conf-sample) и директории утилит (tools_ia32 tools_x64).
$ cd refind-bin-0.9.0 $ ls refind drivers_ia32 drivers_x64 icons refind.conf-sample refind_ia32.efi refind_x64.efi tools_ia32 tools_x64
Так как у нас архитектура amd64, часто так же называемая x64, можно сразу удалить лишнее.
$ rm -rf refind/{drivers_ia32,refind_ia32.efi,tools_ia32}
При желании, вы можете также удалить лишние иконки операционных систем в директории refind/icons.
Теперь нам нужно смонтировать раздел EFI. Большая часть дальнейших действий требует прав root, поэтому можно заранее сделать sudo -i.
EFI раздел определить довольно просто: чаще всего он имеет размер 100 мегабайт и тип/код раздела равен EF00.
# mount /boot # mkdir /boot/efi # gdisk -l /dev/sda Number Start (sector) End (sector) Size Code Name 1 2048 598015 291.0 MiB 2700 Basic data partition 2 598016 614399 8.0 MiB EF02 ----------------------------------------------------------------------------- 3 614400 817151 99.0 MiB EF00 EFI system partition ----------------------------------------------------------------------------- 4 817152 1079295 128.0 MiB 0C01 Microsoft reserved ... 5 1079296 327837695 155.8 GiB 0700 6 327837696 328759295 450.0 MiB 2700 7 328759296 330330111 767.0 MiB 0700 Basic data partition 8 330330112 937699327 289.6 GiB 0700 Basic data partition # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 447.1G 0 disk ├─sda1 8:1 0 291M 0 part ├─sda2 8:2 0 8M 0 part ------------------------------------------------------------------ ├─sda3 8:3 0 99M 0 part ------------------------------------------------------------------ ├─sda4 8:4 0 128M 0 part ├─sda5 8:5 0 155.8G 0 part /media/windows ├─sda6 8:6 0 450M 0 part ├─sda7 8:7 0 767M 0 part /boot └─sda8 8:8 0 289.6G 0 part / # mount /dev/sda3 /boot/efi # ls /boot/efi EFI Temp
Скопируем загрузчик на наш раздел EFI.
# cp -r /home/skobkin/tmp/refind-bin-0.9.0/refind /boot/efi/EFI/
Windows
Для начала, заранее распакуйте куда-нибудь архив с rEFInd. Например, пусть это будет C:\tmp\refind-bin-0.9.0\ .
В большинстве случаев, Windows будет препятствовать монтированию раздела EFI, поэтому наиболее простым вариантом будет использование современного аналога «безопасного режима с командной строкой». Попасть в него можно выбрав в меню завершения работы перезагрузку зажимая в этот момент клавишу Shift, затем выбрав «Troubleshooting» («Диагностика») → «Advanced options» («Дополнительные параметры») → «Command prompt» («Командная строка»). Перед нами откроется командная строка, в которой нам будет необходимо произвести аналогичные компированию в Linux действия с поправкой на операционную систему.
Сначала смонтируем раздел с помощью утилиты diskpart. У неё довольно интуитивно понятный текстовый интерфейс с командной строкой, где нам важно знать, что есть общие команды list (вывод списка) и select (выбор элемента) для таких сущностей как disk (физический диск) и partition (раздел). Пример монтирования диска:
diskpart
Далее, в командной строке утилиты:
list disk select disk 0 list partition select partition 2 assign letter=u
Мы выбрали второй раздел на первом диске и назначили для него букву U. Теперь, если учесть, что заранее распакованный rEFInd лежит по вышеуказанному адресу, мы копируем его следующей командой:
cp C:\tmp\refind-bin-0.9.0\refind U:\EFI\
Настройка (Windows и Linux)
Теперь скопируем конфиг.
# cd /boot/efi/EFI/refind # cp refind.conf-sample refind.conf
И отредактируем его. Как вы можете заметить, конфиг очень неплохо документирован, поэтому я предлагаю ознакомиться с настройками вместо того чтобы просто копировать указанный пример.
# refind.conf timeout 3 resolution 1024 768 showtools shell,memtest,gdisk,windows_recovery,about,reboot,shutdown,firmware scanfor manual default_selection "Gentoo Linux" menuentry "Gentoo Linux" { icon /EFI/refind/icons/os_gentoo.png ostype Linux volume boot loader /vmlinuz-4.1.6-gentoo-skobkin options "root=/dev/sda8 ro" } menuentry "Windows 10 Pro" { loader \EFI\Microsoft\Boot\bootmgfw.efi }
Описание настроек можно найти здесь. Для самой простой конфигурации нам важны лишь несколько из них:
- volume boot
Указывает на раздел, где находится ядро. Для того, чтобы указание в таком виде работало, у раздела должна стоять метка. - loader /vmlinuz-4.1.6-gentoo-skobkin
Путь к файлу ядра относительно корня вышеуказанного раздела. Если опция volume не будет указана — от корня раздела EFI. - options «root=/dev/sda8 ro»
Путь к разделу, где находится корень файловой системы. В зависимости от того, встроен ли в ядре initrd, может появиться возможно указывать раздел по UUID и метке.
Активация
Теперь, для того, чтобы EFI мог запускать наш загрузчик, нам нужно добавить его в хранилище конфигураций загрузчиков. Это можно сделать несколькими способами.
Windows
bcdedit
Данный вариант не требует стороннего ПО и выполняется как и монтирование раздела EFI в Windows в командной строке «Troubleshooting»/»Диагностики» (см. копирование в Windows). Там мы выполняем две команды. Первая создаёт запись о загрузчике, а вторая задаёт его название.
bcdedit /set {bootmgr} path \EFI\refind\refind_x64.efi bcdedit /set {bootmgr} description "rEFInd boot manager"
Easy UEFI
В качестве очень простой альтернативы bcdedit можно использовать утилиту Easy UEFI, которая позволяет прямо в загруженной ОС Windows менять параметры загрузчиков. Вам будет необходимо создать запись для rEFInd, выбрать раздел EFI и указать путь к загрузчику.
Linux
Для того, чтобы прописать загрузчик в Linux, необходимо, чтобы система была уже загружена в режиме EFI. Этого можно добиться либо загрузив ядро напрямую (при наличии EFI Stub) из EFI Shell, либо запустив любой LiveCD работающий в режиме EFI. Воспользуемся утилитой efibootmgr (есть в репозиториях многих дистрибутивов):
efibootmgr -c -l \\EFI\\refind\\refind_x64.efi -L "rEFInd boot manager"
Первая загрузка
Теперь, когда вы закончили, остаётся проверить, находится ли «rEFInd boot manager» на первом месте в приоритетах загрузки в меню BIOS (EFI) и если это не так — исправить. Если вы всё сделали правильно — загрузчик запустится и предложит вам выбрать ОС для загрузки.