Uefi загрузка linux windows

Uefi загрузка linux windows

BIOS — Basic Input Output System, это базовая система Ввода-Вывода, то есть набор программ зашитых в микросхему, использовалась ОС MSDOS, более современные ОС практически не используют BIOS.

За исключением процедуры POST — Инициализация и проверка работоспособности аппаратуры.

Если POST выполнен без ошибок, код BIOS начнёт поиск кода загрузчика ОС. Поиск выполняется на доступных и разрешённых в настройках носителях, код BIOS загрузит код загрузчика ОС в память и передаст ему управление.

Недостатки BIOS

  • 16-битный код, реальный режим(real-mode)
  • Отсутствие прямого доступа к 64-битному железу
  • Отсутствие единого стандарта
  • Сложность разработки.

2. UEFI на смену BIOS

Дословно Extensible Firmware Interface (EFI) — «расширяемый интерфейс прошивки»

EFI — интерфейс между операционной системой и микропрограммами, управляющими низкоуровневыми функциями оборудования, основное предназначение — корректно инициализировать оборудование при включении системы и передать управление загрузчику операционной системы.

EFI предназначен для замены BIOS, первый стандарт был разработан Intel, затем переработан и название заменено на UEFI (Universal).

Интерфейс, определённый спецификацией EFI, включает таблицы данных, содержащие информацию о платформе, загрузочные и runtime-сервисы, которые доступны для загрузчика операционной системы (ОС) и самой ОС.

Некоторые существующие расширения BIOS, типа ACPI и SMBIOS, также присутствуют в EFI, поскольку не требуют 16-разрядного runtime-интерфейса.

В дополнение к разнообразным службам и сервисам, EFI имеет оболочку — shell environment, для запуска программ, драйверов, создания исполняемых скриптов, для запуска утилит диагностики и обновления прошивок, работы с CD/DVD. Скрипты имеют расширение .nsh .

Достижения UEFI

  • Отсутствие ограничений объема разделов и их количества
  • Увеличение скорости загрузки
  • Безопасность: возможность использования Secure Boot
  • Обратная совместимость с BIOS — CSM (Compatibility Support Mode)
  • Поддердка сетевой загрузки PXE
  • Менеджер загрузки

3. Загрузка в UEFI

Как происходит загрузка в UEFI:

Примечание: в дальнейшем рассматривается только схема разметки GPT GUID Partition Table.

EFI ищет партицию с идентификатором EF00, эта партиция называется ESP (EFI System Partition) и должна быть оформлена как FS:

  • FAT16
    или
  • FAT32

однако, такие устройства как floppy, usb могут иметь FAT12 на ESP.

На партиции ESP, EFI по умолчанию ищет файл загручик:
\efi\boot\boot[название архитектуры].efi
например: \efi\boot\bootx64.efi и загружает его.

Далее уже работает сам загрузчик, by default это \efi\boot\bootx64.efi , он ищет корневую FS, на ней bootmanager или ядро, загружает их и передает им дальнейшее управление.

На самом деле, EFI BIOS, находит все ESP партиции, на всех носителях компьютера и на них файлы с расширением efi и если мы захотим загрузиться с какого-то иного носителя, второго диска или флешки, используя клавишу POP-UP меню загрузки BIOS, ну например F8 (у разных производителей могут разные функциональные клавиши), увидим все доступные носители с ESP и загрузчиками.

В отличие от BIOS, для UEFI используются другие ПЗУ, они дешевле, экономичней и имеют NVRAM в которой хранятся указатели на все найденные загрузчки .efi .

Структура ESP партиции выглядит следующим образом:

Примечание: Имена директорий Ubuntu, Debian, FreeBSD — всего лишь пример, можете использовать какие Вам угодно.

4. Windows on UEFI/GPT

Ничего необычно в установке Windows 7/8/10 на GPT из UEFI нет, ОС Windows ставится на диск с разметкой GPT только из UEFI.

Особенности и условия, ничего особенного:

  • настройка в UEFI BIOS -> загрузка UEFY Only
  • отключить Secure Boot
  • как уже было отмечено ранее, использовать официальный носитель с ОС
  • или выбрать правильный дистрибутив, если используете самодельные
Читайте также:  C windows system32 drivers etc hosts как открыть с правами администратора

Ниже показана структура ESP из Windows 7

Программа установки Windows создает ESP на компьютере при следующих условиях:

  • ESP еще не создан.
  • На диске достаточно места для создания раздела емкостью 100 МБ.

Программа установки Windows создает MSR при следующих условиях:

  • MSR еще не создан.
  • На диске достаточно места для создания раздела емкостью 128 МБ.

