В данном посте решение проблемы с GRUB ( у меня возникло при обновлении Ubuntu с 13.10 на 14.04 ).
Welcome to GRUB!
error: symbol ‘grub_term_highlight_color’ not found.
grub rescue>
И так, после обновления или еще какого-то действия получается ошибка grub_term_highlight_color not found.
1 2 3 4 5 6 |
Welcome to GRUB! error: symbol 'grub_term_highlight_color' not found. grub rescue> |
Первое, что я сделал, это воспользовался утилитой boot-repair
https://help.ubuntu.com/community/Boot-Repair#A2nd_option_:_install_Boot-Repair_in_Ubuntu
Все было выполнено по шагам, при чем не один раз, но не помогло. Позже я уже понял, что выполняя шаги, предложенные утилитой, в итоге все равно не удаляются полностью конфиги grub из /boot раздела.
Поэтому я решил провести переустановку вручную, при чем более ранней версии из saucy репозитория, а не trusty (где grub на момент установки вообще beta). Так же я столкнулся с другой ошибкой, когда уже вручную пытался сделать
1 2 3 |
grub-install --recheck /dev/sdX |
Не устанавливалось в виду того, что у меня рядом стоит windows 8, следовательно мои разделы не MBR, а GPT. И настройки bios, такие как выключенный secure mode и включенный legacy mode тут не помогают. Grub просто отказывается прописывать себя в GPT.
Потому, что надо было ставить grub-efi, а не grub-pc. Теперь по порядку.
Решение
Во первых ссылка
https://help.ubuntu.com/community/Grub2/Installing#via_ChRoot
На ссылку я набрел из этого блога, за что автору спасибо.
http://blog.kosmokaryote.org/2013/07/technology-error-symbol.html
Что делается по ссылке?
Сначала надо загрузится под Ubuntu с диска или usb.
После загрузки мы определяем на каком разделе у нас стоит система и на каком /boot (если он отдельно стоит).
1 2 3 4 5 |
sudo fdisk -l sudo blkid df -Th |
Изучив вывод команд понимаем разделы. У меня система стоит на ssd – sdb2, а /boot находится в sda6.
Далее примонтируем свою систему. Тут и далее X это буква, Y это число.
1 2 3 |
sudo mount /dev/sdXY /mnt |
Если /boot отдельно, то монтируем его тоже. Подставляем свой раздел.
1 2 3 |
sudo mount /dev/sdXY /mnt/boot |
Если что-то пошло не так, то можно отмонтировать
1 2 3 |
umount /mnt |
Далее надо выполнить такой цикл
1 2 3 |
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done |
Что бы было понимание, этот цикл делает что-то вроде.
1 2 3 4 5 |
sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc ... |
Эти команды выше для примера. Выполнить надо только цикл. Это примонтирует важные разделы файловой системы для установок и прочего.
Далее выполняем смену root в получившуюся систему.
1 2 3 |
sudo chroot /mnt |
После этой команды мы находимся под root пользователем в нашей установленной системе. Т.е. корень сменился с загруженной системы с диска или usb на установленную. Далее все команды будут выполняться от root установленной системы.
Первое, что пришло в голову это
1 2 3 |
dpkg-reconfigure grub-pc |
Но проблему не решает.
Если следовать инструкции далее, то я столкнулся с проблемой.
1 2 3 |
grub-install --recheck /dev/sdX |
Тут надо указать диск без буквы, т.е. без раздела. Но прописываться он отказался, т.к. раздел GPT.
Если же просто удалить и поставить grub по новой, например так:
1 2 3 4 |
apt-get purge grub-common apt-get install grub-pc |
То загрузка будет с той же ошибкой.
В общем я проделал эту процедуру по всякому несколько раз и пришел к такому решению. Я решил поставить версию из saucy – grub 2.0.0, т.к. в trusty лежит 2.0.2-beta. Для этого надо отредактировать файл
1 2 3 |
/etc/apt/source.list |
И поменять там везде trusty на saucy.
Далее
1 2 3 4 |
aptitude update aptitude versions grub-pc |
Если не установлен aptitude то
1 2 3 |
apt-get install aptitude |
.
versions выдаст таблицу, везде должно быть saucy.
Далее выполнить следующее
1 2 3 4 5 6 7 |
aptitude purge grub-common cd /boot rm -rf grub/ rm -rf grub.bak/ aptitude install grub-pc |
Если же разделы GPT или режим EFI то
1 2 3 |
aptitude install grub-efi |
Мой случай был второй.
И вот только теперь выполнить
1 2 3 |
grub-install --recheck /dev/sdX |
Для нужного диска. Тут не указывается цифра, т.е. раздел.
Теперь можно еще проверить через gparted, что флаг boot установлен на раздел с Ubuntu или на раздел с /boot если он отдельный.
В моем случае команды выглядели так, ведь у меня /boot это sda6 с флагом boot.
1 2 3 |
grub-install --recheck /dev/sda |
Проверить корректность установки можно так.
1 2 3 |
grub-probe -t device /boot/grub |
Выдаст раздел, где установлен grub. У меня выдает /dev/sda6
После перезагрузки все заработало. :)