Что такое BIOS для Linux и как он влияет на систему

Bios for Linux — это набор спецификаций и инструментов, которые обеспечивают совместимость между системным программным обеспечением Linux и аппаратным обеспечением компьютеров на основе BIOS. Он включает в себя поддержку различных функций, таких как загрузка операционной системы, управление ресурсами и настройка параметров оборудования.

Проект направлен на оптимизацию работы Linux в средах с разными версиями BIOS, что позволяет пользователям получать стабильную и эффективную работу операционной системы на различной аппаратной платформе. Это особенно важно для серверных установок и специализированных устройств, где производительность и надежность имеют решающее значение.

LinuxBIOS и Open Firmware: открытый BIOS – реальность

Когда-то купить компьютер было довольно дорогим удовольствием, они работали не очень быстро, а ассортимент программного обеспечения был весьма узким и специфичным. Затем пришли перемены – концепция "Open Source" приобрела популярность, родился знаменитый Linux, и на данный момент у большинства коммерческих программ есть приличные бесплатные варианты. Сначала появились элементарные "аналоги" офисных приложений, но с течением времени талантливые разработчики из мира Open Source добрались до самой сути любого ПК – до BIOS. Множество умов были заняты идеей создания быстрого freeware-BIOS, и в этой статье мы обсудим, чего конкретно они достигли.

Немного истории #

В начале своего существования BIOS (базовая система ввода/вывода) обеспечивала поддержку базового оборудования, нужного для нормальной работы персональных компьютеров. Запуск тестирования памяти и определение тактовой частоты — именно с этих этапов начинается работа BIOS. Интересно отметить, что в настоящее время не все операционные системы нуждаются в инициализации памяти, но производители продолжают поддерживать эту функцию "в целях безопасности и для лучшей совместимости".

Уже достаточно давно наблюдается парадокс: как у Linux, так и у Windows имеются свои собственные драйверы, однако эта информация игнорируется системой. Сначала идет загрузка, инициируемая BIOS, а затем операционная система снова начинает инициализацию компьютера. Стоит отметить, что "сканирование", выполняемое ОС, проходит намного быстрее работы BIOS. На самом деле, BIOS отбирает у нас значительное количество времени при загрузке, время, которое пользователь мог бы потратить на другие дела.

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

Решение наболевших проблем #

Встает вопрос: как BIOS сможет идентифицировать необходимое ядро, если мы удалим все драйверы устройств, которые там хранятся? Простое решение заключается в том, чтобы задействовать освобожденное пространство для размещения небольшого фрагмента нужного ядра. Для загрузки ему потребуется лишь драйвер, обеспечивающий доступ к диску, на котором будут размещены все последующие загружаемые модули.

Современные BIOS записываются на микросхемы flash-памяти более чем достаточного размера, что делает эту идею удивительно жизнеспособной. Учитывая, что у Linux-разработчиков накоплен огромный опыт в создании декомпрессоров даже для очень сильно сжатых ядер. Именно по этой технологии и построен проект LinuxBIOS.

LinuxBIOS #

Этот проект находится в разработке уже около 7 лет. Изначально он был частью научных изысканий Национальной Лаборатории Лос-Аламоса (Los Alamos National Laboratory) в сентябре 1999 года под руководством Рона Минниха (Ron Minnich). Основной целью данных разработок было обеспечить операционной системе как можно более ранний доступ к полному контролю над загружающимся компьютером.

На текущий момент время загрузки LinuxBIOS составляет менее трех секунд и продолжает улучшаться. Все, что ему требуется – это знание о работе вентилятора, который охлаждает процессор, и о подаче напряжения на процессор. Авторы данного проекта – Джеймс Хендрикс (James Hendricks) и Дейл Вебстер (Dale Webster).

LinuxBIOS предназначен как для настольных компьютеров, так и для серверов и кластеров (по данным разработчиков, кластер из 16 узлов загружается примерно за 10 секунд). Он написан на языке C и не включает ассемблерный код. Более подробную информацию о функционале можно найти на официальном сайте.