Приоритет создания ESP выше, чем у создания MSR, так как ESP необходим для загрузки компьютера:
https://technet.microsoft.com/ru-ru/library/dd744301(v=ws.10).aspx

Примечание: В Windows 8.x/10 ESP 350MB, а в Windows 10 MSR=0-16MB

Важно: чтобы из командной строки Windows (cmd.exe), можно было смонтировать Системный Раздел ESP, нужно отключить UAC, затем, перезагрузиться, после чего команда: отработает без проблем.

Отключение UAC и Windows Defender с командной строки.

выходим в командную строку Windows:

Пуск -> Выполнить -> cmd.exe -> Запустить от Администратора

Отключаем Windows Defender:

Теперь, если у нас административный account, можно не заботиться о разрешениях «от Администратора».

Снова выходим в командную строку и выполняем следующие действия для монтирования Системного раздела ESP — EFI System Partition:

Ниже показано содержимое ESP записанное при установке Windows 7:

Примечание: В некоторых случаях, команда mountvol не может смонтировать ESP и выдает сообщение о неверном параметре, это возможно при наличии нескольких HDD в системе или по иной причине.

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

Выходим в командную строку и выполняем следующие действия для монтирования Системного раздела ESP — EFI System Partition:

чтобы понять что на каком диске находится:

  • выбираем диск командой sel
  • смотрим содержимое партиций

смотрим содержимое диска 1 (он пуст)

Из верхнего видно, нам нужен Системный раздел: Раздел 1 Системный 100 Mб 1024 Kб

  • выбираем диск 0
  • партицию 1
  • назначаем букву для монтирования

Все, можем работать с Системным разделом EFI, он смонтирован как диск S:

Загрузчик Windows и BootManager.

Как было сказано ранее, в UEFI NVRAM содержатся настройки, переменные EFI, прописанные и обнаруженные загрузчики с расширением .efi, порядок загрузки и тд и тп.

Для настройки BootLoader и BootManager, Microsoft использует целую ветку в реестре, а работа с ней и управление, осуществляется командой bcdedit.

Посмотреть текущие настройки можно следующим образом:

вариант с лицензионной системы:

строка:
path \EFI\Microsoft\Boot\bootmgfw.efi
говорит об использовании оригинального EFI загрузчика от Microsoft.

Ниже показано что default’ный:

  • \EFI\Boot\bootx64.efi
    и
  • \EFI\Microsoft\Boot\bootmgfw.efi

это одна и та же EFI программа, см размер.

В случае хакерской активации через Slic, возможен такой загрузчик:
path \EFI\Microsoft\Boot\windslic.efi

Если установлен загрузчик rEFInd, path должен быть: path \EFI\REFIND\REFIND_X64.EFI

Изменить загрузчик из Windows, можно командой bcdedit: например:

5. Linux on UEFI/GPT

Перед установкой Linux из UEFI, советую настроить BIOS следующим образом;

  • загрузка UEFY Only
  • отключить Secure Boot

Дистрибутивы Debian/CentOS/Ubuntu — при начальной установке не требуют
вмешательства, установщик правильно разбирается с разметкой:

  • если разметка отсутствует создает ESP и прописывает туда загрузчик efi
  • если разметка уже есть и ESP партиция в наличии, добавляет туда свой загрузчик и делает его default’ным

Примечание: В EFI/BIOS предлагается выбрать загрузку UEFI Only потому что с ней не будет проблем.

Это связано с реализацией UEFI/BIOS различными производителями.

Загрузка: UEFY, Legacy — должна отрабатывать в последовательности:

  • — сначала найти ESP и попытаться загрузиться
  • — если ESP на устройствах отсутствуют, перейти к загрузке Legacy(BIOS)

Загрузка на некоторых материнских картах в случае выбора двух режимов; UEFI и затем Legacy может не найти реально существующий EFI-загрузчик на HDD.

Поэтому, лучше установить UEFY Only и установить ОС, а потом можно экспериментировать с настройками BIOS.

Кроме того, есть материнские карты отдельных производителей, у которых загрузчик ищется только в \EFI\Microsoft\Boot\.

Допустим мы ставили Linux на чистый диск из UEFI, посмотрим конфигурацию системы и загрузки GRUB2 + EFI: /dev/sda1 это /boot/efi ESP partition

Посмоотрим разметку диска (GPT):

рекомендую сохранять значение UUID для ESP (может пригодится для grub)

модуль efivars подгружается автоматически при установке из UEFI

благодаря ему, реализован очень полезный функционал, но будьте осторожны с содержимым, которое монтируется в /sys/firmware/efi!

Очень Важно: UEFI NVRAM доступна на запись от root’а, удаление данных в NVRAM, может стать катастрофой для компьютера!

Еще один важный и полезный инструмент, утилита efibootmgr позволяет решать проблемы загрузки.

