Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
uefi [2016/12/21 16:54] [Что нужно для установки ОС, что бы она грузилась через UEFI?] |
uefi [2016/12/22 16:29] [Как Ubuntu загружается в режиме Secure Boot] |
||
---|---|---|---|
Строка 15: | Строка 15: | ||
Проблемой BIOS принято считать то, что много работы он делает зря (чем затягивает процесс загрузки системы). Практически всю его работу по инициализации и поддержке оборудования компьютера все современные ОС попросту игнорируют и повторно инициализируют и далее работают через свои драйвера. Все, что дает BIOS, было реально востребовано только в ранних версиях DOS... | Проблемой BIOS принято считать то, что много работы он делает зря (чем затягивает процесс загрузки системы). Практически всю его работу по инициализации и поддержке оборудования компьютера все современные ОС попросту игнорируют и повторно инициализируют и далее работают через свои драйвера. Все, что дает BIOS, было реально востребовано только в ранних версиях DOS... | ||
- | Другой проблемой являются ограничения, которые установлены для поддержки BIOS: это 16-ти разрядный реальный режим работы процессора с набором команд i8086, 1Мб адресуемого пространства памяти и периферия (клавиатура, видео адаптер, контроллер прямого доступа в память) совместимая с IBM AT. На сегодняшний день, требовать от 64-х разрядного многоядерного процессора совместимости с 16-разрядным i8086 - уже немного смешно, а требование совместимости по периферии с IBM AT уже даже не смешно, а очень грустно. | + | Другой проблемой являются ограничения, которые установлены для поддержки BIOS: это 16-ти разрядный реальный режим работы процессора с набором команд i8086, 1Мб адресуемого пространства памяти и периферия (клавиатура, видео адаптер, контроллер прямого доступа в память) совместимая с IBM AT. На сегодняшний день, требовать от 64-х разрядного многоядерного, многопоточного процессора совместимости с одноядерным и однопоточным 16-разрядным i8086 - уже немного смешно, а требование совместимости по периферии с IBM AT уже даже не смешно, а очень грустно. |
==== (U)EFI ==== | ==== (U)EFI ==== | ||
- | Идея отказаться от всего того ненужного, что делает BIOS, снять ограничения BIOS и сделать процесс инициализации и загрузки более гибким возникала уже очень давно, и различные попытки сделать это предпринимались, но IT-индустрия реально созрела к принятию нового общего стандарта загрузки персональных компьютеров только в начале этого века. В 2005 был создан консорциуму UEFI Forum, которому INTEL передал свою наработки по проекту Intel Boot Initiative (позже переименованному в EFI - Extensible Firmware Interface), начатому еще середине 90-х. Помимо Intel в консорциум вошли AMD, Apple, IBM, Microsoft и многие другие крупные IT-компании. Вместе с созданием консорциума спецификация EFI была переименована в UEFI (Unified Extensible Firmware Interface)((Не смущайтесь тем, что во многих местах UEFI упоминается как EFI - по сути это не совсем правильно, но по факту - речь об одном и том же.)). | + | Идея отказаться от всего того ненужного, что делает BIOS, снять ограничения BIOS и сделать процесс инициализации и загрузки более гибким возникала уже очень давно, и различные попытки сделать это предпринимались, но IT-индустрия реально созрела к принятию нового общего стандарта загрузки персональных компьютеров только в начале этого века. В 2005 был создан консорциуму [[http://www.uefi.org/|UEFI Forum]], которому INTEL передал свою наработки по проекту Intel Boot Initiative (позже переименованному в EFI - Extensible Firmware Interface), начатому еще середине 90-х. Помимо Intel в консорциум вошли AMD, Apple, IBM, Microsoft и многие другие крупные IT-компании. Вместе с созданием консорциума спецификация EFI была переименована в UEFI (Unified Extensible Firmware Interface)((Не смущайтесь тем, что во многих местах UEFI упоминается как EFI - по сути это не совсем правильно, но по факту - речь об одном и том же.)). |
- | Основные концепции положенные в основу UEFI - "минималистичность", "модульность" и независимость от процессора. Прошивка UEFI может быть собрана под 32-битный или 64-битный процессоры Intel, 32-х или 64-х битный ARM процессор, а также Intel Itanium процессоры. Кроме того UEFI имеет собственный менеджер загрузки и умеет работать с файловыми системами на диске (по умолчанию только FAT32) и умеет загружать драйвера для оборудования.\\ | + | Основные концепции положенные в основу UEFI - "минималистичность", "модульность" и независимость от процессора. Прошивка UEFI может быть собрана под 32-битный или 64-битный процессоры Intel, 32-х или 64-х битный ARM процессор, а также Intel Itanium процессоры. Кроме того UEFI имеет собственный менеджер загрузки и умеет работать с файловыми системами на диске (по умолчанию только FAT32) и умеет загружать драйвера для поддержки различного оборудования и файловых систем.\\ |
После включения компьютера и проведения первичного теста оборудования (на этом этапе разницы с BIOS нет) инициализируются только те подсистемы, которые необходимые для загрузки. | После включения компьютера и проведения первичного теста оборудования (на этом этапе разницы с BIOS нет) инициализируются только те подсистемы, которые необходимые для загрузки. | ||
В некоторых режимах загрузки, которые обычно называют Fast-boot (или Fast-Startup) даже клавиатура может оставаться не инициализированной пока не загрузится ОС. Некоторые настройки Fast-boot могут отключать работу со всеми USB устройствами и не будет возможности даже выбрать с чего грузится компьютеру, ведь клавиатура не работает до тех пор, пока не загрузится ОС. | В некоторых режимах загрузки, которые обычно называют Fast-boot (или Fast-Startup) даже клавиатура может оставаться не инициализированной пока не загрузится ОС. Некоторые настройки Fast-boot могут отключать работу со всеми USB устройствами и не будет возможности даже выбрать с чего грузится компьютеру, ведь клавиатура не работает до тех пор, пока не загрузится ОС. | ||
- | Причем, в отличии от BIOS, все компоненты которого записаны в постоянную(флеш) память, UEFI хранит часть своего кода на диске - в специальном разделе ESP((на самом деле ESP раздел может быть и на флеш-памяти и даже на сетевом хранилище, но эта экзотика (предусмотренная стандартом) вряд ли будет востребована простыми пользователями)). Это позволяет легко расширять, менять и обновлять код поддерживающий различные устройства компьютера без необходимости перепрограммировать постоянное ЗУ компьютера. А кроме драйверов для поддержки устройств на ESP разделе может хранится и поддержка протоколов, утилиты и даже собственная EFI-оболочка (shell), из-под которой можно запускать собственные EFI-приложения. Т.е. UEFI по сути - маленькая ОС (или псевдо-ОС). При этом загрузчик операционной системы - становится обычным приложением, которое исполняется в окружении, предоставляемом псевдо-ОС UEFI. | + | Причем, в отличии от BIOS, все компоненты которого записаны в постоянную(флеш) память, UEFI может хранить часть своего кода на диске - в специальном разделе ESP((на самом деле ESP раздел может быть и на флеш-памяти и даже на сетевом хранилище, но эта экзотика (предусмотренная стандартом) вряд ли будет востребована простыми пользователями)). Это позволяет легко расширять, менять и обновлять код поддерживающий различные устройства компьютера без необходимости перепрограммировать постоянное ЗУ компьютера. А кроме драйверов для поддержки устройств на ESP разделе может хранится и поддержка протоколов, утилиты и даже собственная EFI-оболочка (shell), из-под которой можно запускать собственные EFI-приложения. Т.е. UEFI по сути - маленькая ОС (или псевдо-ОС). При этом загрузчик операционной системы - становится обычным приложением, которое исполняется в окружении, предоставляемом псевдо-ОС UEFI. |
UEFI реализует свой менеджер загрузки, он поддерживает мульти-загрузку: позволяет выбирать загрузку из нескольких ОС и/или утилит. Загрузчик ОС - это просто efi-приложение, которое хранится на ESP разделе. В ESP может храниться много приложений, и пункты меню загрузки могут ссылаться каждый на свое приложение (или на одно, но с передачей разных параметров). Кроме того, UEFI поддерживает ассоциацию нажатия клавиш с пунктами загрузки (выбор пункта загрузки осуществляется в зависимости от того какая нажата клавиша в момент загрузки). Т.о. UEFI берет на себя большую часть задач, которые раньше могли решать только загрузчики ОС (типа GRUB). | UEFI реализует свой менеджер загрузки, он поддерживает мульти-загрузку: позволяет выбирать загрузку из нескольких ОС и/или утилит. Загрузчик ОС - это просто efi-приложение, которое хранится на ESP разделе. В ESP может храниться много приложений, и пункты меню загрузки могут ссылаться каждый на свое приложение (или на одно, но с передачей разных параметров). Кроме того, UEFI поддерживает ассоциацию нажатия клавиш с пунктами загрузки (выбор пункта загрузки осуществляется в зависимости от того какая нажата клавиша в момент загрузки). Т.о. UEFI берет на себя большую часть задач, которые раньше могли решать только загрузчики ОС (типа GRUB). | ||
Строка 31: | Строка 31: | ||
Архитектура UEFI позволяет также загрузить драйвера устройств (необходимые для работы ОС и для процедуры загрузки). Да и само ядро ОС можно загрузить (по крайней мере ядро Linux, собранное с опцией UEFISTUB) непосредственно из UEFI (т.е. устранить загрузчик из процесса загрузки). Такую возможность мы разберем более детально чуть позже. | Архитектура UEFI позволяет также загрузить драйвера устройств (необходимые для работы ОС и для процедуры загрузки). Да и само ядро ОС можно загрузить (по крайней мере ядро Linux, собранное с опцией UEFISTUB) непосредственно из UEFI (т.е. устранить загрузчик из процесса загрузки). Такую возможность мы разберем более детально чуть позже. | ||
- | Как и в случае с BIOS, UEFI - это стандарт, реализацией которого занимаются разные поставщики решений. Поэтому в реализации UEFI стандарта в прошивках разных поставщиков могут несколько отличаться. Различия в реализации, как правило, касаются интерфейса утилиты настройки, а вот реализация методов работы самого UEFI в процессе загрузки различаться сильно не должна (по крайней мере при строгом следовании стандарту UEFI). Могут встречаться красивые графические утилиты настройки UEFI, иногда даже с поддержкой мыши (например от ASUS) или текстовые, с элементами псевдо-графики, очень сильно напоминающих интерфейс настройки BIOS (например от AMI). Но значение имеет не способ оформления интерфейса, а те настройки, которые доступны для изменения через этот интерфейс. | + | Как и в случае с BIOS, UEFI - это стандарт, практической реализацией которого занимаются разные поставщики решений. Поэтому в реализации UEFI стандарта в прошивках разных поставщиков могут значительно отличаться (как визуально так и функциональным наполнением). Могут встречаться сильно урезанные по функционалу реализации (чаще в компьютерах выпущенных в 2000-х годах). Но базовые принципы работы UEFI в процессе загрузки различаться сильно не должны (он был определен и зафиксирован в самых ранних стандартах UEFI). Интерфейсы утилиты настройки могут исльно различаться, но значение имеет не способ оформления интерфейса, а те настройки, которые доступны для изменения через этот интерфейс. |
==== Совместимость ==== | ==== Совместимость ==== | ||
- | Само собой, современные прошивки умеют эмулировать работу BIOS. Отвечает за совместимость с BIOS модуль CSM (Compatibility Support Module иногда он еще называется Legasy support). Когда CSM включен, то при загрузке он пытается найти загрузчик ОС в первом секторе диска (MBR) или в специальном служебном разделе (при GPT разбивке диска). Если код загрузчика найден, то CSM считает, что установлена ОС требующая поддержки BIOS режима, и прежде чем загрузить и запустить код из MBR, CSM проделывает все те же шаги инициализации оборудования, что предусмотрены для BIOS. | + | Само собой, современные прошивки умеют эмулировать работу BIOS. Отвечает за совместимость с BIOS модуль CSM (Compatibility Support Module иногда он еще называется Legasy support). Когда CSM включен и при загрузке загрузиться в UEFI не удалось, то CSM пытается найти загрузчик ОС в первом секторе диска (MBR) или в специальном служебном разделе (при GPT разбивке диска). Если код загрузчика найден, то CSM считает, что установлена ОС требующая поддержки BIOS режима, и прежде чем загрузить и запустить код из MBR, CSM проделывает все те же шаги инициализации оборудования, что предусмотрены для BIOS. |
- | Если вы планируете использовать загрузку в варианте UEFI, то работу этого модуля лучше запретить в системной утилите вашей материнской платы (Firmware setup utility). Кроме того, загрузка в режиме SecureBoot (о ней будет рассказано ниже) явно требует, что бы работа модуля CSM была запрещена. | + | Если вы планируете использовать только загрузку в варианте UEFI, то работу этого модуля лучше запретить в системной утилите вашей материнской платы (Firmware setup utility). Кроме того, загрузка в режиме SecureBoot (о ней будет рассказано ниже) явно требует, что бы работа модуля CSM была запрещена. |
- | <note important>Собственно использовать стазу оба варианта загрузки (для разных ОС) - не стоит. Лучше для всех ОС установленных на данном компьютере использовать один вариант загрузки: через CSM или UEFI.</note> | + | <note important>Собственно использовать сразу оба варианта загрузки (для разных ОС) - не стоит. Лучше для всех ОС установленных на данном компьютере использовать один вариант загрузки: через CSM или UEFI.</note> |
==== ESP раздел ==== | ==== ESP раздел ==== | ||
Отдельно стоит рассмотреть служебный раздел UEFI. | Отдельно стоит рассмотреть служебный раздел UEFI. | ||
Строка 47: | Строка 47: | ||
При установке UBUNTU (с загрузкой через UEFI) служебный раздел ESP монтируется в /boot/efi. И на ESP разделе создается каталог EFI\ubuntu в котором размещается загрузчик((Виндовый загрузчик размещается в EFI\Microsoft\Boot\Bootmgfw.efi)) GRUB и/или Shim (о них - чуть позже). | При установке UBUNTU (с загрузкой через UEFI) служебный раздел ESP монтируется в /boot/efi. И на ESP разделе создается каталог EFI\ubuntu в котором размещается загрузчик((Виндовый загрузчик размещается в EFI\Microsoft\Boot\Bootmgfw.efi)) GRUB и/или Shim (о них - чуть позже). | ||
<note important>EFS раздел лучше создавать из установщика. Когда вы делаете его сами через gparted/parted/fdisk, то есть шанс сделать что-то не так (например выберете FAT16 вместо FAT32) и тогда UEFI не поймет, что это EFS раздел и не будет с него загружаться. Доверьте установщику выполнить работу, которую он умеет делать хорошо - делайте EFS раздел из установщика.</note> | <note important>EFS раздел лучше создавать из установщика. Когда вы делаете его сами через gparted/parted/fdisk, то есть шанс сделать что-то не так (например выберете FAT16 вместо FAT32) и тогда UEFI не поймет, что это EFS раздел и не будет с него загружаться. Доверьте установщику выполнить работу, которую он умеет делать хорошо - делайте EFS раздел из установщика.</note> | ||
+ | |||
===== MBR и GPT ===== | ===== MBR и GPT ===== | ||
Еще одно "новшество" в индустрии относится к таблице разделов диска. | Еще одно "новшество" в индустрии относится к таблице разделов диска. | ||
Строка 56: | Строка 57: | ||
К чему я упомянул про таблицы разбиения дисков? А к тому, что, несмотря на то, что UEFI планировалось использовать только с GPT, а BIOS обычно работает с MBR (вернее код в MBR работает с таблицей разделов расположенной в конце MBR), но в реальной жизни и BIOS (вернее сказать CSM) научили понимать GPT, и для UEFI предусмотрели использование таблицы разделов из MBR. | К чему я упомянул про таблицы разбиения дисков? А к тому, что, несмотря на то, что UEFI планировалось использовать только с GPT, а BIOS обычно работает с MBR (вернее код в MBR работает с таблицей разделов расположенной в конце MBR), но в реальной жизни и BIOS (вернее сказать CSM) научили понимать GPT, и для UEFI предусмотрели использование таблицы разделов из MBR. | ||
+ | <note>EFS раздел может быть также создан в таблице разделов формата ISO9660 (стандарт используемый для разметки CD/DVD оптических лисков). Это позволяет загружаться в режиме UEFI и с CD/DVD.</note> | ||
Получившаяся в результате "солянка" (из 4-х допустимых вариантов: UEFI + MBR, UEFI + GPT, BIOS/SCM + MBR и BIOS/SCM + GPT) создает некоторую путаницу и недопонимание. Давайте попробуем во всем этом разобраться более детально. | Получившаяся в результате "солянка" (из 4-х допустимых вариантов: UEFI + MBR, UEFI + GPT, BIOS/SCM + MBR и BIOS/SCM + GPT) создает некоторую путаницу и недопонимание. Давайте попробуем во всем этом разобраться более детально. | ||
Строка 284: | Строка 286: | ||
<note warning>ВНИМАНИЕ, если вы организовали загрузку GRUB (или другого загрузчика что вы используете) на основе только своего собственного ключа, то внимательно следите за обновлениями: при обновлении GRUB вам необходимо подписать новую версию GRUB своим ключом, иначе он не загрузится в Secure Boot режиме.</note> | <note warning>ВНИМАНИЕ, если вы организовали загрузку GRUB (или другого загрузчика что вы используете) на основе только своего собственного ключа, то внимательно следите за обновлениями: при обновлении GRUB вам необходимо подписать новую версию GRUB своим ключом, иначе он не загрузится в Secure Boot режиме.</note> | ||
- | <note>Собственно ISO образ UBUNTU - гибридный, на нем в мастер запись стандарта ISO9660 (CD/DVD формат дисков) внедрена MBR запись. И код 0-вой стадии загрузки grub-pc прописан как в MBR так и в загрузочную запись ISO9660. А кроме этого в MBR и в таблице разделов ISO9660 определен EFS раздел с загрузчиком SHIM/GRUB помещенным по пути EFI\BOOT\BOOTx64.EFI - т.е. пути определенному стандартом UEFI как путь к загрузчику по умолчанию. | + | <note>Собственно ISO образ UBUNTU - гибридный, на нем в мастер запись стандарта ISO9660 (CD/DVD формат дисков) внедрена MBR запись. |
+ | Используется одновременно два загрузчика: | ||
+ | - isolinux (вариант загрузчика [[https://ru.wikipedia.org/wiki/Syslinux|syslinux]]) он используется для загрузки в BIOS режиме и размещается в MBR и специальной загрузочной записи ISO9660 стандарта, подробнее - [[http://wiki.osdev.org/El-Torito|тут]]). | ||
+ | - grub (вариант grub-efi) он используется для загрузки в UEFI режиме. | ||
+ | |||
+ | EFS раздел (необходимый для загрузки в UEFI режиме) прописан и в таблицу записей в MBR, и в каталог записей iso9660 формата. По UEFI стандарту загрузчик по умолчанию должен находится в EFS разделе по пути: EFI\BOOT\grubx64.efi | ||
Такой "винегрет" позволяет грузиться с такого образа в следующих режимах: | Такой "винегрет" позволяет грузиться с такого образа в следующих режимах: | ||
- | - Элемент нумерованного списка- в режиме BIOS/SCM | + | - в режиме BIOS/SCM |
- | - как с CD/DVD (0-вая фаз grub-pc берется из загрузочной записи ISO9660 стандарта, подробнее - [[http://wiki.osdev.org/El-Torito|тут]]) | + | - как с CD/DVD (код isolinux берется из загрузочной записи ISO9660 стандарта, подробнее - тут) |
- | - как с HDD/USB-Flash (0-вая фаза grub-pc берется из MBR) | + | - как с HDD/USB-Flash (код isolinux берется из MBR) |
- в режиме UEFI | - в режиме UEFI | ||
- как с CD/DVD (EFS раздел находится в каталоге записей ISO9660, и оттуда запускается EFI\BOOT\BOOTx64.EFI) | - как с CD/DVD (EFS раздел находится в каталоге записей ISO9660, и оттуда запускается EFI\BOOT\BOOTx64.EFI) | ||
- как с HDD/USB-Flash (EFS раздел находится в таблице разделов MBR, и оттуда запускается EFI\BOOT\BOOTx64.EFI) | - как с HDD/USB-Flash (EFS раздел находится в таблице разделов MBR, и оттуда запускается EFI\BOOT\BOOTx64.EFI) | ||
- | В EFI\BOOT\BOOTx64.EFI на самом деле лежит не GRUB, а SHIM (это для загрузки в режиме SecureBoot), а сам grubx64.efi (начальная стадия grub-efi) лежит рядом (EFI\BOOT\grubx64.efi) и его запускает SHIM. | + | Кстати в EFI\BOOT\BOOTx64.EFI лежит не сам GRUB, а SHIM. Сам grubx64.efi (начальная стадия grub-efi) лежит рядом (EFI\BOOT\grubx64.efi) и его запускает SHIM. (SHIM имеет валидную подпись ключом от MicroSoft). |
Такой образ легко записать на флешку простой командой: | Такой образ легко записать на флешку простой командой: |