Дополнительно стоит отметить, что команда разработчиков постоянно действует над улучшением продукта, и перечень поддерживаемых материнских плат и оборудования регулярно обновляется. Например, третья версия – LinuxBIOS 3 в данный момент находится на стадии альфа-тестирования и, безусловно, будет содержать все необходимые функции для распознавания и совместимости с самым современным оборудованием.

Единственный минус – LinuxBIOS не поддерживает версии Windows, сделанные ранее Windows 2000. Впрочем, сейчас это уже имеет мало значения. Также разработчики не упоминают поддержку Vista, но, видимо, третья версия LinuxBIOS даст ответ на этот вопрос.

Open Firmware #

Open Firmware представляет собой встроенный загрузчик, который на практике заимствовал немало идей из LinuxBIOS. Первоначально этот продукт использовался в системах Sun и Apple, и в основном предназначен для работы с Mac OS, Mac OS X и Solaris, которые самостоятельно функционируют с драйверами. В отличие от LinuxBIOS, он предлагает больше вариантов настройки и возможностей для модификации. Существует мнение, что если бы все производители BIOS начали использовать Open Firmware, это существенно ускорило бы загрузку операционных систем и способствовало бы общему прогрессу.

И в заключение #

Помимо указанных выше версий BIOS, существует множество других решений, однако они не предназначены для свободного распространения. К примеру, comBIOS от Soekris Engineering, который является специфичным и совместим лишь с ограниченным ассортиментом оборудования от этого бренда.

Вполне возможно, что тот день, когда все разработчики и производители материнских плат перейдут на freeware-BIOS, вместо того чтобы отдавать деньги за дорогостоящие решения от известных производителей, станет переломным в компьютерной индустрии. В первую очередь от этого выиграют администраторы серверов, для которых критично время загрузки "подопечных". Для рядового же пользователя все это не столь важно, но, согласитесь, всегда приятно, когда Ваш компьютер вместо минуты будет загружаться секунд за пять, не так ли?

LinuxBIOS: компьютер с Линуксом в сердце

Прошивка LinuxBIOS представляет собой полностью открытую замену для закрытых, проприетарных и, в конечном счете, устаревших BIOS-систем. Некоторые пользователи верят, что вскоре она станет единственной оставшейся базовой системой ввода-вывода в мире.

Причинно-следственная связь

Назвать вещи своими именами нетрудно. Трудно под этим поставить свое имя.

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

Чтобы устранить трудности в взаимодействии с компьютером, была создана вычислительная система, состоящая из нескольких уровней абстракции. Каждый из уровней формирует определённую "виртуальную машину", расположенную над более низкоуровневой абстракцией. Предполагается, что каждая виртуальная машина обеспечивает поддержку той среды, в которой её ключевые абстракции могут восприниматься как аксиоматические. Если данные предположения обоснованы, то такая система считается целостной (integrity); в противном случае её функционирование будет нестабильным, и её называют ненадежной (untrusted).

Таким образом, можно подытожить, что функционирование любой системы напрямую зависит от своего рода фундамента, на котором она построена. К примеру, в 60-х и 70-х годах прошлого столетия предпринимались попытки производства безопасных вычислительных систем путем использования в качестве основы безопасной среды операционной системы. Главным аргументом в пользу этих разработок было использование системных уровней с фундаментом в виде операционной системы, индифферентного аппаратного обеспечения, микропрограмм… Спустя годы стало ясно, что основное внимание уделялось безопасности операционной системы, в то время как фундаменту безопасного управления, лежащему в ее основе, внимания не хватало. (Примером такого фундамента может служить фаза самозагрузки этих самых операционных систем.) В действительности же "безопасные" системы выполняются в среде с установленным "незащищенным" ПО. Одним из возможных способов разрешения вышеописанной проблемы является реализация высокогарантийного процесса начальной загрузки посредством сотрудничества с Open Source проектом LinuxBIOS.

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

