GRUB 2 の起動が遅いのはなぜですか?

GRUB 2 の起動が遅いのはなぜですか?

私は、GRUB 1.99 で起動する小さなカスタム組み込み Linux ディストリビューション (OpenEmbedded で作成) を持っています。目的は、起動を高速化することです。

現在は次のように書かれています:

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
}

私が持っている別のブート ディスク (コンパクト フラッシュ カード上) には、まったく同じカーネルと、20 MB の異なるディスク イメージ ファイルがあります。設定ファイルも、ramdisk_size=20480 であることを除いて同一です。この同じ時点で、遅延は 69 秒と非常に長くなっています。なぜそんなに時間がかかるのでしょうか? ありがたいことに、そのブート ディスクを頻繁に使用する必要はありません。しかし、おそらく遅延は同じ原因で発生しているため、そのディスクも修正すると良いでしょう。

この遅延を修正するにはどうすればいいでしょうか?これは何をしているのですか? ブートローダをデバッグするにはどうすればいいですか? 代わりに SYSLINUX のような軽量ブートローダを検討する価値はありますか? 未使用の GRUB 2 モジュールの一部を削除すると改善されますか? (未使用のモジュールを見つけるにはどうすればよいですか?)

まとめ

以下のすべてにはまったく同じ Linux 3.2 カーネルがあります。
フラッシュディスクAコンピュータX: 16MBイメージ、GRUB 1.99、起動遅延は約8秒です; ディスク A の読み取り速度は 20MB/秒です。
フラッシュディスクBコンピュータX: 20MBイメージ、GRUB 1.99、起動遅延は69秒です; ディスク B の読み取り速度は 20MB/秒です。

フラッシュディスクCコンピュータY: 16MBイメージ、GRUB 0.97、起動遅延は…非常に速い; ディスク C の読み取り速度は 16MB/秒です。
コンピュータ 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+ を使用するtime: time cat /dev/sda1 > /dev/null

(2 番目のケースでは、レートを手動で計算する必要があります。)

ルート パーティションが大きすぎてコマンドが完了するまで待てない場合は、しばらくしてから (ただし、テストの信頼性を高めるために、1 分以上経過してから) Ctrl+を押します。C

答え2

GRUB 2 で起動が遅くなる原因はわかりませんでした。

結局、代わりに EXTLINUX を使用することにしました。これはコンパクトで高速であり、GRUB 2 の高度な機能を必要としない場合に適しています。

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

関連情報