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
}

다른 부팅 디스크(컴팩트 플래시 카드)에는 정확히 동일한 커널과 크기가 20MB인 다른 디스크 이미지 파일이 있습니다. 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+를 사용하세요 time: time cat /dev/sda1 > /dev/null

(두 번째 경우에는 수동으로 요율을 계산해야 합니다.)

루트 파티션이 너무 커서 명령이 완료될 때까지 기다릴 수 없는 경우 잠시 후 Ctrl+를 누르십시오 C(그러나 테스트를 신뢰할 수 있게 하려면 약 1분 정도 소요됩니다).

답변2

GRUB 2가 느리게 시작되는 이유를 찾지 못했습니다.

나는 결국 멋진 GRUB 2 기능이 모두 필요하지 않은 경우 작고 빠르며 더 나은 EXTLINUX를 사용하게 되었습니다.

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

관련 정보