Дуалбут Gentoo Linux и Microsoft Windows на машине с UEFI с помощью rEFInd

refindВ Gentoo Handbook в главе про настройку загрузчика нам предлагается несколько вариантов:

  • GRUB2
    Привычный всем GRUB первой версии со временем заменили на вторую. Новая версия была создана на базе проекта PUPA. Может работать как в обычном режиме BIOS, так и в режиме EFI.
  • LILO
    Устаревший загрузчик, который уже почти нигде не используется. Не поддерживает EFI.
  • Ядро как загрузчик
    Ядро Linux позволяет собрать его с поддержкой EFI Stub, давая возможность загружаться сразу в него, минуя сторонние загрузчики. Естественно, этот вариант не подразумевает загрузки в Microsoft Windows (если, конечно, это не будет делаться через меню загрузки BIOS/EFI, что требует дополнительных действий от пользователя, чтобы выбрать другую ОС).

Однако, это не все доступные варианты. В качестве альтернативы можно также использовать нативные загрузчики EFI — например, rEFInd. Об этом и пойдёт речь в посте.

Предисловие *

Во-первых, по традиции хочу напомнить, что в этом посте некоторые действия (например, монтирование раздела в 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\ .

Работа с diskpart
Работа с diskpart

В большинстве случаев, 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 и указать путь к загрузчику.

Создание записи о загрузчике rEFInd
Создание записи о загрузчике rEFInd

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) и если это не так — исправить. Если вы всё сделали правильно — загрузчик запустится и предложит вам выбрать ОС для загрузки.

Ссылки *

3 Comments

 Add your comment
  1. А как же копировать в Линукс refind, если я могу только в Виндовс?

Leave a Comment

Your email address will not be published.