"Разработчики персонального компьютера IBM PC считали BIOS вовсе не фундаментальным компонентом своей конструкции, а лишь временной мерой, рассчитанной от силы на 250 тысяч первых машин. Коммерческие BIOS-системы дня сегодняшнего все еще продолжают писаться полностью на ассемблере, загружаться в эмуляционном режиме 8086, запускаться с 16-битными адресами, операторами и операндами. Другими словами, сейчас та же горячая поделка Pentium 4 3,2 ГГц при запуске эмулирует 16-битный 6 МГц процессор, который был, так сказать, современным почти 25 лет назад.

Новые кластерные узлы, созданные на архитектурах PC и Alpha, во время загрузки не зависят от производителя BIOS. Базовая система ввода-вывода, в свою очередь, для загрузки операционной системы использует ненадежные устройства, такие как флоппи-диски или жесткие диски. Стандарт сетевой загрузки, основная идея которого реализована в PXE, также не значительно улучшает ситуацию и не предназначен для работы в крупных кластерных средах.

С каждым новым шагом ситуация становится все сложнее. Даже та довольно простая задача, которая была возложена на BIOS, оказалась, как ни странно, не выполненной. Приведем некоторые примеры: существуют системы ввода-вывода, которые конфигурируют все устройства на материнской плате при помощи единственного прерывания; системы, которые не могут запуститься без подключенной клавиатуры; системы, которые не будут загружены при неверном значении системных часов. Кроме того, в процессе загрузки BIOS программно обнуляет всю основную память, что значительно усложняет диагностику зависаний в операционных системах, так как во время перезагрузки буфер сообщений и образ операционной системы подлежат стиранию.

Еще одна проблема BIOS состоит в невозможности приспосабливания нестандартного аппаратного обеспечения. Что касается эксплуатации систем, то она представляется сущим кошмаром.

Все основные системы, разработанные для процессоров серии Pentium, управляются с помощью программ DOS, при этом настройка конфигурации большинства BIOS для Pentium и всех Alpha-систем осуществляется через клавиатуру и монитор (в некоторых необычных случаях даже с использованием мыши). Абсолютно нецелесообразно взаимодействовать с 1024 "пострадавшими" узлами ПК и загружать DOS на каждом из них для изменения какой-либо единственной настройки BIOS. На данный момент этот неэффективный подход является единственным, принимаемым производителями и поддерживаемым. Такая ситуация совершенно неприемлема для кластеров из 64, 128 или более узлов. Практическим решением может стать поддержка БСВВ кластера через сетевое взаимодействие, управляемое операционной системой – конфигурация и обновление BIOS должны быть возможны из пользовательских приложений ОС. Параметры BIOS должны быть доступны через /proc.

Обобщая, можно Выделить следующее:

  • в настройке памяти наблюдается преобладание субоптимальных решений. Например, некоторые BIOS применяют режим памяти CAS2, который значительно медленнее допустимого CAS3;
  • неправильная конфигурация адресного пространства шины PCI создает уязвимости в безопасности при использовании карт с распределением памяти, таких как Myrinet (был случай, когда одному инженеру пришлось самостоятельно разрабатывать конфигурационный код PCI, так как существующий BIOS не мог корректно обрабатывать структуру шины);
  • неэффективное распределение запросов на прерывания. В некоторых системах один IRQ делится между несколькими устройствами (сказать, что это нецелесообразно — ничего не сказать), что приводит к увеличению времени ожидания;
  • неправильно настроенные таблицы (например, $PIR), в результате чего критически важная информация, необходимая Linux для назначения IRQ, оказывается недоступной;
  • ошибочные идентификаторы в BIOS (например, данные в строке "Mainboard vendor name here" соответствуют производителю BIOS, а не самой материнской платы);
  • невозможность обновить BIOS из среды актуальной ОС (часто для этого требуется использовать DOS-диски; существует вариант загрузки с CD Windows 3.1 и последующий запуск программного обеспечения для обновления);
  • отсутствие возможности сохранения настроек CMOS в процессе обновления BIOS (в такой ситуации рекомендуется записать все параметры на бумаге и затем снова ввести их для каждой машины; в случае системы с 960 узлами без клавиатуры или консоли это занятие может быть крайне затруднительным).

