Как Linux / xBSD загружался до GRUB?

23

Согласно Википедии , GRUB был выпущен в 1995 году. К этому моменту Linux и xBSD существовали несколько лет. Я знаю, что ранние версии Unix были привязаны к оборудованию в 70-х и 80-х, но Linux и xBSD можно было свободно распространять и устанавливать. Возникает вопрос, как бы вы тогда загружали Linux? Поставлялись ли дистрибутивы с собственными реализациями загрузчиков?

Сергей Колодяжный
источник
32
Хм ... Вас не было, когда LILO был единственным загрузчиком Linux? И я никогда не использовал ни LILO, ни Grub в своих системах BSD. Какой из них вас интересует? См , например biosboot(8).
Кусалананда
8
@Kusalananda К сожалению, я больше заботился об игрушках и рисовании черепашек ниндзя, чем о трубах, экзеках и снарядах :) Меня интересует общая история, а не конкретный загрузчик. На странице, на которую вы ссылаетесь, я вижу, что OpenBSD имеет biosbootдве архитектуры: i386 и amd64. Означает ли это, что OpenBSD должен был нацеливаться на архитектуру, а не на один, объединяющий инструмент?
Сергей Колодяжный
1
Загрузчик первого этапа будет разным для каждой архитектуры (в любом случае, только i386 и amd64 имеют BIOS «bios»). Посмотрите на NetBSD, если вам интересны более экзотические архитектуры, чем стандартный болотный ПК.
Кусалананда
3
@Kusalananda Я не думаю, что LILO когда-либо был единственным загрузчиком Linux. Насколько я знаю, загрузчик, встроенный в образы ядра, предшествовал LILO, и к тому времени, когда поддержка встроенного загрузчика была прекращена, вокруг было по крайней мере несколько других загрузчиков.
Касперд
2
LILO был загрузчиком по умолчанию для большого количества дистрибутивов вплоть до начала 2000-х
phuclv

Ответы:

51

Первый дистрибутив Linux, который я использовал еще в 90-х годах ( Slackware 3.0IIRC), использовал LILO в качестве загрузчика. И многие дистрибутивы использовались LILOгодами, даже когда GRUBстановились загрузчиком по умолчанию.

Более того, в первые годы существования Linux было принято загружать Linux с другой ОС (например, DOS или Windows) вместо того, чтобы полагаться на загрузчик / двойную загрузку. Например был loadlin .

Не забудьте Syslinux , более простой загрузчик, который часто используется для самостоятельной загрузки с USB-диска. Или Isolinux (из того же проекта), используемый многими " живыми " дистрибутивами.

Имейте в виду, что сегодня GRUBможно использовать для загрузки многих операционных систем, хотя LILOбыл более ограниченным и специально предназначенным для Linux (например, LInux LOader), с некоторой поддержкой двойной загрузки для Windows.
GRUBочень полезен для двойной / множественной загрузки из-за множества настраиваемых параметров, возможностей сценариев и т. д.
Если вы просто хотите, чтобы одна ОС на вашем компьютере была «любой» (т. е. какой бы загрузчик не использовался по умолчанию для вашего дистрибутива Linux / BSD), быть достаточным.

Мистер Шунц
источник
5
@MrShunz: тогда не было UEFI. Загрузка Windows был только вопрос добавления записи о , например , other=/dev/hda1с table=/dev/hdaк lilo.confи LILO просто передать управление на загрузочный сектор на hda1, зная таблицу разделов будет на HDA.
ниндзя
2
Вы привыкли получать NTLDR для загрузки LILO; см. jaeger.morpheus.net/linux/ntldr.php ; Я обнаружил то же самое независимо назад.
Роджер Липскомб
2
Недостатком подхода LILO является то, что он ломается, если расположение диска с файлами для загрузки изменяется. В частности, это означает, что LILO необходимо перезаписывать в загрузочную папку (MBR или загрузочный сектор раздела) после каждого обновления ядра.
plugwash
1
@plugwash: GRUB имеет ту же проблему с файлом второй стадии. Разница здесь в том, что 1) «вторая стадия» LILO была ядром, так что это были обновления ядра, а не обновления LILO, которые сломали вещи; и 2) обновления GRUB включают в себя автоматическую перезапись местоположения второго этапа в MBR (со вторым этапом, затем загрузка ядра Linux, с полным знанием файловой системы, поэтому местоположение ядра не имеет значения). ;-)
DevSolar
1
IIRC grub по возможности будет хранить «этап 1.5», который понимает файловую систему между MBR и первым разделом, и будет прибегать к хранению ссылки на конкретные сектора файловой системы только в том случае, если на этапе 1.5 нет места (или если он устанавливается в загрузочный сектор раздела, а не MBR)
plugwash
28

