我有过一些相当糟糕的经历GRUB2
。我可以说(并说过)关于其设计和开发过程的一些令人讨厌的事情。我特别不喜欢它的更新方式:无论出于何种原因,它必须半自动更新几个脚本 - 一个脚本通过链中的另一个脚本间接更新 - 对于每个内核更新 - 或许多其他次要更新(并且看似无关)配置变更。
这与我之前的经历形成鲜明对比LILO
- 我正在认真考虑恢复 - 因为我从来没有遇到过任何问题,而且它的配置非常简单。一方面,据我所知,我只需更新(或者更确切地说,它只更新过)每个内核更新都有一个易于管理的配置文本文件。
那么 LILO 如何在具有当今内核的现代硬件上工作呢? GRUB 是怎样做的?其他引导加载程序如何?我是否必须满足任何前提条件,或者只是lilo
像我以前记忆中那样编写配置文件并运行命令?内核包更新 (Debian/Ubuntu) 是否会像更新 GRUB2 一样更新 LILO?
答案1
埃利洛
管理 Linux 的 EFI 引导加载程序:使用 ELILO
我真的很难决定复制+粘贴其中的哪一部分,因为这一切都非常好,所以我只是请您阅读它。
罗德·史密斯
创作并维护两者gdisk
和rEFInd
。
但在你这样做之前我想对此发表一些评论。上面的 ELILO 链接是您可以找到的有关 UEFI 启动的众多页面之一rodsbooks.com由罗德·史密斯撰写。他是一位颇有成就的技术作家,如果您曾经在 google 上搜索过 UEFI 启动主题,但最终没有阅读他的内容,很可能是因为您跳过了前几个结果。
Linux UEFI 启动
基本上,Linux内核可以直接由固件执行。
在上面的链接中他提到了Linux 内核的 EFI 存根加载器- 在我看来,这是你应该使用的,因为它允许固件本身直接调用 Linux 内核。不管你在做什么某物正在由固件执行 - 听起来好像有什么东西正在执行grub
。如果固件可以直接加载你的操作系统内核,那么引导加载程序有什么用呢? UEFI 固件挂载标记为 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 包提供的)因为 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第一的。
答案2
我使用 LILO 而不是 GRUB2。老实说,这不是我的选择——在 Debian Live CD 安装程序中 GRUB2 安装失败,但随后可以选择安装 LILO,结果成功。我有 2 年的笔记本电脑,运行 Debian Stable。 LILO 对我来说完美无缺。
答案3
LILO 仍然是即使使用 UEFI BIOS 也可用。 UEFI通常可以直接加载Linux内核。不过,这取决于 UEFI 本身。
但是,如果您确实需要引导选择屏幕,例如,如果您要引导到一台计算机上的多个操作系统,那么小型引导加载程序可能会很方便。
我会考虑使用外部Linux相反,不过。它是 SYSLINUX 的一个变体,但它驻留在ext
-type 分区中。
EXTLINUX 的美妙之处在于,虽然它比 LILO 更具可扩展性并且具有更多选项,但它也可以同样简单,并且得到积极维护。
答案4
我编码了grub 智能,这使得 GRUB 自动找出其最佳配置。