GRUB是最好的引导加载解决方案吗?有没有更简单的选择?


26

我有一些相当糟糕的经历GRUB2。我可以说(已经说过)有关其设计和开发过程的一些讨厌的话。我特别不喜欢它的更新方式:无论出于何种原因,它都必须半自动更新几个脚本-对于每个内核更新,都间接地通过链中的另一个脚本进行更新-或进行许多其他次要的(看似无关的)配置更改。

这与我以前的经验(我LILO正在认真考虑将其还原)的经验直接形成对照,因为我从未遇到过任何问题,并且它的配置非常简单。一方面,正如我记得的那样,每次内核更新时,我只需要更新(或者说,它只曾经更新过)一个简单管理的配置文本文件。

那么,LILO如何在具有当今内核的现代硬件上工作?GRUB如何?其他引导程序如何?我是否必须满足任何先决条件,还是仅仅lilo记得编写配置文件并运行命令,就像我过去记得的那样?内核软件包更新(Debian / Ubuntu)是否像对GRUB2一样更新LILO?


取决于您是否具有EFI固件类型,如果您喜欢并从固件加载linux内核,则可以不这样做。但是您仍然可以将LILO与EFI (无论如何为eLILO)或BIOS结合使用。它在内核源代码树中并得到维护。如果您想知道如何做EFI,我可以回答,但我没有LILO的个人经验,只需知道它可以保存并起作用。
mikeserv

我记得在2010或2011年左右在当时的Core 2 Duo上使用LILO。我猜它应该仍然可以工作(不考虑UEFI等),PC架构并没有太大改变。
Renan 2014年

@mikeserv,请写下您所了解的有关LILO-EFI二重奏的所有信息。欢迎提供有关此主题的任何信息。

我实际上写了一些您可能会在这里早些时候发现有用的文章该文章很快处理了uefi / bios之间的差异。关键是uefi包含一个引导程序,因此grub / lilo /任何东西都是多余的。它通常不包括启动管理器-用于菜单和其他内容-所以我建议您访问rodsbooks.com/refind
mikeserv 2014年

3
仍然是Slackware附带的东西。那不是一个很小的社区。
班德拉米

Answers:


28

埃洛

管理Linux的EFI引导加载程序:使用ELILO

我真的很难决定要复制粘贴的哪一部分,因为这一切都很好,所以我只想请您阅读。

罗德·史密斯

撰写并维护gdiskrEFInd

但是在您开始之前,我想对此发表一点评论。上面的ELILO链接指向UEFI引导的许多页面之一,您可以在Rod Smiths.com撰写的rodsbooks.com上找到该页面。他是一位技术过硬的技术作家,如果您曾经搜索过UEFI引导主题,但最后却不看他的书,那很可能是因为您跳过了前几项结果。

Linux UEFI引导

基本上,Linux内核可以直接由固件执行。

在上面的链接中,他提到了Linux内核的EFI存根加载器 -我认为这是您应该使用的,因为它允许固件本身直接调用linux内核。不管您在做什么,固件都会执行某些操作-听起来好像是在执行某些操作grub。如果固件可以直接加载os内核,那么引导加载程序有什么用?UEFI固件安装由分区表标记为esp的FAT格式的GPT分区,并执行将其保存为板载闪存模块中的UEFI启动变量的路径。因此,您可能要做的一件事是将Linux内核放在该FAT分区上,并将其路径存储在该启动变量中。突然内核是自己的 引导程序。

引导程序

在UEFI系统上,引导加载程序是冗余的-包括ELILO。

引导加载程序旨在解决的问题是BIOS系统仅读取引导标记分区的第一个扇区并执行它。使用512字节内核进行有意义的事情有点困难,因此通常要做的是编写一个微型实用程序,该实用程序可以将文件系统挂载在其中,您可以在其中保存实际内核并对其进行链式加载。

实际上,即使对于引导加载程序而言,512字节通常也不够用。grub例如,实际上,在链式加载内核之前,链式加载实际上是在自身进行链式加载,因为它会将第二阶段插入到引导扇区和文件系统的第一个扇区之间的空白区域。这是一种肮脏的技巧-但它确实有效。

引导经理

但是,为了便于配置,可以在中间进行一些调整。

