为什么 GRUB 2 启动速度这么慢?

为什么 GRUB 2 启动速度这么慢?

我有一个小型的定制嵌入式 Linux 发行版(使用 OpenEmbedded 创建),它使用 GRUB 1.99 启动。目的是让它快速启动。

目前它说:

GRUB loading.

约 2 秒以上(这可能是不可避免的)。然后:

Welcome to GRUB!

当它完成加载时,在它下面停留一小会儿。

(没有菜单或菜单超时。)它会清除屏幕,然后:

Booting 'Disk'

约 8 秒。这种延迟似乎是可以避免的。我很想知道如何才能不耽误这里。

然后它继续:

Decompressing Linux... Parsing ELF... done.
Booting the kernel.

然后当内核启动时会出现大量快速滚动的文本。

内核镜像文件为1.8MB,磁盘镜像文件为16MB。

grub.cfg文件如下所示:

set default="0"
set timeout=0

menuentry "Disk" {
    set root=(hd0,1)
    linux /boot/Disk.kernel parport=0x378,7,3 ramdisk_size=16384 root=/dev/ram rw
    initrd /boot/Disk.ext2
}

在我的另一个启动盘(在紧凑型闪存卡上)中,我有完全相同的内核和不同的磁盘映像文件,大小为 20MB。配置文件也相同,只是 ramdisk_size=20480。这一次在同一点上有 69 秒的极长延迟。为什么这么长?值得庆幸的是,我不需要经常使用该启动盘。但最好也解决这个问题,因为延迟可能是由同一件事引起的。

我该如何解决这个延迟问题?它在做什么?如何调试引导加载程序?是否值得考虑像 SYSLINUX 这样的轻量级引导加载程序?删除一些未使用的 GRUB 2 模块会改善它吗? (如何找到哪些模块未使用?)

概括

以下所有版本都具有完全相同的 Linux 3.2 内核:
闪存盘A在计算机 X 上:16MB 映像,GRUB 1.99,启动延迟约为 8 秒; A盘的读取速度为20MB/s。
闪存盘B在计算机 X 上:20MB 映像,GRUB 1.99,启动延迟为69s; B盘的读取速度为20MB/s。

闪存盘C在计算机 Y 上:16MB 映像,GRUB 0.97,启动延迟非常快; C盘的读取速度为16MB/s。
请注意,计算机 Y 与计算机 X 类似,但速度稍慢。
(显示器的速度甚至不够快,根本无法显示任何 GRUB 屏幕。从 BIOS 屏幕消失到 Linux 内核加载屏幕首次出现,它显示了 4.76 秒的黑屏 - 但 Linux 内核已经加载了很长时间到那时至少需要 1.5 秒,所以 GRUB 最多需要 3.2 秒才能完成它的工作,这包括 GRUB 本身加载和 BIOS 决定从哪个驱动器启动等。)
不幸的是,像该实例那样的 GRUB 0.97 无法做到。像这样重复构建,所以它似乎不是一个可行的选择(尽管它会很好)。

如何使 GRUB 2 更快?

答案1

编辑:毕竟,在这种情况下,GRUB2 似乎是问题所在。我将原来的答案保留在下面,仅供参考,并作为人们可能遇到的类似问题的解释。


您所指的启动延迟是指内核和 initramfs 映像加载到 RAM 所需的时间。问题不在于引导加载程序,而在于内核/initramfs 的大小和存储(CF 卡)吞吐量。

dd您可以使用(如果您的嵌入式系统上安装了它)或轻松测试存储的速度cat。只需将/dev/sda1下面替换为代表该系统上引导分区的块设备的名称(您通常可以使用该mount命令进行检查)。

  • 使用dddd if=/dev/sda1 of=/dev/null
  • 使用cat+ timetime cat /dev/sda1 > /dev/null

(在第二种情况下,您需要手动计算费率。)

如果您的根分区太大而无法等待命令完成,只需在一段时间后按Ctrl+ C(但不少于大约一分钟,以使测试可靠)。

答案2

我没有找到 GRUB 2 启动缓慢的原因。

我最终使用了 EXTLINUX,它紧凑、快速,如果你不需要所有花哨的 GRUB 2 功能,它更适合你。

http://www.syslinux.org/wiki/index.php/EXTLINUX

相关内容