在GRUB之前Linux / xBSD是如何启动的?


23

根据Wikipedia的说法,GRUB于1995年发布。那时Linux和xBSD已经存在了几年。我知道Unix的早期版本是在70年代和80年代与硬件联系在一起的,但是Linux和xBSD可以自由分发和安装。哪个引发了一个问题,那您将如何重新引导Linux?发行版是否附带了自己的引导加载程序实现?


32
嗯... LILO是唯一的Linux引导程序时您不在吗?而且我从未在BSD系统上使用LILO或Grub。您对哪一个感兴趣?参见例如biosboot(8)
库萨兰达

8
@Kusalananda不幸的是,那时我更关心玩具和绘画忍者神龟,而不是管道,高管和炮弹:)我对一般历史感兴趣,而不是特定的引导程序。在您链接的页面上,我看到OpenBSD具有biosboot两种体系结构,即i386和amd64。这是否意味着OpenBSD专门针对架构而不是拥有一个统一的工具?
Sergiy Kolodyazhnyy

1
每种架构的第一阶段引导程序都将有所不同(仅i386和amd64始终具有“ BIOS” BIOS)。如果您对标准的PC以外的其他奇特的体系结构感兴趣,请查看NetBSD。
库萨兰达

3
@Kusalananda我认为LILO并不是唯一的Linux引导程序。据我所知,内置于内核映像中的加载器早于LILO,并且到内置加载器的支持被停止使用时,至少还有其他一些自举程序。
卡巴斯德

2
LILO是许多发行版的默认引导加载程序,直到2000年代初
phuclv

Answers:


51

我在90年代(Slackware 3.0IIRC)使用的第一个Linux发行版使用LILO作为引导程序。LILO即使GRUB成为“默认”引导程序,许多发行版也使用了多年。

此外,在Linux的早期,通常是从另一个OS(即DOS或Windows)启动Linux,而不是依赖于Bootloader /双重启动。例如,有loadlin

别忘了Syslinux,它是一个更简单的引导加载程序,通常用于USB自引导安装/恢复发行版。或许多“ Live”发行版使用的Isolinux(来自同一项目)。

请记住,今天GRUB可以用来加载许多操作系统,尽管功能LILO有限,并且特别针对Linux(即LInux LOader),并支持对Windows的双重引导。
GRUB由于它具有许多可配置的选项,脚本功能等,因此对于双/多引导非常有用。
如果您只希望计算机上的任何操作系统为“ any”(即,Linux / BSD发行版中的默认引导加载程序),足够。


5
@MrShunz:那时没有UEFI。启动Windows只是加入如条目的问题other=/dev/hda1table=/dev/hdalilo.conf,和LILO只想在hda1的控制转移到引导扇区,知道分区表会在HDA。
ninjalj

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是在Grub之前很早就在PC上引导Linux的事实上的标准(MCC是最早的Linux发行版之一,使用它)。同时使用了其他各种引导程序。Loadlin很常见。它从DOS引导Linux,甚至在某些配置中用于在umsdosDOS文件系统中托管Linux环境。另一种常见配置根本不涉及引导加载程序:内核可以从软盘引导自身,而大多数Linux用户保留了一对已知良好的“引导和根”软盘,其中一个包含内核,另一个包含用于救援目的的基本根文件系统。

也有多种使用其他操作系统的引导程序来引导Linux的方法。例如,OS / 2的启动管理器或Windows NT的NTLDR。

其他系统具有自己的引导程序:

  • SPARC上的SILO(Sun工作站等);
  • PA-RISC上的PALO(HP工作站);
  • PowerPC上的YaBoot和Quik;
  • Alpha上的aBoot和MILO ...

即使是现在,Grub也不是您会看到的唯一引导程序。虽然直接从软盘引导内核不再有用(我还没有检查过是否仍然可行,假设您可以构建一个足够小以适合软盘的内核),但它可以直接从EFI引导(实际上是通过EFI引导)自己的小型操作系统,旨在加载其他操作系统,例如Grub)。在许多较小的系统(嵌入式系统,单板计算机...)上,您会找到U-Boot。(还有一个用于U-Boot的EFI层。)


PowerPC体系结构也很有趣,因为有些主板具有图灵完备的BIOS-Openfirmware(基本上是带有某些预装功能的Forth编程语言)。如果您知道如何配置BIOS,则可以直接从BIOS引导而无需引导加载程序
slebetman

嘿,只是好奇,NTLDR可以直接加载linux内核吗?我听说NTLDR可以chainloader grub4dos,然后加载linux内核。
炸鱼薯条德里克

@slebetman:更确切地说,OpenFirmware由Sun为SPARC开发,然后由PowerPC联盟(IBM,Apple,Motorola)采用,用于PowerPC参考体系结构,特别是由Apple用于基于PowerPC的Macintoshs。功能强大的方面之一是,可以将简单的驱动程序存储在扩展卡上的ROM芯片内,或存储在HDD的某些指定引导区中,并且由于它们是针对已知的指定ABI以字节码编写的,因此无论使用哪个CPU,它们都可以工作您尝试引导的体系结构和操作系统。
约尔格W¯¯米塔格