Rod Smith的rEFInd所做的是作为EFI 应用程序启动-这是一个相对较新的概念。它是一个由磁盘从-固件执行并返回到-固件的程序。rEFInd的作用是允许您管理引导菜单,然后将引导选择返回给固件以执行。它带有UEFI文件系统驱动程序 -因此,例如,您可以在非FAT分区(例如您当前的/boot上使用内核的EFI-stub加载程序它根本就不容易管理-如果根本不需要这样的事情-它将可执行系统内核的简单性添加到可配置引导管理器的便利中。

原子间接

内核不需要符号链接-它可以mount --bind

如果有你的任何路径/,你应该禁止符号链接,它是/boot。在一个孤立的符号链接/boot不是你应该永远必须解决这类问题。尽管如此,还是很普遍的做法是/boot通过几种发行版来建立精心设计的间接寻址(即使这是一个可怕的想法),以便处理就地内核更新和/或多个内核配置。

对于配置为加载文件系统驱动程序(例如,随rEFInd软件包提供)的 EFI系统,这是一个问题,因为FAT总体上是一个相当愚蠢的文件系统,并且无法理解它们。

我个人不使用rEFInd随附的UEFI文件系统驱动程序,尽管大多数发行版都包含可以通过程序包管理器安装的rEFInd程序包,而忘记了仅使用它们自己的糟糕的/boot符号链接配置和rEFInd打包的UEFI文件系统驱动程序。

我的配置

我曾经在上面写过一组说明并将其发布在此处,但看起来像:

% grep esp /etc/fstab && 
> ls /esp/EFI

LABEL=ESP          /esp  vfat defaults      0 1
/esp/EFI/arch_root /boot none bind,defaults 0 0 

arch_root/  arch_sqsh/  arch_xbmc/  BOOT/  ipxe/

因此,我只是把这两行/etc/fstab指向一个我打算包含新的Linux安装目录的文件夹,/boot而我几乎已经担心了整个事情。我还必须做:

cat /boot/refind_linux.conf 

"Arch" "root=LABEL=data rootflags=subvol=arch_root,rw,ssd,compress-force=lzo,space_cache,relatime"

除了refind-efi通过pacman第一个安装软件包之外,这是我需要设置尽可能多的单独安装/配置所需要的全部。请注意,上述字符串的大部分由指定为内核参数的特定于btrfs的安装选项组成。一个更典型的/boot/refind_linux.conf可能看起来像:

"Menu Entry" "root=/dev/sda2"

这就是全部。

rodsbooks.com

如果仍然需要ELILO,则可以在上面的链接中找到安装说明。如果需要rEFInd,则可以在第一段中找到指向它的链接。基本上,如果您想进行任何UEFI引导配置,请先阅读rodsbooks.com


3

我用LILO代替GRUB2。老实说,这不是我的选择-在Debian Live CD安装程序中GRUB2安装失败,但是可以选择成功安装LILO。我有2岁的笔记本电脑正在运行Debian Stable。LILO为我完美地工作。


1

LILO仍然可用的,即使有UEFI的BIOS。UEFI通常可以直接加载Linux内核。不过,这取决于UEFI本身。

但是,如果确实需要引导选择屏幕,例如,如果要在一台计算机上引导到多个OS,则可以使用小型引导程序。

不过,我会考虑使用EXTLINUX。它是SYSLINUX的一种变体,但是它位于ext-type分区中。

EXTLINUX的优点在于,尽管它比LILO更具扩展性且具有更多选择,但它可以变得简单,并且可以得到积极维护。


-1(deb / ubuntu)内核软件包不会更新EFI。(EFI不会阅读支持符号链接的fs,因此您不能仅使用我的答案)。EXTLINUX的+1是LILO的较新选择。您的链接显示它支持其他几个文件系统,这是一个好兆头。不过,在必要的地方,EFI支持看起来有些新。
sourcejedi 2014年

@sourcejedi-你错了。加载了正确的EFI文件系统驱动程序的EFI系统可以轻松处理符号链接。
mikeserv

由于某些原因,似乎禁止直接链接到syslinux.com。
polemon 2014年

我知道@mikeserv,但是在大多数情况下加载文件系统驱动程序令我有些困惑。您甚至需要安装某种EFI脚本(术语?)来加载驱动程序,然后加载内核。哦,我敢打赌,没有人为这些驱动程序提供MS安全启动签名,所以这是另一个蠕虫病毒:p。
sourcejedi 2014年

@sourcejedi-您能阅读我在这里写的答案吗?是的-您将需要一些加载驱动程序的方法。
mikeserv

1

我不记得的任何等效功能update-grub。但是,Debian仍然支持较旧的系统。(它用于我的ARM服务器上的uboot)。

最新的内核与链接/boot/vmlinuz并初始化/boot/initrd.img。它由内核软件包更新。引导加载程序指向这些引导加载程序,并在每次引导时取消引用符号链接。

因此,您很可能无法获得恢复选项。无论如何,这都不是经过最广泛测试的选项,因此,建议将工作启动盘放在:-)周围。


更新:如果您的目标不是在现代计算机上实际运行LILO之外,则可能还有更好的选择,如此处其他答案所述:)。

以上内容仅适用于基于BIOS的LILO原始版本。如果您不希望安全启动或从同一菜单启动Windows 8,现代硬件的确在EFI之上提供了BIOS兼容性。从理论上讲,您可以使ELILO正常运行,但它不支持安全启动或加载Windows8。一般而言,ELILO不再有意义,因此我想背后没有太多社区。


啊。输入/来自符号链接/boot是任何问题的肮脏解决方案。
mikeserv

welp lilo已死(并且不赞成uboot),是的。您想到的是什么问题?人们还没有将FAT用于/boot。BootLoaderSpec是一个很好的项目,但实际上还没有。
sourcejedi 2014年

那是一个很好的编辑。
mikeserv 2014年
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.