LILO был стандартом де-факто для загрузки Linux на ПК до Grub с самого раннего этапа (его использовал MCC, один из первых дистрибутивов Linux). Различные другие загрузчики использовались одновременно. Loadlin был довольно распространенным явлением; он загружал Linux из DOS и даже использовался в некоторых конфигурациях umsdosдля размещения среды Linux в файловой системе DOS ... Другая распространенная конфигурация вообще не включала загрузчик: ядро ​​могло загружаться с дискеты, и большинство Пользователи Linux сохранили заведомо неплохую пару «загрузочных и корневых» дискет, одна из которых содержит ядро, а другая - базовую корневую файловую систему для целей спасения.

Существовал несколько способов использования загрузчиков других операционных систем для загрузки Linux; например, менеджер загрузки OS / 2 или NTLDR в Windows NT.

Другие системы имели свои собственные загрузчики:

  • SILO на SPARC (рабочие станции Sun и другие);
  • PALO на PA-RISC (рабочие станции HP);
  • YaBoot и Quik на PowerPC;
  • aBoot и MILO на Альфе ...

Даже в наши дни Grub - не единственный загрузчик, который вы увидите. Хотя загрузка ядра непосредственно с дискеты больше не очень полезна (я не проверял, возможно ли это по-прежнему, предполагая, что вы можете собрать ядро ​​достаточно маленькое, чтобы поместиться на дискету), оно может загружаться непосредственно с EFI (который фактически является его собственная небольшая операционная система, предназначенная для загрузки других операционных систем, таких как Grub). Во многих небольших системах (встроенные системы, одноплатные компьютеры ...) вы найдете U-Boot . (И есть также слой EFI для U-Boot .)

Стивен Китт
источник
Архитектура PowerPC также интересна тем, что на некоторых материнских платах был установлен полный по Тьюрингу BIOS - Openfirmware (в основном язык программирования Forth с некоторыми предустановленными функциями). Это позволило загружаться напрямую из BIOS без загрузчика, если вы знаете, как настроить BIOS
slebetman
Эй, просто любопытно, NTLDR может загружать ядро ​​Linux напрямую? Я слышал, что NTLDR может загрузчик цепей grub4dos, а затем загрузить ядро ​​Linux.
德里克 薯条 德里克
@slebetman: Точнее, OpenFirmware была разработана Sun для SPARC, а затем принята альянсом PowerPC (IBM, Apple, Motorola) для эталонной архитектуры PowerPC и, в частности, Apple для Macintosh на основе PowerPC. Одним из важных аспектов было то, что простые драйверы могли храниться в микросхемах ПЗУ на платах расширения или в некоторой назначенной загрузочной области жесткого диска, и, поскольку они были записаны в байт-коде для известного указанного ABI, они будут работать независимо от того, какой ЦП архитектура и ОС, которую вы пытались загрузить.
Йорг Миттаг
Например, у вас может быть адаптер RAID с драйвером OpenFirmware внутри микросхемы ПЗУ, тогда среда OpenFirmware может использовать этот драйвер для доступа к RAID, внутри RAID может существовать другой драйвер для формата таблицы разделов, который позволит среде OFW чтобы найти разделы, в начале каждого раздела был бы драйвер OFW для файловой системы, который позволял бы системе OFW находить ядро, и ядро ​​вначале имело бы небольшой загрузчик, написанный в байт-коде OFW.
Йорг Миттаг
GRUB может работать аналогичным образом, но разница в том, что все эти драйверы должны быть написаны специально для GRUB, в то время как прелесть OFW заключалась в том, что устройство принесло с собой свои драйверы, а это означает, что даже устройства, которые еще не были существовать, когда среда OFW была написана, было бы просто «волшебно». UEFI также может работать аналогичным образом, но его «формат переносимого байт-кода» по сути является подмножеством DOS, что является основной причиной, по которой Itanium все еще нуждается в эмуляторе x86.
Йорг Миттаг
12

До середины ядра 2.6 ядро ​​x86 можно было загружать напрямую, если оно было скопировано на дискету (как если бы это был образ диска).

