
최근에(최소한 두 번 PC를 켰을 때) grub을 부팅하는 데 시간이 오래 걸리는 것을 발견했습니다. BIOS 메시지가 사라지고 커널 로그가 화면에 나타나는 사이에 거의 9분의 시간을 뒀습니다.
문제는 그럽이 무엇을 하고 있거나 기다리고 있는지 어떻게 알 수 있느냐는 것입니다. Grub이 괜찮은지 어떻게 확인할 수 있나요?
며칠 전 스플래시 화면을 제거하여 부팅할 때마다 텍스트 로그를 확인했습니다. 대부분의 경우 빠르고 정상적입니다. 9분 동안 모니터에 신호가 수신되지만 검은색 화면만 나타납니다. NumLock이 응답하지 않고 모든 것이 정지된 것처럼 보이지만 그렇지 않습니다.
나는 적어도 2009년부터 소프트웨어 raid1을 사용하고 있습니다.
습격은 건강하다고보고되었습니다. 이 몇 분 동안 처음 1분 동안 약간의 하드 디스크 활동이 발생합니다. 하드 드라이브 SMART 데이터가 정상입니다. 전날 폐쇄는 정상이었습니다.
8.04 이후로 이 컴퓨터에 모든 Ubuntu 버전이 설치되어 있습니다. 10월부터 12.10을 설치했습니다. 이 컴퓨터에는 새로운 것이 없고, 새로운 하드 드라이브도 없으며, BIOS 설정도 변경되지 않습니다.
grub 로그 AFAIK가 없으며 커널 로그는 커널이 28초 만에 부팅되었다고 나와 있으므로 흥미롭지 않습니다. [PhenomX4 커널: [ 28.825313] vboxpci: IOMMU 찾을 수 없음(등록되지 않음)] 따라서 9분은 커널이 시작되기 전입니다.
*업데이트: 3월 27일 *
문제는 찾았으나 아직 원인을 모르겠습니다. 문제는 /boot/grub/grub.cfg가 11.6MB였으며 이와 같은 항목이 약간 변형되어 여러 번 반복되었다는 것입니다. Grub은 메뉴를 만들기 위해 너무 큰 파일에 질식하고 있었습니다.
menuentry 'Ubuntu 12.10 (12.10) (en /dev/sda1) (en /dev/sda1) (en /dev/sdb1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1) (en /dev/sda1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/vmlinuz--73e06880-5f46-4493-aaef-23fa4ad138f6' {
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 73e06880-5f46-4493-aaef-23fa4ad138f6
else
search --no-floppy --fs-uuid --set=root 73e06880-5f46-4493-aaef-23fa4ad138f6
fi
linux /vmlinuz root=/dev/sda1
initrd /initrd.img
}
아직도 그 파일이 왜 그렇게 커졌는지 모르시나요?
3월 28일 업데이트
메뉴 항목의 큰 부분은 /etc/grub.d/30_os-prober에 의해 생성됩니다.
Line 223: ### BEGIN /etc/grub.d/30_os-prober ###
...
Line 175174: ### END /etc/grub.d/30_os-prober ###
grub.cfg에는 175191줄이 있으므로 해당 스크립트는 파일 11.6MB의 99%를 나타냅니다.
답변1
리포지토리에는 BootChart라는 멋진 도구가 포함되어 있습니다. 또한 GRUB 디버그 구성 요소도 제공됩니다. 이를 통해 부팅을 프로파일링하고 많은 시간을 소비하는 것이 무엇인지 알아낼 수 있습니다.
답변2
해당 항목을 모두 얻으면 아마도 Grub에 루프를 만드는 것이 있을 것입니다. Raring을 별도의 파티션에 설치할 때 나에게 비슷한 일이 일어났습니다(예: 와 같은 생성된 항목을 이스케이프하는 것이 잘못됨 menuentry "Ubuntu"...
). 아무것도 바꾸지 않았다고 말씀하셨는데 아마도 Grub의 일부 업데이트에서 유래된 것일까요?
해당 파일은 (예를 들어 새 커널을 설치할 때) 에 있는 스크립트에 의해 자동으로 생성됩니다 /etc/grub.d
. 자세히 살펴보면 grub.cfg
항목 사이에 항목을 생성한 스크립트를 지정하는 구분 기호가 있음을 알 수 있습니다. 예:
### BEGIN /etc/grub.d/30_uefi-firmware ###
### END /etc/grub.d/30_uefi-firmware ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Ubuntu Raring (on /dev/sda2)" --class gnu-linux --class gnu --class os {
(...)
}
menuentry 'Steam' --class ubuntu --class gnu-linux {
(...)
}
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
따라서 해당 항목을 생성하는 스크립트를 식별하고 스크립트 이름으로 답변을 업데이트하십시오. 거기에 도착하면 sudo grub-mkconfig
다음을 사용하여 해당 스크립트를 사용하거나 실행할 수 있습니다.
sh -v /etc/grub.d/file
무슨 일이 일어나고 있는지 확인하려고 노력합니다.
이것은 전혀 해결책은 아니지만 뭔가 도움이 되기를 바랍니다.