LXF168:Пере-перезагрузка
Olkol (обсуждение | вклад) (Новая страница: «Категория: Главное в мире Linux == UEFI: Пере-перезагрузка == ''BIOS загружал ПК 30 лет, но …») |
Версия 16:52, 11 ноября 2018
|
|
|
UEFI: Пере-перезагрузка
BIOS загружал ПК 30 лет, но настала пора перемен. Джон Лэйн знакомится с преемником.
С момента, когда IBM создала свой первый Персональный Компьютер в 1981 году, тот изменился едва ли не до неузнаваемости, но при его включении происходит, по большей части, все то же самое. В каждом ПК есть BIOS, ответственная за запуск компьютера и загрузку операционной системы. Суть в том, что BIOS (сокращение от Basic Input/Output System — Базовая система ввода/вывода), прежде чем загрузить программу загрузки из записи MBR {master boot record) или на устройстве хранения, осуществляет серию тестов Power On Self Tests (именуемых POST) и исполняет ее. А уж загрузчик (bootloader) затем принимается за вашу операционную систему.
Две новых технологии покушаются изменить этот порядок: BIOS потихоньку вытесняется UEFI, Unified Extensible Firmware Interface, а MBR – GUID Partition Table [Таблица разделов GUID], или GPT.
Изначально BIOS разрабатывалась как интерфейс между оборудованием и Disk Operating System (DOS, более известной как MS-DOS). Она была, и остается, 16-битной программой реального режима. Поскольку за эти годы операционные системы эволюционировали до 32-битного, а сейчас и 64-битного кода, они больше не используют интерфейс BIOS, содержа вместо него собственные драйверы устройств. Роль BIOS сократилась до запуска процесса загрузки операционной системы, а после этого – по сути, бездействия.
MBR служит двум целям: она содержит bootloader, исполняемый BIOS для загрузки компьютера, и таблицу разделов, определяющую расположение файловых систем на диске. Вся эта информация хранится в самом первом секторе диска (именуемом сектор 0) и по этой причине ограничена до 512 байт: 446 байт под загрузчик, плюс таблица разделов, содержащая до четырех 16-байтных записей. Последние два байта – это подпись, по которой BIOS распознает действующую MBR. Таблицы разделов используют адресные поля с 32-битным сектором, а значит, не могут обращаться к дискам размером более 2 TiB. Такой тип таблицы разделов часто именуется таблицей разделов MSDOS, с целью отличить его от нового GPT.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
[[Файл: | |thumb|400px|> Диск GPT содержит две копии таблиц разделов плюс защитную таблицу разделов MS-DOS.]] Недостатки такого рода настройки – то, что она ограничена одним загрузчиком, четырьмя разделами и максимальным размером диска 2 TiB. UEFI поддерживает множественные загрузчики, а GPT поддерживает до 128 разделов и работает с дисками, по объему превышающими 2 TiB. Кроме того, UEFI дает таблице возможность сделать процесс загрузки безопасным.
Поскольку BIOS подразумевает, что загрузчик расположен в первом секторе диска, тот может быть только один на каждый диск. Большинство BIOS разрешают выбирать способ загрузки диска, и поэтому могут поддерживать столько загрузчиков, сколько имеется физических дисков. UEFI, напротив, игнорирует загрузчик в секторе 0, но зато разрешает существование нескольких загрузчиков на одном диске, используя особый раздел вместо абсолютного сектора. Этот особый раздел известен как EFI System Partition, или ESP, и форматируется он файловой системой FAT (обычно FAT32) и имеет размер от 100 до 250 MiB. Согласно системным требованиям UEFI, это должен быть первый раздел, и его флажок загрузки должен быть установлен. В системах Linux принято монтировать ESP под /boot/efi. Традиционно загрузчик хранятся в ESP в поддиректориях в соответствии с их производителями, а на форуме UEFI имеется список этих поддиректорий в www.uefi.org/specs/esp_registry.
Сердцевиной UEFI является его прошивка, и она отвечает за загрузку и исполнение приложений UEFI. Это отдельные программы, зависящие только от сервисов самой прошивки – ОС им не нужна. Они могут быть инструментами предзагрузочной диагностики/техобслуживания, но большинство из них являются загрузчиками ОС. Прошивка UEFI содержит менеджер загрузки, позволяющий пользователю запустить приложения UEFI. Менеджер загрузки напоминает обычный загрузчик, например, Grub, но грузить он может только приложения EFI. Можно скомпилировать ядро Linux (с версии 3.3) как приложение EFI, тем самым устранив необходимость в загрузчике – том же Grub, потому что тогда UEFI сможет загружать ядро напрямую.
Прошивка UEFI умеет читать таблицы разделов и файловые системы FAT, в отличие от BIOS, которая полагается на загрузчик. Она настраивается через переменные EFI, хранящиеся в NVRAM. Главная переменная, управляющая менеджером загрузки EFI, именуется BootOrder; она определяет, какие пункты меню отображать. Если ее не настроить, прошивка будет следовать стандартной процедуре, обнаруживающей загрузчик по указанному пути к ESP. Путь, который зависит от архитектуры, существует в виде:
\EFI\BOOT\BOOT[architecture name].EFI
Буква G в GPT означает GUID, то есть Globally Unique Identifier [Глобально уникальный идентификатор], реализацию стандарта Universally Unique Identifier, определенного RFC4122. GPT использует GUID для идентификации дисков и разделов. Он начинает с сектора 1, с заголовка, который определяет количество и размер записей о разделах в идущей далее таблице. Заголовок содержит GUID диска, уникальным образом идентифицирующий диск, и каждый раздел, определенный в GPT, содержит два GUID: первый представляет тип раздела, а второй уникальным образом идентифицирует его. Помимо этого, заголовок содержит контрольную сумму CRC32, которая может использоваться прошивкой или операционной системой для подтверждения целостности данных. Не вздумайте редактировать таблицу разделов вручную!
GPT может иметь 128 разделов, и это устраняет надобность в логических и расширенных разделах. Расширенный раздел был способом решить проблему ограничения MBR четырьмя разделами: один из этих разделов использовался как расширенный, и его можно было разбить на множество логических разделов.
Каждая запись раздела имеет длину 128 байт и содержит уже упомянутые GUID, адреса начального и конечного секторов раздела, некоторые атрибуты и имя, понятное человеку. Вторая копия GPT хранится в конце диска в качестве резервной копии. Чтобы нормально разместить 128 таких разделов, требуется 16384 байта. Это 32 сектора, а следовательно, первый используемый сектор на диске GPT – сектор 34.
Схема GPT также включает master boot record, и ее цель – помочь предотвратить повреждение диска GPT инструментами, которые GPT не распознают. Эта Protective [Защитная] MBR, или PMBR, содержит таблицу разделов MSDOS с одним разделом на весь диск (или 2 TiB, если диск больше). Этот раздел отмечен типом 0xEE. Системы, не распознающие GPT, будут видеть неизвестный раздел, занимающий весь диск и не оставляющий свободного места.
Еще одно применение защитной MBR – разрешить BIOS загружать диск GPT. Если он содержит загрузчик, то BIOS слепо загрузит и исполнит его. Если этот загрузчик понимает GPT, то сможет его загрузить. Один из таких загрузчиков – Grub2, используемый многими дистрибутивами Linux. Это позволяет системам, работающим на BIOS, использовать диски размером более 2 TiB.
Диски с разделами MS-DOS обычно оставляют пропуск (именуемый областью совместимости DOS), начиная с сектора 1 и доходя до начала первого раздела. Традиционно загрузчики употребляли это свободное место для размещения на нем кода (Grub 1 записал сюда свою программу загрузки в стадии 1.5). В GPT таблица разделов начинается с сектора 1, сразу после PMBR – и здесь нет незанятого места, чтобы его можно было использовать подобным образом. Вместо этого спецификация GPT предусматривает специальный раздел загрузки BIOS для использования теми загрузчиками, которые в ином случае должны были бы использовать область совместимости DOS. Grub 2 пишет свой загрузчик прямо на этот раздел (он не содержит файловой системы). Принимая во внимание, что наличие области совместимости DOS было определено скорее соглашением, чем стандартом, наличие специально отведенного раздела более отказоустойчиво.
Все это была теорией. Теперь перейдем к практике – и настроим новую систему на основе UEFI и GPT. Наша новая система будет иметь двойную загрузку: она будет работать как с прошивкой UEFI, так и с прошивкой BIOS.
Мы воспользуемся VirtualBox, и вы сможете следовать нашим инструкциям, даже если у вас пока нет компьютера с прошивкой UEFI. А возьмем мы ISO Arch Linux от ноября 2012 – то есть вам нужно будет выполнить настройку вручную, это поможет разобраться в нужных действиях. Скачайте его с https://www.archlinux.org/download.
Сперва создайте новую 64-битную виртуальную машину и жесткий диск для тестов (10 ГБ должно хватить). Отметьте Enable EFI option на странице System настроек виртуальной машины, чтобы на компьютере появилась прошивка UEFI. Присоедините ISO-образ и запустите виртуальную машину. Она должна отобразить приглашение для root. Зайдите – пароль не нужен.
Вам нужно создать четыре раздела. Тут вам пригодится gdisk. Мы предлагаем размеры, достаточные для этого упражнения, но можно задать и другие. ESP создается из сектора 2048 (параметр по умолчанию, предлагаемый gdisk), а раздел загрузки BIOS располагается перед ESP. В таблице вы найдете предложения по созданию разделов.
Запустите gdisk командой gdisk /dev/sda, затем используйте o для создания новой пустой таблицы разделов. Используйте n для создания раздела, t – для настройки его типового кода, и (опционально) c для изменения его имени. Запишите новую таблицу разделов с помощью w. Или воспользуйтесь parted:
# parted /dev/sda
(parted) unit s
(parted) mktable gpt
(parted) mkpart primary 2048 411647
(parted) set 1 boot on
(parted) name 1 “EFI System Partition”
(parted) mkpart primary 34 2047
(parted) name 2 “BIOS Boot Partition”
(parted) set 2 bios_grub on
(parted) mkpart primary ext2 411648 821247
(parted) name 3 “Linux /boot filesystem”
(parted) mkpart primary ext4 821248 20971486
(parted) name 4 “Linux /root filesystem”
(parted) quit
Мы здесь использовали деление на разделы GPT, но можно использовать вместо него и разделы MSDOS, если размер диска менее 2 TiB. В этом сценарии пропустите загрузочный раздел BIOS и используйте fdisk, чтобы изменить тип раздела с EFI System Partition на 0xEF. Прошивка UEFI VirtualBox работает как с разделами GPT, так и с разделами MSDOS, но другие прошивки могут поддерживать только GPT.
Создав файловые системы, подмонтируйте их:
# mkfs.vfat -F32 /dev/sda1
# mkfs.ext2 /dev/sda3
# mkfs.ext4 /dev/sda4
# mount /dev/sda4 /mnt
# mkdir /mnt/boot
# mount /dev/sda3 /mnt/boot
# mkdir /mnt/boot/efi
# mount /dev/sda1 /mnt/boot/efi
Используйте утилиту ArchLinux pacstrap для установки новой системы на подготовленные файловые системы (требуется соединение с Интернетом):
# pacstrap /mnt base
# genfstab -p -U /mnt | sed ‘s/cp437/437/’ >> /mnt/etc/fstab
# arch-chroot /mnt pacman -S grub-efi-x86_64
# modprobe efivars
# arch-chroot /mnt grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloaderid=arch_grub --recheck
# arch-chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
# umount /mnt/boot/efi /mnt/boot /mnt
Это установит системные файлы на файловую систему root, монтированную на /mnt. Она также добавляется к /etc/fstab, чтобы позаботиться дополнительной загрузке и файловых системах EFI, монтированных под /mnt (sed вставлено, чтобы обойти ошибку в genfstab). Затем мы установим пакет grub и проверим, загружен ли модуль ядра efivars (он обеспечивает доступ к переменным EFI в /sys/firmware/efi). Далее grub-install установит Grub в новую поддиректорию ESP – arch-grub, мы монтировали ее в /boot/efi. Если все пойдет хорошо, должно появиться сообщение: “Installation finished: No error reported [Установка завершена: ошибок не обнаружено]”. После этого мы генерируем файл настройки Grub и размонтируем наши файловые системы из /mnt. После перезапуска виртуальная машина должна предложить вам свеженастроенное меню Grub и загрузить нашу систему.
Часть Grub настраивает порядок загрузки EFI в NVRAM. Обычно при этом UEFI настраивается на автоматическую загрузку Grub при запуске компьютера. Однако VirtualBox не сохраняет прошивки NVRAM после выключения виртуальной машины, и в результате настройки загрузки теряются.
Если это произойдет, запустится оболочка EFI, и вам нужно будет вручную запустить загрузчик:
2.0 Shell> fs0:\EFI\arch_grub\grubx64.efi
После загрузки ОС настройте загрузчик по умолчанию, чтобы обойти проблему отсутствия постоянной NVRAM:
# mkdir /boot/efi/EFI/BOOT
# cp /boot/efi/EFI/{arch_grub/grub,BOOT/BOOT}x64.efi
Если порядок загрузки не настроен, что и произойдет в том случае, если в NVRAM ничего не будет, прошивка вернется к EFI\BOOT\BOOTx64.efi. В результате это должно привести к успешной загрузке после запуска виртуальной машины. Теперь, чтобы заставить систему загружать BIOS, нужно просто настроить загрузку BIOS:
# dhcpcd
# pacman -S grub-bios
# grub-install --target=i386-pc --recheck /dev/sda
Начните с установки сетевого соединения; один из способов сделать это – команда dhcpcd. Затем установите пакет grub-bios и установите на диск версию Grub для BIOS. Это создаст код загрузки в MBR и раздел загрузки BIOS, который мы настроили раньше. Он использует наш готовый файл настройки Grub, /boot/grub/grub.cfg.
Выключите виртуальную машину и переключите ее настройки с EFI на BIOS, убрав отметку Enable EFI option на странице System. После перезапуска виртуальная машина будет загружаться через BIOS. Этот пример показывает, что на диск с разделами GPT или MSDOS легко установить систему, которая будет работать и с UEFI, и с BIOS. Стоит упомянуть, что в некоторых других дистрибутивах это пройдет не столь гладко.
Теперь займемся бегемотом в гостиной: безопасной загрузкой. Суть ее в том, что UEFI не загрузит ничего, не подписанного распознаваемым ключом. Новые ПК с предустановленным Windows 8 поставляются с ключом от Microsoft, который позволяет их новейшей операционной системе загружаться без проблем. Если в такой системе включена безопасная загрузка и в ней есть только этот ключ, она будет загружать только то, что подписано этим ключом. Большинство новых ПК настроено именно так, чтобы получить сертификацию Windows 8.
Компьютеры с предустановленным Windows 8 имеют безопасную загрузку по умолчанию. Однако ее можно отключить. Для пользователей Linux это на данном этапе самое практичное решение. Правда, некоторым безопасная загрузка будет важна – или они просто захотят воспользоваться ею – и для этого требуется, чтобы Linux был подписан ключом, который будет распознавать прошивка.
Для безопасной загрузки Linux есть две базовых опции. Первая – найти OEM, которые прилагали бы дополнительные ключи, которыми можно было бы подписать Linux. Вторая – подписать Linux ключом Microsoft. По ряду практических соображений обе эти опции малопривлекательны.
Подписывать ядро Linux непрактично: оно быстро меняется, такова его природа; к тому же многие создают собственное ядро с индивидуальной настройкой. Поэтому логично будет взять подписанный загрузчик, который затем сможет загрузить любой образ ядра.
Среди примеров подписанных загрузчиков – предзагрузчик от Linux Foundation и решения, предлагаемые создателями дистрибутивов, например, Fedora Shim. Будучи подписаны ключом Microsoft, они будут работать на любой машине с Windows 8. Однако подписать их этим ключом оказывается проблематично (http://bit.ly/VFEAV9).
Чтобы избежать ситуаций, когда подобные решения могут быть использованы вредоносными программами для нанесения ущерба безопасным системам, требуется присутствие человека, который подтвердит намерение продолжать работу с неподписанной программой загрузки.
Суть предзагрузчика Linux Foundation в предоставлении подписанной программы загрузки, которая запустит по цепочке следующий загрузчик (тот же Grub), а тот затем и загрузит Linux. После предзагрузчика проверка безопасности прекращается, и такой подход не более безопасен, чем отключение безопасной загрузки UEFI. Однако это дает возможность Linux и другим системам с неподтвержденной безопасностью загрузиться в среду безопасной загрузки. Это решение предлагается фондом в качестве временного, на тот период, пока дистрибутивы не реализуют более безопасные решения.
Fedora Shim стремится пойти на шаг дальше, обеспечивая безопасную загрузку системы Linux. Он загружает специальную версию Grub с публичным ключом Fedora, и будет загружать в безопасном режиме ядра, обеспеченные этим ключом. Он также будет загружать и другие ядра, но это потребует ручного контроля во время загрузки. Безопасно загруженные ядра будут также ограничивать загрузку из командной строки и требовать, чтобы модули ядра имели подпись. Такой вариант дает возможность безопасно загрузить Linux с предопределенной конфигурацией, но если требуется индивидуальная настройка, то проблема не снимается: потребуется индивидуальная прослойка локально произведенных ключей, подписанных ключом, распознаваемым прошивкой. Пока что непонятно, как этого добиться. Подобные же подходы практикуются SUSE и Ubuntu.
Механизм подписи для безопасной настройки именуется Microsoft Authenticode и управляется Symantec (бывшей VeriSign). За годичную оплату в размере $ 99 вы можете подписать любое количество бинарников по своему усмотрению через Microsoft Developer Center по адресу https://sysdev.microsoft.com (для регистрации понадобится Windows Live ID).
Вопрос безопасной загрузки пока что не имеет однозначного и простого ответа. Есть методы обхода этой проблемы, но пока рано говорить о том, легко ли будет работать в Linux в среде безопасной загрузки. Если вас это возмущает, вы, возможно, заинтересуетесь кампанией, проводимой FSF: (http://bit.ly/nHYBRN). И всегда есть возможность отключить безопасную загрузку – вам всяко будет не хуже, чем сейчас. |