Это был, по сути, оригинальный способ загрузки Linux.

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

Джошуа
источник
2
С другой стороны, ядро ​​x86 теперь может загружаться напрямую, если используется встроенное ПО UEFI. Таким образом, перед ядром
закреплен заглушенный
@ Grawity: Вы уверены, что не имеете в виду x64?
Джошуа
1
@ Джошуа: Я не уверен, что ты имеешь в виду под этим. EFI на самом деле не выполняет эту часть как код.
Гравитация
2
@ Джошуа что? Это «DEC BP», «POP DX» в 16-битном режиме (EBP / EDX в 32-битном режиме). Но это не должно выполняться в любом случае; Двоичные файлы EFI представляют собой PE-файлы (что, разумеется, не имеет значения, если они записаны в загрузочный сектор ...).
Стивен Китт
1
@ Джошуа: ОК, но это не неопределенное поведение x86, на мой взгляд ;-). (Я думаю о «неопределенном поведении x86» как о кодах операций, поведение которых не определено, а не неопределенное поведение платформы.)
Стивен Китт
5

Я начал с Linux в конце 90-х и, как уже упоминалось, liloбыл по умолчанию. Если вы хотите выполнить двойную загрузку с системой DOS, вы можете выполнить «чистую» загрузку, не загружая что-либо в HIMEM, не загружая драйверы CD и т. Д., И использовать loadlin. Для двойной загрузки Win95 вы можете сначала сделать загрузочный диск с DOS, а затем установить '95, и загрузчик 95 'позволит вам по-прежнему загружать ядро ​​DOS, а затем вы можете использовать loadlin.

Для двойной загрузки с NT4 хитрость заключалась в том, чтобы записать LILO в /раздел, затем удалить первые 512 байт с помощью dd( dd if=/dev/sda2 of=/path/to/file bs=512 count=1) и поместить полученный файл туда, где его ntldrможно было увидеть, и вы могли использовать его из загрузчика WinNT. Проблема с этим заключается в том, что при обновлении ядра вы должны были помнить, что перед перезагрузкой нужно повторить все шаги, иначе у вас возникнут проблемы с возвратом в систему Linux. Тот же процесс работал с Win2k.

С LILO каждый раз, когда ядро ​​обновлялось, вы должны были помнить об обновлении LILO.

В loadlinлюбое время, когда ядро ​​обновлялось, вы должны были не забывать копировать ядро ​​в раздел DOS.

Еще один вариант, на который намекают другие ответы, - записать ядро ​​напрямую на дискету, используя dd if=/path/to/vmlinuz of=/dev/fd0НО, чтобы корневое устройство было правильно настроено в ядре, либо во время компиляции, либо с помощью rdevутилиты.

Когда GRUBпришло время, было много радости, потому что вам больше не нужно было вспоминать об обновлении LILO или обновлении LILO и лишении информации о загрузке, и т. Д. Больше не оставалось ничего из вашей системы Linux, потому что вы забыли обновить загрузчик Информация...

ivanivan
источник
Похоже, тогда было много работы и большой шанс остаться без загрузочной машины, но определенно с образовательным опытом
Сергей Колодяжный
@SergiyKolodyazhnyy, да, и в интернете не было такого большого количества информации или отличных поисковых систем, чтобы найти ее, если она там была. Было несколько загрузочных дистрибутивов с гибкими дисками, на которых было достаточно Linux для загрузки и исправления LILO и т. Д. Мы прошли долгий путь!
ivanivan
Запуск make installбудет работать /sbin/lilo, так что вам не нужно ничего обновлять вручную (и это все еще может иметь место, если вы liloустановили). Это может быть вопросом мнения, но я не помню особой радости grub, напротив. И lilo(по крайней мере, его версия 1999 года) может отлично работать с двумя загрузочными окнами loadlin.
Мосви
0

А до LILO и GRUB вам приходилось запускать его из командной строки с помощью какой-то специальной утилиты загрузчика.

Как пример, у Amiga был доступный Linux. Вы должны были использовать утилиту командной строки под названием amiboot, чтобы загрузить ядро ​​ELF в память и перейти к нему.

Вот видео, где кто-то использует amiboot из командной строки для запуска linux на Amiga 600 . Его скрипт StartInstall вызывает исполняемый файл amiboot. Вы можете наблюдать за конфигурацией памяти amiboot, определять желаемый адрес загрузки и передавать параметры ядру в 0:55.

BoredBsee
источник