例如,您可能有一个RAID适配器,该适配器在ROM芯片中具有其OpenFirmware驱动程序,那么OpenFirmware环境可以使用该驱动程序访问RAID,在RAID内部,可以有另一个用于分区表格式的驱动程序,这将允许OFW环境为了找到分区,每个分区的开头是文件系统的OFW驱动程序,这将允许OFW系统查找内核,并且内核在开头将具有一个用OFW字节码编写的小型引导程序。
约尔格W¯¯米塔格

GRUB可以类似的方式运行,但是不同之处在于,所有这些驱动程序都必须专门为GRUB编写,而OFW的优点在于该设备将随其驱动程序一起提供,这意味着即使尚未使用该驱动程序的设备编写OFW环境时存在的存在只会“神奇地”工作。UEFI也可以类似的方式运行,但是它的“便携式字节码格式”本质上是DOS的子集,这就是Itaniums仍然需要x86模拟器的主要原因。
约尔格W¯¯米塔格

12

直到2.6中期内核,如果将x86内核复制到软盘上(就像它是磁盘映像一样),就可以直接启动。

实际上,这是引导Linux的原始方法。

如果今天查看x86内核的标头,您会看到一条错误消息,提示从类似的软盘启动将不再起作用。


2
另一方面,如果将x86内核分配给UEFI固件,则可以直接启动。因此,内核前面仍然有一个
桩头

@grawity:您确定不是x64吗?
约书亚

1
@约书亚:我不确定你的意思。EFI实际上并不将此部分作为代码执行。
grawity

2
@约书亚是什么?16位模式为“ DEC BP”,“ POP DX”(32位模式为EBP / EDX)。但是无论如何都不应该执行它。EFI二进制文件是PE文件(如果将其写入引导扇区,这当然没有关系...)。
Stephen Kitt

1
@Joshua好的,但是在我看来这不是未定义的x86行为;-)。(我认为“未定义的x86行为”是行为未定义的操作码,而不是未定义的平台行为。)
Stephen Kitt

5

我在90年代后期开始使用Linux,并且lilo默认情况下是提到的。如果要使用DOS系统进行双重引导,则可以执行裸引导,而无需将东西加载到HIMEM中或加载CD驱动程序等,然后使用loadlin。对于Win95双重引导,您可以先使该驱动器通过DOS启动,然后再安装'95,而'95的引导加载程序将使您仍然引导DOS内核,然后可以使用loadlin

对于使用NT4进行双重引导,诀窍是将LILO写入/分区,然后使用dddd if=/dev/sda2 of=/path/to/file bs=512 count=1)剥离前512个字节,然后将生成的文件放在ntldr可以看到的位置,然后可以从WinNT的引导加载程序中使用它。这样做的问题是,当您升级内核时,必须记住在重新引导之前重复所有步骤,否则您将遇到重新进入Linux系统的问题。Win2k使用相同的过程。

使用LILO,无论何时更新内核,您都必须记住要更新LILO。

随着loadlin随时更新的内核,你必须记得内核进行复制到DOS分区。

其他答案中暗示的另一种选择是使用dd if=/path/to/vmlinuz of=/dev/fd0BUT 将内核直接写入软盘,但必须在编译时或使用rdev实用程序在内核中正确设置根设备。

GRUB到来的时候,有大家欢欣鼓舞,因为你不再需要记住更新LILO或更新LILO和再剥掉引导信息等没有更多获取左Linux系统,因为你忘了更新的引导装载程序信息...


听起来当时的工作量很大,而且很可能会留下无法启动的机器,但这绝对是一种教育体验
Sergiy Kolodyazhnyy

@SergiyKolodyazhnyy是的,互联网上没有那么多的信息,或者没有强大的搜索引擎来找到它。有几个单软盘救援发行版仅具有足够的Linux来引导和修复LILO等。我们已经走了很长一段路!
ivanivan

运行即可make install运行/sbin/lilo,因此您实际上不需要手动进行任何更新(如果已经lilo安装,情况仍然会如此)。也许这是一个见解,但grub与此相反,我不记得有多少欢欣鼓舞。并且lilo(至少是其1999年版本)可以很好地使用双启动窗口,而无需安装loadlin
mosvy

0

在LILO和GRUB之前,您必须使用某种自定义的引导加载程序实用程序从命令行启动它。

例如,Amiga可以使用Linux。您必须使用名为amiboot的命令行实用程序将内核ELF加载到内存中并跳转到它。

这是一个从命令行使用amiboot 在Amiga 600上启动linux的人的视频。他的StartInstall脚本正在调用amiboot可执行文件。您可以观看amiboot配置内存,找出所需的加载地址,然后在0:55左右将参数传递给内核。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.