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

31 grub2 lilo

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

这与我之前的经历形成鲜明对比LILO——我正在认真考虑恢复——因为我从来没有遇到过任何问题,而且它的配置非常简单。一方面,正如我所记得的,我只需要更新(或者更确切地说,它只更新过)每个内核更新的单个、简单管理的配置文本文件。

那么 LILO 如何在具有当今内核的现代硬件上工作?GRUB 是怎么做的?其他引导加载程序如何?我是否必须满足任何先决条件,还是只是编写配置文件和运行lilo命令,因为我在过去深情地记得它?内核包更新 (Debian/Ubuntu) 是否会像 GRUB2 一样更新 LILO?

mik*_*erv 35

埃利洛

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

我真的很难决定复制+粘贴其中的哪一部分,因为它们都非常好,所以我只会请您阅读。

罗德·史密斯

编写和维护gdiskrEFInd

但在你做之前,我想评论一下。上面的 ELILO 链接是关于 UEFI 引导的许多页面之一,您可以在Rod Smith 编写的rodsbooks.com 上找到。他是一位多才多艺的技术作家,如果您曾经在谷歌上搜索过 UEFI 启动的主题,但最终没有阅读他的一些内容,那很可能是因为您跳过了前几个结果。

Linux UEFI 启动

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

在上面的链接中,他提到了Linux 内核的 EFI 存根加载程序- 在我看来,这是您应该使用的,因为它允许固件本身直接调用 linux 内核。无论您在做什么,固件都在执行某些操作 - 听起来有些东西是grub. 如果固件可以直接加载您的操作系统内核,那么引导加载程序有什么用?UEFI 固件挂载一个由分区表标记为esp的 FAT 格式的 GPT 分区,并在那里执行一个路径,它已在板载闪存模块中保存为 UEFI 引导变量。因此,您可以做的一件事是将 linux 内核放在该 FAT 分区上,并将其路径存储在该引导变量中。突然内核是自己的 引导程序。

引导加载程序

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

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

事实上,即使对于引导加载程序,512 字节通常也不够。grub例如,实际上在链加载内核之前先链加载自身,因为它将第二阶段楔入引导扇区和文件系统第一个扇区之间的空白空间。这是一种肮脏的黑客攻击 - 但它奏效了。

引导管理器

不过,为了便于配置,一些中间人可能会很有用。

Rod Smith 的 rEFInd 所做的是作为 EFI应用程序启动——这是一个相对较新的概念。它是一个由磁盘执行并返回到固件的程序。rEFInd 的作用是让您管理启动菜单,然后将您的启动选择返回给固件以执行。它带有 UEFI 文件系统驱动程序- 例如,您可以在非 FAT分区(例如您当前的/boot. 管理起来非常简单——如果有必要的话——并且它增加了可执行系统内核的简单性和可配置引导管理器的便利性。

原子间接

内核不需要符号链接——它可以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/
Run Code Online (Sandbox Code Playgroud)

所以我只是把这两行放在我/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"
Run Code Online (Sandbox Code Playgroud)

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

"Menu Entry" "root=/dev/sda2"
Run Code Online (Sandbox Code Playgroud)

这就是全部。

棒书网

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