Так просто раскрыв текущее состояние BIOS (по крайней мере, в контексте кластерных систем), мы перейдем к средству, способному составить ей конкуренцию.

Представляем вам — альтернативную BIOS

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

Пропеллер открытого (GPL) проекта LinuxBIOS закрутился зимой 1998 года как часть исследовательской работы в области кластерных решений в лабораториях Cluster Reseach Lab (CRL) и Advanced Computing Laboratory (ACL) при Лос-Аламосской научной лаборатории (Los Alamos National Laboratory — LANL). LANL является научно-исследовательским центром Управления энергетическими исследованиями США; лаборатория основана в 1943 г. и работает под руководством Калифорнийского университета. Что примечательно, в LANL велись работы по созданию первой американской атомной бомбы (кошмар!).

Ответственность за финансирование данных работ лежит на Los Alamos Computer Science Institute и Office of Science Министерства энергетики. Хотя множество людей, включая студентов Джеймса Хэндрикса и Дэйла Уэбстера, принимали участие в реализации и поддержании "проекта", ведущей фигурой был Рон Майннич. Он защитил диссертацию по компьютерным наукам в Пенсильванском университете и до перехода в ACL с 1989 по 1994 годы трудился в центре Supercomputing Research Center; затем, с 1994 по 1999 год, занимался созданием кластеров для компании Sarnoff Corp. в Принстоне, штат Нью-Джерси.

Система LinuxBIOS создана на базе ранней версии ПО FreeBIOS — отдавая дань этому факту, разработчики не стали менять название каталога CVS. Помимо первоначальной мотивации, проект LinuxBIOS был сфокусирован на исключительном улучшении управления большими вычислительными кластерами. Многочисленные разработчики рассматривали LinuxBIOS как средство, обеспечивающее дополнительные характеристики BIOS (наподобие безопасности), а также поддержку различных операционных систем, не ограничиваясь только Linux.

Альтернативный BIOS способен загружать не только ядро Linux, но и различное программное обеспечение: от Etherboot, который представляет собой PROM для нескольких объединенных Ethernet-карт, обеспечивающий удаленную загрузку ядра, до Plan 9 9load, а Включает взаимосвязи типа Myrinet, Quadrix или Scalable Coherent Interface, и использование SSH для загрузки ядра (например, таких технологий как InterMezzo и NFS). Таким образом, термин "LinuxBIOS" охватывает лишь небольшой фрагмент кода с открытым исходным кодом, отвечающего за начальную загрузку системы. Он состоит из 500 строк на ассемблере и 1500 строк на языке C. Не секрет, что по сравнению с использованием простой программы для сетевой загрузки или BIOS в формате PXE, применение настоящей операционной системы для непосредственной загрузки другой системы обеспечивает значительно больше возможностей.

Суть философии управления LinuxBIOS заключается в следующем: "Дайте ядру Linux сделать это" (Let the Linux kernel do it). Иными словами, если Linux способен выполнять определенные задачи, такие как инициализация устройства, то нет необходимости в использовании какого-либо другого программного обеспечения, которое могло бы это сделать.

Было замечено, что часто Linux еще раз делает ту же работу, за которую в любом случае отвечает BIOS. Или, что еще хуже, Linux достаются задачи, которые BIOS в большинстве случаев делает неправильно. Из этого следует, что BIOS должен поручатся тот объем работы, который не в состоянии выполнить ядро Linux. Претворяя эту концепцию в жизнь, LinuxBIOS в то же время является быстрой и небольшой альтернативой (двоичный файл системы занимает 36 Кб, в зависимости от конфигурации).

