Почему 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,8 МБ, а размер файла образа диска — 16 МБ.

Файл 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
}

На другом загрузочном диске (на карте Compact Flash) у меня точно такое же ядро ​​и другой файл образа диска, который 20 МБ. Файл конфигурации также идентичен, за исключением того, что ramdisk_size=20480.У этого в этом же месте чрезвычайно длинная задержка — 69 секунд.Почему так долго? К счастью, мне не нужно часто использовать этот загрузочный диск. Но было бы неплохо исправить и его, так как, по-видимому, задержка вызвана тем же.

Как устранить эту задержку?Что он делает? Как отладить загрузчик? Стоит ли вместо этого рассмотреть более легкий загрузчик, например SYSLINUX? Улучшит ли его удаление некоторых неиспользуемых модулей GRUB 2? (Как узнать, какие модули не используются?)

Краткое содержание

Все перечисленные ниже версии имеют одинаковое ядро ​​Linux 3.2:
Флэш-диск Ана компьютере X: образ 16 МБ, GRUB 1.99,задержка загрузки составляет ~8с; скорость чтения диска A составляет 20 МБ/с.
Флэш-диск Bна компьютере X: образ 20 МБ, GRUB 1.99,задержка загрузки 69с; скорость чтения диска B составляет 20 МБ/с.

Флэш-диск Cна компьютере Y: образ 16 МБ, GRUB 0.97,задержка загрузки... чрезвычайно быстрая; скорость чтения диска C составляет 16 МБ/с.
Обратите внимание, что компьютер Y похож на компьютер X, но немного медленнее.
(Монитор даже недостаточно быстр, чтобы показать какие-либо экраны GRUB. С момента исчезновения экрана BIOS до первого появления экрана загрузки ядра Linux он показывает 4,76 с пустого экрана, но к тому времени ядро ​​Linux уже загружалось не менее 1,5 с, так что GRUB потребуется максимум 3,2 с, чтобы выполнить свою работу. Это включает загрузку самого GRUB и выбор BIOS, с какого диска загружаться, и т. д.)
К сожалению, GRUB 0.97, как этот экземпляр, не может быть повторно собран таким образом, поэтому это не кажется возможным вариантом (хотя было бы неплохо).

Как ускорить GRUB 2?

решение1

EDIT: Похоже, что в данном случае проблема в GRUB2. Я привожу свой первоначальный ответ ниже просто для справки и в качестве объяснения похожих проблем, которые могут возникнуть у людей.


Задержка загрузки, о которой вы говорите, это время, необходимое для загрузки ядра и образа initramfs в ОЗУ. Виноват не загрузчик, а размер ядра/initramfs и пропускная способность хранилища (CF-карты).

Вы можете легко проверить скорость вашего хранилища, используя либо dd(если оно установлено на вашей встроенной системе), либо cat. Просто замените /dev/sda1ниже на имя блочного устройства, представляющего загрузочный раздел в этой системе (обычно это можно проверить с помощью команды mount).

  • с использованием dd:dd if=/dev/sda1 of=/dev/null
  • используя cat+ time: time cat /dev/sda1 > /dev/null

(Во втором случае вам придется рассчитать ставку вручную.)

Если ваш корневой раздел слишком велик для ожидания завершения команд, просто нажмите Ctrl+ Cчерез некоторое время (но не менее чем через минуту, чтобы тест был надежным).

решение2

Я не нашел причину медленной загрузки GRUB 2.

В итоге я остановился на EXTLINUX, который компактен и быстр, и больше подходит, если вам не нужны все эти навороченные возможности GRUB 2.

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

Связанный контент