
私は、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
)。
- 使用
dd
:dd if=/dev/sda1 of=/dev/null
cat
+ を使用するtime
:time cat /dev/sda1 > /dev/null
(2 番目のケースでは、レートを手動で計算する必要があります。)
ルート パーティションが大きすぎてコマンドが完了するまで待てない場合は、しばらくしてから (ただし、テストの信頼性を高めるために、1 分以上経過してから) Ctrl+を押します。C
答え2
GRUB 2 で起動が遅くなる原因はわかりませんでした。
結局、代わりに EXTLINUX を使用することにしました。これはコンパクトで高速であり、GRUB 2 の高度な機能を必要としない場合に適しています。