Дуалбут 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. Об этом и пойдёт речь в посте.

[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\ .

Работа с 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 комментария


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *