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 / sです。
フラッシュディスクBコンピュータX:20MB画像、GRUB 1.99、開始遅延は69秒です。; Bドライブの読み取り速度は20MB / sです。

フラッシュドライブCコンピュータY:16MB画像、GRUB 0.97、開始遅延が非常に高速です。; Cドライブの読み取り速度は16MB / sです。
コンピュータYはコンピュータXに似ていますが、少し遅いです。
(モニターはGRUB画面をまったく表示するのに十分速くありませんでした。BIOS画面が消えてからLinuxカーネルロード画面が最初に表示されるまで、4.76秒間黒い画面が表示されましたが、Linuxカーネルは100分間ロードされていました。長い時間がかかりました。それまでには少なくとも1.5秒かかりました。GRUB自体のロードと起動するドライブを決定するBIOSなど、GRUB操作を完了するのに最大3.2秒かかります。)
残念ながら、GRUB 0.97は次のようになります。このインスタンスはそうすることはできません。このようにビルドを繰り返すので、実行可能なオプションのようには見えません(もちろん良いでしょうが)。

GRUB 2をより速くする方法は?

ベストアンサー1

編集:結局、この場合、GRUB2は問題のようです。参考のためだけに使用し、人々が経験する可能性のある同様の問題の説明として、元の回答を以下に残します。


前述のブート待ち時間は、カーネルイメージとinitramfsイメージがRAMにロードされるのにかかる時間です。問題は、ブートローダにあるのではなく、カーネル/initramfsサイズとストレージ(CFカード)スループットにあります。

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

  • 使用dd:dd if=/dev/sda1 of=/dev/null
  • cat+を使用してくださいtimetime cat /dev/sda1 > /dev/null

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

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

おすすめ記事