LinuxBIOS полностью заменяет стандартную коммерческую базовую систему ввода-вывода компьютера, устраняя необходимость в сложной загрузке и настройке. Вместо этого используется упрощенная инициализация аппаратного обеспечения, которая включает установку серийных консолей для предоставления отладочной информации. После инициализации DRAM, LinuxBIOS может продолжить загрузку с использованием кода на языке C, что является значительным улучшением по сравнению с тысячами строк ассемблера x86. Более того, LinuxBIOS способен настраивать регистры типа памяти (Memory Type Range Registers) в процессоре, что позволяет задействовать его кэш и, как следствие, значительно ускоряет выполнение операций. Также LinuxBIOS отвечает за создание таблицы маршрутизации IRQ и инициализацию отдельных компонентов оборудования на материнской плате, таких как IDE-контроллер, клавиатура и южный мост. Как и прежде, выполняется лишь минимальная инициализация, и основная нагрузка по остальному ложится на ядро операционной системы Linux.

После завершения инициализационной ступеньки для обнаружения следующего этапа загрузочного процесса LinuxBIOS просматривает содержимое ROM. При традиционном методе использования LinuxBIOS там должно находиться ядро Linux. Конфигурация такого типа позволяет добиться феноменального результата быстродействия (в своем роде даже рекорда) — отрезок времени от включения питания до получения приглашения интерпретатора команд составляет всего-навсего 3 секунды.

В то же время существуют и иные расширения для LinuxBIOS, которые позволяют полностью реализовать его модульную архитектуру. Одним из самых распространенных является загрузка Etherboot, которая позволяет процессу начальной загрузки извлекать следующий этап загрузки (или другие компоненты, участвующие в дальнейшем расширении процесса загрузки, или финальную операционную систему) из памяти сетевых карт.

LinuxBIOS устанавливается в специальный чип EEPROM (Электронно стираемая программируемая памятная чип), где ранее находился BIOS от производителя. LinuxBIOS полностью заменяет существующую базовую систему, что означает, что после установки альтернативы от "старой" биосовой системы не сохраняется никаких следов. Затем в EEPROM записывается ядро Linux (или другое программное обеспечение), которое выполняет роль загрузчика.

На ядро Linux выбор пал благодаря поддержке им широкого спектра аппаратных средств, которые могут использоваться для того, чтобы двоичным файлам должно было получить возможность дальнейший загрузки операционных систем. Ядро ОС Linux подходит для этой цели, поскольку оно, по большей части, первоначально было написано для функционирования с избежанием потребности в наследственных сервисах BIOS.

Минимизация зависимостей приводит к сокращению числа предоставляемых сервисов, благодаря чему код BIOS становится компактным и лаконичным. Избежав задержек и сложности, характерных для коммерческих базовых систем, разработчики смогли оптимизировать весь загрузочный процесс, уместив его в считанные секунды. Вскоре они заметили, что интерес к системе проявляют не только создатели кластеров, но и широкое сообщество компьютерных энтузиастов. Более того, производители материнских плат всё чаще отказываются от традиционных поставщиков BIOS.

Еще одним резоном в пользу выбора именно ядра Linux является тот факт, что ядро может загружаться с использованием любого устройства, сети, протокола и файловой системы, которые поддерживаются Linux,… и загружать другие операционные системы. Среди средств, позволяющих осуществить данное действие, выделяют TKM, kexec, bootimg, LOBOS (см. врезку "LOBOS, или Линуксу — Линукс!").

Брошюра "Как уложить парашют". Издание второе. Исправленное

Теперь мы перейдем от многообещающей теории к не менее захватывающей практике. Из-за большого разнообразия и множества вариантов реализации "загрузок с использованием LinuxBIOS" описать каждую из них и её особенности в рамках обзорной статьи практически невозможно. Тем не менее, в этом разделе будет рассмотрен наиболее распространенный и стандартный способ применения системы LinuxBIOS — это комбинация LinuxBIOS и ядра Linux.

