web-dev-qa-db-ja.com

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
}

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

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

概要

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

フラッシュディスクCコンピューターY:16MBイメージ、GRUB 0.97、起動遅延は..非常に速い;ディスクCの読み取り速度は16MB/s。
コンピューターYはコンピューターXに似ていますが、少し遅いことに注意してください。
(モニターはすべてのGRUB画面を表示するほど高速ではありません。BIOS画面が消えてからLinuxカーネルのロード画面が最初に表示されるまで、4.76と表示されます。 sの空白画面-ただし、Linuxカーネルはその時点までに少なくとも1.5秒間ロードされているため、GRUBの場合、最大で3.2 sのようになります。これには= GRUB自体のロードとBIOSがどのドライブから起動するかを決定するなど)
残念ながらGRUB 0.97のようなインスタンスは、そのように繰り返し構築することはできないため、実行可能なオプションではないようです(ただし、それは素晴らしいことです)。

どうやってGRUB 2高速にする??

6
Jetski S-type

GRUB 2。

代わりにEXTLINUXを使用することになりました。これはコンパクトで高速であり、すべての凝ったGRUB 2ものが必要ない場合に適しています。

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

2
Jetski S-type

編集:結局のところ、GRUB2が問題のようです。参考のために、また人々が抱えている同様の問題の説明として、元の回答を以下に残しています。


参照しているブート遅延は、カーネルとinitramfsイメージがRAMにロードされるのに必要な時間です。責任はブートローダーではなく、カーネル/ initramfsのサイズとストレージ(CFカード)のスループットにあります。

dd(組み込みシステムにインストールされている場合)またはcatを使用して、ストレージの速度を簡単にテストできます。以下の/dev/sda1を、そのシステムのブートパーティションを表すブロックデバイスの名前に置き換えてください(通常、mountコマンドを使用して確認できます)。

  • ddの使用:dd if=/dev/sda1 of=/dev/null
  • cat + timeを使用:time cat /dev/sda1 > /dev/null

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

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

3
rozcietrzewiacz