
В последнее время (по крайней мере, последние 2 раза, когда я включал ПК) я заметил, что grub загружается вечно. Я засек почти 9 минут между исчезновением сообщений BIOS и появлением журнала ядра на экране.
Вопрос в том, как узнать, что делает или ждет grub? Как проверить, что grub в порядке?
Несколько дней назад я удалил заставку, так что теперь я вижу текстовый журнал при каждой загрузке. В большинстве случаев это быстро и нормально. В течение этих 9 минут монитор получает сигнал, но это просто черный экран. NumLock не отвечает, все это кажется замороженным, но это не так.
У меня есть программный RAID1 как минимум с 2009 года.
RAID сообщается как здоровый. В течение этих минут наблюдается незначительная активность жесткого диска в первую минуту. Данные SMART жесткого диска здоровы. Выключение накануне было нормальным.
У меня на этом компьютере установлены все версии Ubuntu с 8.04. У меня установлена 12.10 с октября. В этом компьютере нет ничего нового, нет новых жестких дисков, нет изменений в настройках BIOS.
Насколько мне известно, журнала grub нет, а журнал ядра неинтересен, поскольку в нем говорится, что ядро загрузилось за 28 секунд [ядро PhenomX4: [ 28.825313] vboxpci: IOMMU не найдено (не зарегистрировано)], поэтому 9 минут относятся к моменту запуска ядра.
*Обновление: 27 марта *
Я нашел проблему, но я все еще не знаю причину. Проблема была в том, что /boot/grub/grub.cfg был 11,6 МБ и в нем были записи, подобные этой, повторяющиеся много-много раз с небольшими вариациями. 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
}
Все еще не знаете, почему этот файл так вырос?
Обновление 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 строку, то есть этот скрипт занимает 99% от 11,6 МБ файла.
решение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
чтобы попытаться определить, что происходит.
Это вовсе не решение, но я надеюсь, что это сможет хоть как-то помочь.