Сначала убедитесь на сайте проекта, что ваша материнская плата поддерживается. Количество поддерживаемых плат довольно велико, ключевое требование заключается в том, чтобы чип BIOS можно было извлечь из сокета (поскольку вы заменяете физический чип старой BIOS на более емкий чип памяти Disk-on-Chip с LinuxBIOS и ядром Linux).

Disk-on-Chip являются чипами памяти, которые могут форматироваться как стандартные накопители на жестких дисках. DoC — это 8-мегабайтные flash-программируемые устройства, которые устанавливаются в стандартный 32-штырьковый сокет, используемый 2-мегабайтным чипом BIOS. Средняя стоимость таких устройств составляет около $45. Главной причиной использования DoC вместо flash ROM BIOS считается невозможность "вложения" ядра Linux в 2 Мб. Рекомендуется приобрести 32-штырьковый сокет Zero Insertion Force (ZIF), чтобы значительно упростить и обезопасить удаление и вставку BIOS и DoC, поскольку эти операции производятся при включенном питании компьютера.

Простыми словами, можно выделить следующие ключевые шаги для разработки системы LinuxBIOS (здесь представлена лишь базовая информация; если вы стремитесь создать полностью функционирующую систему, рекомендуется обратиться к более детализированным руководствам).

Первый — установка Linux. Кроме базовой системы ОС с поддержкой устройств flash DoC (которую большинство ядер не имеет), требуются также средства разработки ПО — включая пакет Python, использующийся для конфигурирования файлов LinuxBIOS.

Второй этап — компиляция ядра Linux, необходимая для создания системы LinuxBIOS. Этот процесс включает получение правильного исходного кода ядра Linux, его модификацию (примерно десять строк), конфигурацию и сборку. Ядро должно поддерживать MTD (Memory Technology Devices), что обычно не включено в стандартное ядро. Ключевым моментом является наличие поддержки для загрузки модулей, так как при программировании DoC в слоте BIOS материнской платы необходимо выполнять команду перед инициализацией модулей поддержки DoC, и, следовательно, не получится встроить эту поддержку в само ядро.

Третий шаг — получение исходного кода LinuxBIOS. Существует несколько способов получения LinuxBIOS:

  • репозиторий CVS на SourceForge.net (как упоминалось ранее, название проекта — "FreeBIOS", а не "LinuxBIOS");
  • Ежедневно обновляемый архив всего исходного кода;
  • Прямое использование CVS:

Четвертый — конфигурирование и построение загрузочного кода LinuxBIOS для вашей материнской платы. После считанных модификаций конфигурационного файла, соответствующего используемой плате, и некоторых оборудованиезависимых файлов исходного дерева LinuxBIOS следует генерация build-файлов с помощью Python-сценария. Завершает данный этап операция создания образа LinuxBIOS.

На пятом этапе осуществляется замена BIOS-чипа на Disk-on-Chip. Предполагается, что в сокете ZIF уже имеется "предыдущая" версия BIOS. Замена чипа BIOS на DoC производится без отключения питания компьютера, после чего производится запись ядра. Завершающий этап создания системы LinuxBIOS происходит после нажатия кнопки Reset, что инициирует запуск новой — пингвиньей — базовой системы ввода-вывода (об этом свидетельствует отображение изображения пингвина в углу экрана без стандартных сообщений AMI или Award) и загрузку ядра Linux прямо из DoC, вместо привычного метода обращения к "священной корове" прошлого — загрузочного сектора жесткого диска.

Помимо описанного метода, наличествует также и вариант покупки пре-записанных чипов DoC, которые распространяются компаниями Linux Labs, Cluster Labs, CW Linux, i-TECH Corp., Linux NetworX, O.N.E. Technologies — с материнскими платами или без оных.

В настоящее время доступны загрузчики LILO и GRUB, а также операционные системы, такие как Linux, OpenBSD и Windows 2000. Ведутся работы по внедрению загрузки FreeBSD и Windows XP. Предполагается, что усовершенствование поддержки ATA позволит загружать Windows 98 и Windows XP, а добавление поддержки PIRQ — FreeBSD.