посмотрим текущее состояние:

текущий загрузчик EFI: BootCurrent: 0004
порядок загрузки EFI: BootOrder: 0004,0000,0001,0002,0003
и смотрим кто у нас 4 или 0004: Boot0004* debian HD(1,800,100000,dfb01231-7608-4325-99e7-5cfc1379d23c)File(\EFI\debian\grubx64.efi)

Все верхние примеры были на базе ОС Debian.

Работа c ESP в Linux

Важно: ESP должна быть смонтирована!

В нижнем примере это выглядит следующим образом:

содержимое ESP при единственной установленой ОС Debian

В Ubuntu отличаться будет лишь названием: /boot/efi/EFI/ubuntu/

Создание GPT разметки в Linux:

  • Ubuntu и Debian имеют адаптированную утилиту fdisk для работы с GPT
  • или воспользоваться альтернативой: gdisk или parted

Примеры разметки:

  • fdisk
  • parted
  • sgdisk или

Примечание: Комментария и объяснения верхних команд не будет, как ими пользоваться можно прочитать в man

6. FreeBSD on UEFI/GPT

Установка FreeBSD из UEFI на чистый диск проходит без проблем, но если диск уже размечен как GPT и на нем есть ESP партиция, то встраиваться туда FreeBSD не умеет.

Ниже пример чистой установки FreeBSD из UEFI(пусть не смущает что это VM):

  • uname
  • camcontrol
  • gpart
  • mount
  • монтирование ESP и просмотр содержимого

Загрузка FreeBSD из UEFI коротко, четко и ясно описана в uefi(8)

UEFI firmware ищет загрузчик OS на EFI System Partition (ESP), если не установлен, по умолчанию грузит /efi/Boot/bootx64.efi. Это уже было описано.

По умолчанию FreeBSD устанавливает свой EFI загрузчик: boot1.efi как /efi/Boot/bootx64.efi

  • boot1.efi читает /boot.config или /boot/config
  • затем ищет на ufs или zfs загрузчик loader.efi и загружает его
  • loader.efi загружает ядро — kernel

Создание USB/HDD UEFI Bootable в FreeBSD:

Просто. Далее можем развернуть систему руками, как обычно из /usr/freebsd-dist при загрузке с CD/DVD или Memstick.

Что из себя представляет /boot/boot1.efifat:

Немного смущает что разный размер:

Но ничего страшного, при ручной разметке я использовал /boot/boot1.efi и без автоскрипта для efi-shell startup.nsh

Как во FreeBSD создать свой /boot/boot1.efifat, например, размером 512K:

Верхнее, только в случае отсутствия других ОС на диске, для DUAL/TRIPLE Boot, ESP должна быть достаточного размера, в случае Windows не менее 100MB

Это легко посчитать установив один раз Windows+Linux+FreeBSD.

Как во FreeBSD создать EFI раздел: создать FAT32:

7. Dual/Triple/Multiboot Windows,Linux,FreeBSD on UEFI

Выше была рассмотрена чистая установка трех Операционных систем, на основании которой, можно сделать несколько важных выводов:

  • Windows 7/8/10
    • использует существующую ESP при установке
    • делает собственый загрузчик default’ным, не интегрирует существующие ОС в меню загрузки
    • имеет утилиту управления загрузчиком: bcdedit
  • Linux
    • использует существующую ESP при установке
    • делает собственый загрузчик GRUB2-EFI default’ным, добавляет существующие ОС в загрузочное меню
    • имеет утилиту управления загрузчиком: efibootmgr
  • FreeBSD
    • процедура установки не умеет использовать существующую ESP
    • не имеет утилит управления загрузчиком
    • имеет пакет(порт) grub2-efi для установки и настройки стороннего загрузочного менеджера

На основании данных выводов, можно легко установить указанные ОС вместе на один компьютер:

  • на один диск
  • на разные диски
  • в любом порядке

однако определенный порядок, может упростить настройку загрузки.

При установке двух систем на один диск, удобней следующий порядок:

  • 1. Windows затем 2. FreeBSD
  • 1. Windows затем 2. Linux
  • 1. Linux затем 2. FreeBSD

А в случае установки трех систем на один диск, удобней следующий порядок:

  1. Windows
  2. FreeBSD
  3. Linux

Следует отметить, верхние рекомендации, являются условными, потому что опираются на личное, субъективное мнение.

Кроме того, при установке OS FreeBSD, необходимо:

  • использовать ручную разметку диска: Manual
  • не создавать ESP партицию

необходимые дополнительные настройки после установки FreeBSD разберем позже.

DualBoot Linux и Windows

Как уже было сказано, при установке первой системой Windows, а затем Linux, проблем не будет.

