為什麼 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 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

相關內容