Я не могу предоставить вам столько ресурсов…

Автору не удалось найти русскоязычные источники по данной тематике (что, кстати, и послужило причиной для написания статьи). Упоминания о LinuxBIOS встречаются только в кратких новостных материалах о создании кластеров и других высокопроизводительных вычислительных систем на основе Linux.

Ресурс проекта разместился по адресу: www.linuxbios.org (а до недавнего времени находился на сервере

Подождите, идет загрузка.

Алгоритм загрузки linux (BIOS/UEFI)

Если вам интересно узнать как загружается Linux, то эта статья для вас. Рассмотрим алгоритм загрузки Linux на компьютерах с BIOS и UEFI.

Содержание скрыть

Алгоритм загрузки linux (BIOS)

BIOS

BIOS — это аббревиатура от Basic Input/Output System, что обозначает Базовая Система Ввода/Вывода. Данная микросхема расположена на материнской плате ПК.

Когда компьютер только включается, то выполняется код из микросхемы BIOS.Вначале этот код выполняет тестирование системы POST (power-on self test), этим тестированием проверяется аппаратная часть системы. А затем из всех дисков определяется загрузочный.

BIOS способен функционировать исключительно с дисками, разбитыми по схеме MBR. В первом секторе такого устройства располагается MBR (master boot record). Размер сектора составляет 512 байт. В этих 512 байтах размещается небольшой загрузчик и таблица разделов. Стоит отметить, что если диск не является загрузочным, то вместо загрузчика там может находиться код, уведомляющий о том, что данный диск не предназначен для загрузки (No bootable device).

Так вот, BIOSпередает управление маленькому загрузчику из MBRна загрузочном диске.

Загрузчик MBR и GRUB 2

Загрузочный код из MBR имеет небольшие размеры и предназначен только для обнаружения и инициации следующего загрузчика.

Следующий загрузчик больше по размерам и обладает более широкими возможностями. Существует множество загрузчиков для Linux, однако самым распространённым является GRUB 2. Этот загрузчик позволяет пользователю выбрать, какую операционную систему загружать. Кроме того, он способен загружать ОС с логических разделов. GRUB 2 размещается на разделе жёсткого диска в каталоге /boot, и довольно часто этот каталог выделяется на отдельный раздел.

Давайте посмотрим что находится в этом каталоге на Debian:

В данной папке Ubuntu представлена аналогичная информация, однако версия ядра более актуальна:

Разберем некоторые файлы в этом каталоге. Здесь находится:

  • каталог с загрузчиком — grub;
  • ядра различных версий — файлы vmlinuz;
  • архивы с временной файловой системой и утилитами, необходимыми для загрузки ядра — файлы initrd.img;
  • остальные файлы я пока не буду рассматривать.

Когда GRUB 2 получает контроль, он начинает загрузку ядра Linux (файл vmlinuz). При этом GRUB 2 загружает в память файловую систему из файла initrd.img. Затем он инициирует запуск ядра, передавая ему определённые параметры, которые мы обсудим в следующем материале.

Можете задать вопрос, для чего нужен образ корневой файловой системы с утилитами initrd.img? Это необходимо, так как в момент начала загрузки системы корневая файловая система ещё не смонтирована. Поэтому GRUB 2 использует initrd как временную корневую файловую систему, которая загружается из файла в оперативную память.

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

Команда lsinitramfs позволяет просмотреть содержимое файла initrd.img.

Вот пример для Debian:

Вот пример для операционной системы Ubuntu:

Ядро Linux и процесс инициализации

При старте ядро применяет временную файловую систему, находящуюся в файле initrd.img, для завершения процесса загрузки.

А дальше ядро запускает процесс инициализации операционной системы. Процесс инициализации является первым процессом в системе, так как ядро запускалось не как процесс. Каким именно будет процесс инициализации зависит от используемой системы инициализации. Существуют разные системы инициализации, но в Debian 11и Ubuntu 22.04используется система инициализации под названием SystemD.

Итак, первым действием при старте этих двух систем выступает systemd. Для проверки выполним следующие две команды, которые на обеих системах выполняются аналогично:

Первой командой мы смотрим, какой процесс в системе работает под номером 1 — это systemd. Второй командой смотрим на что ссылается файл, который традиционно считается файлом системы инициализации — а ссылается он на /lib/systemd/systemd.

В завершение, система инициализации активирует все другие процессы в данной системе.

Итог по загрузке с BIOS

Алгоритм загрузки linux (UEFI)

В настоящее время BIOS заменён UEFI (Унифицированный Расширяемый Интерфейс Прошивки). UEFI обладает рядом преимуществ по сравнению с BIOS, одной из которых является поддержка GPT.

Раньше диски разбивались на разделы с помощью MBR, при этом диск не мог быть больше 2 TB, а разделов не могло быть больше четырёх. При этом таблица разделов и первичный загрузчик помещались на первый сектор диска в MBR. А GPTпозволяет использовать очень большие диски и помещает загрузчик на специальный раздел, а также позволяет создавать очень много разделов.

Диск, разделенный на секции при помощи таблицы разделов GPT в первом секторе, продолжает содержать запись MBR. Это необходимо для обеспечения совместимости с устаревшими системами, использующими BIOS, чтобы они могли работать с дисками формата GPT.

UEFIне использует загрузчик из MBR, вместо этого используется загрузчик со специального раздела на диске, который отформатирован в FAT32и называется ESPили EFI. Это специальный загрузчик от UEFI. Обычно это файл /efi/boot/bootx64.efi.

Secure Boot

UEFI обладает уникальным режимом, известным как Secure Boot. Когда этот режим активирован, загрузчик без соответствующей подписи не сможет загрузиться. Операционные системы Windows и некоторые дистрибутивы Linux имеют такие подписи, тогда как для других систем может понадобиться отключение этого режима.

Либо можно оставить Secure Boot включенным, но удалить ключи производителя и установить туда ключи, необходимые для загрузчика. Например, в Ubuntu — GRUB 2 имеет подпись от Canonical, именно эту подпись необходимо добавить в Secure Boot.

Дальнейшая загрузка

А дальше все происходит также как и в системах с BIOS. Загрузчик запускает GRUB 2, хотя может сразу запустить и ядро Linux, но тогда мы теряем гибкость GRUB 2.

GRUB 2, в свою очередь, инициирует запуск ядра Linux. После этого ядро запускает процесс инициализации системы. А уже эта система инициирует все оставшиеся процессы в операционной системе.

Итог по загрузке с UEFI

Немного про GRUB 2

GRUB 2в настоящее время является основным загрузчиком для большинства систем Linux. Он позволяет запустить не только ядро Linux, но и Windowsсистему. Он имеет собственную командную строкус помощью которой можно, например устранить некоторые ошибки при загрузки.

Существует две модификации загрузчика GRUB 2: одна предназначена для BIOS, другая – для UEFI. Однако версия для UEFI не включает цифровую подпись, что делает ее несовместимой с режимом Secure Boot.

Кстати, Ubuntu поддерживает механизм Secure Boot. Для этого в системе используется загрузчик Shim, который имеет подпись от Microsoft. Он, в свою очередь, инициирует GRUB 2, подписанный цифровой подписью от Canonical.

Взаимодействуя с GRUB 2при старте системы вы можете выбрать, какую из возможных конфигураций загрузить или изменить:

При появлении меню у вас есть возможность нажать:

  • «Enter» — чтобы сразу же выбрать и загрузить пункт меню;
  • любую другую клавишу — чтобы прервать таймер;
  • «e» — для редактирования текущей записи;
  • «c» — чтобы открыть командную строку GRUB2.

Если ваш тайм-аут установлен на 0, то GRUB 2немедленно загружает систему не показывая подобное меню.

На следующем занятии мы более подробно изучим загрузчик GRUB 2.

Оцените статью
LeeReload
Добавить комментарий