
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 커널은 이미 로딩 중입니다. 그 때까지는 최소 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
(두 번째 경우에는 요율을 수동으로 계산해야 합니다.)
루트 파티션이 너무 커서 명령이 완료될 때까지 기다릴 수 없는 경우 잠시 후 Ctrl+를 누르십시오 C(그러나 테스트를 안정적으로 수행하려면 약 1분 이상).
답변2
GRUB 2로 부팅이 느린 원인을 찾지 못했습니다.
대신에 작고 빠르며 멋진 GRUB 2 기능이 모두 필요하지 않은 경우에 더 적합한 EXTLINUX를 사용하게 되었습니다.