Не потребуется никаких дополнительных настроек, при установке Linux, будет установлен BootManager Grub2-EFI, grub2 найдет вторую систему и добавит в меню

Меню GRUB2 в Debian будет выглядеть примерно:
в Ubuntu

Разберем что делать, если Windows была установлена позже и как создать меню загрузки в GRUB2.

Нам необходимо создать меню Windows для GRUB2, для этого необходимо загрузить Linux. Это можно сделать двумя способами:

  1. из Windows с помощью bcdedit
    или
  2. используя POP-UP меню BIOS выбрать загрузку Linux

После того как загрузились в Linux, необходимо:

  1. изменить порядок загрузки через efibootmgr
    имеем by default: BootOrder: 0005, где Boot0005* Windows Boot Manager меняем на debian
  2. создать меню загрузки Windows для GRUB2
    два варианта:
    1. достаточно выполнить утилиту os-prober (ее используют grub-probe и grub-mkconfig)
    2. или создать руками /etc/grub.d/40_custom

Все.

UEFI DualBoot Windows и FreeBSD

Недостатки FreeBSD в случае MultiBoot:

  • Установщик FreeBSD не умеет интегрировать efi загрузчик в уже существующую ESP
  • В FreeBSD отсутствует утилита аналогичная efibootmgr

Существующие решения UEFI Multiboot для FreeBSD:

  1. порт sysutils/grub2-efi
  2. сторонний загрузчик rEFInd

Установщик FreeBSD не умеет интегрировать свой загрузчик в уже существующую ESP и система не имеет утилиты манипуляции переменными EFI.

Наименее затратный вариант, если FreeBSD будет установлена первой. При установке нужно проследить чтобы партиция ESP была размером не менее 100MB. В ином случае, разметить вручную Manual

Если OS FreeBSD будет устанавливаться не первой системой:

  • разметку диска необходимо выполнить вручную Manual
  • ESP создавать НЕ НУЖНО! Должна быть только одна.
  • по завершению установки выйти в режим Live CD/USB и установить пакет sysutils/grub2-efi
  • или вместо grub2-efi установить из Windows загрузочный менеджер rEFInd

Рассмотрим вариант установки FreeBSD позже остальных ОС с установкой и настройкой sysutils/grub2-efi.

При установке выбираем Manual разметку диска, создаем как минимум freebsd-ufs для корня и freebsd-swap для swap, или устанавливаем zfs на пустую партицию.

Рассмотрим на примере, была установлена OS Windows 7, затем мы установили OS FreeBSD 11.0-Release и после установки вышли в режим Live CD/USB:
— смотрим разметку диска
— задаем под себя переменную PATH и устанавливаем пакетный менеджер pkg:
— устанваливаем пакет grub2-efi
— необходимо смонтировать ESP партицию
— выполняем grub-install — обязательно с ключами или by default будет искать парцтию boot_bios для Non-UEFI загрузки:
— GRUB2 прописал свой загрузчик в:
— создание меню загрузки Windows для grub2-efi

  1. выполняем grub-mkconfig для создания конфигурации /boot/grub/grub.cfg
  2. удаляем секцию 10_kfreebsd из /boot/grub/grub.cfg — она создается НЕВЕРНО может мешать:
  3. создаем свою секцию 40_custom.dist меню загрузки Windows
    где root=(hd0,gpt1) это ESP партиция с efi-загрузчиком Windows

— выполняем reboot и завершаем установку FreeBSD
— загружаемся в Windows и используя bcdedit. меняем загрузчик на grub2-efi от FreeBSD:

При использовании rEFInd, не требуется установка grub2-efi, но перед завершением установки FreeBSD необходимо выйти в Live CD/USB, смонтировать партицию ESP и скопировать туда загрузчик FreeBSD:

  • монтируем ESP
  • создаем директорию FreeBSD и копируем в нее загрузчик
  • установку и настройку rEFInd удобней выполнить из Windows, но можно из FreeBSD.

Установка и настройка rEFInd.

  • монтируем ESP используя команду mountvol
  • Скачиваем rEFInd
  • Разворачиваем архив в S:\EFI\refind
  • Удаляем все лишние из \EFI\refind
  • создаем конфиг refind.conf
  • настраиваем в нем нужные нам меню:
  • используя bcdedit устанавливаем refind как загрузчик by default
  • перезагружаемся и наслаждаемся меню rEFInd

rEFInd имеет достаточное количество настроек и может быть использован как с текстовым меню или графическим с иконками и тд и тп. Используйте документацию и пример refind.conf-sample

Теперь не составит труда настроить загрузку UEFI OS FreeBSD,Linux,Windows: Dual, Triple или MultiBoot.

Источник

Читайте также:  Find chipset in windows
Оцените статью