LINUX.ORG.RU

grub-install не заводится

 ,


1

2

Добрый день! Кто шарит, прошу помочь.

Дела такие - есть ubuntu-gnome 14.04-3. Есть компьютер с относительно новым железом. Ставим образ на него, все ок, работает, грузится. Далее появляется желание сделать бэкап.

Для простоты эксперимента образ установлен без swap и все на один раздел (т.е. без отдельных разделов под /home, /boot, etc). В биосе вырублен efi и выставлен legacy. Как в таком случае обычно создается образ - да просто архивируется содержимое раздела жесткого диска с системой. Как он потом обычно устанавливается - создается раздел на жестком, извлекается туда архив, монтируются /dev /proc /sys в извлеченный архив, chroot в извлеченный архив и выполнение grub-install /dev/sda.

Раньше на других машинах такой способ работал, но вот новое железо, и grub говорит, что все установлено успешно, ни одного предупреждения, но при перезагрузке граб не грузится. Почему я решил что не грузится - да просто в конфиге поставил таймаут на 10 сек и меню граба не появляется.

С именем диска, куда ставить загрузчик точно не накосячил, иначе бы не туда образ распаковал.

Вопрос 1. Какие мысли, почему не грузится grub, но с дефолтного установщика ubuntu gnome устанавливается нормально?

Знаю, что можно создать бэкап с помощью dd, но это вообще дедовский метод, для всей операционки его предлагать не стоит.

Есть предположение, что решить данную проблему в ближайшее время не удастся, поэтому придумываю костыли, хочу услышать мнения знающих людей. Костыль придумал вот какой - установить ubuntu gnome на два раздела. первый раздел 100MB под /boot (назовем sda1), а второй под систему / (назовем sda2). После штатной установки ubuntu gnome:

1) архивируем sda2, как и раньше
2) удаляем раздел sda2 с целью, чтобы не мешался в mbr.
3) делаем dd первых 101 МB (это mbr, незанятые 512 байт и 100MB sda1) dd sda -> image.

Как я это планирую устанавливать:

1) dd image -> sda (size101MB) - т.е. вот он мой предполагаемый костыль с загрузчиком
2) создаем sda2 и разархивируем туда операционку (которая без секции boot)
3) прописываем в /etc/fstab корректный uuid sda2. uuid от /boot измениться не должен.
4) прописываем в /boot/grub/grub.cfg параметром ядру корректный uuid sda2 для параметра root.

Вопрос 2. Как думаете, костыль заработает?


Вы случайно при востановлении системы «active flag» не забыли востановить ?

zaz ★★★★ ()

Лучше вам разобраться с grub-ом, а то костыль какой-то страшный, слетел загрузчик и восстанавливать всю систему из бекапа?

mky ★★★★★ ()

Разбирайся с grub-ом. Лучше вынеси его на отдельный раздел, мегабайт этак 400-500.

ubuntu-gnome 14.04-3, В биосе вырублен efi и выставлен legacy

Убунта нормально работает с uefi. Смысл отключать?

garik_keghen ★★★★★ ()
Ответ на: комментарий от zaz

Дело в том, что я его никогда не включал active flag. Насколько мне известно, граб состоит из двух частей (или в некоторых случаях из трех). stage1 пишется в mbr, stage2 лежит в папке /boot. При установке загрузчика я всегда считал, что это дело установщика, сделать все необходимое, чтобы при загрузке от stage1 перейти к stage2. Если при установке он не выдает ошибок, значит все должно быть установлено верно. Но за совет спасибо, в понедельник посмотрю, что там творится

Burns ()
Ответ на: комментарий от mky

слетел загрузчик - делаем архив системы и после переустановки загрузчика не стандартными средствами, а с помощью dd, распаковываем систему. Как бы все просто и сильных нареканий вызывать не должно. Тут больше вопрос, при таком подходе не забыл ли я чего для связывания stage2 с ядром и процессом init.

Разобраться бы с грубом рад, но даже не знаю, в какую сторону копать, кроме как изучать исходники, на что уйдет несколько месяцев.

Burns ()
Ответ на: комментарий от garik_keghen

Разбирайся с grub-ом

тут в целом пост об этом, я не понимаю, что ему не нравится

Убунта нормально работает с uefi

Какая именно? Арч да, нормально работает c uefi, а вот ubuntu даже не знаю. В теории это всего лишь загрузчик и завести можно все, но хотелось бы с наименьшими страданиями (т.е. побыстрее бы).

Пробовал поставить ubuntu server на тот комп, так она вообще в процессе установки отказалась устанавливаться, причину не помню. В понедельник можно попробовать еще раз ее поставить и ошибку запостить сюда.

Без проблем ставятся только ubuntu gnome, xubuntu и kubuntu. В чем разница между ними и серверной версией, помимо наличия гуя - вот один из вопросов, который я хочу спросить в данной теме. Хотя нет, я все-таки хочу больше услышать советы по grub.

Насчет тех, что ставятся и uefi - только пробуешь перейти на gpt - установщик сразу же посылает далеко, мол подавай мне mbr

Burns ()
Ответ на: комментарий от Burns

Некоторые биосы сами просматривают MBR на предмет активного раздела, если на винчестере нету активного раздела то они его даже не пытаются грузить (первый лоадер из mbr)

zaz ★★★★ ()
Ответ на: комментарий от Burns

В UEFI ничего страшного нету, единственная проблема что для того чтобы добавить новый лоадер для uefi (грубо говоря сделать grub-install) нужно чтоб текущая сессия была загружена через UEFI. Многие инстоляторы потдерживают оба варианта загрузки (uefi и legacy) и если биос тоже супортит оба то они часто грузятся как legacy. В результате ядро не видит UEFI firmware и не может использовать его API для управления лоадерами.

Для решения этой проблемы как правило бывает достаточно просто запретить legacy в биосе до запуска установки. В результате установка будет запущена через UEFI и все должно работать.

zaz ★★★★ ()
Ответ на: комментарий от zaz

если на винчестере нету активного раздела то они его даже не пытаются грузить (первый лоадер из mbr)

А вот это уже довольно интересная идея и подтверждение Ваших слов по поводу active flag.

Попробовал пока на virtualbox, при установке ubuntu флаг bootable у раздела /boot выставляется. С помощью cfdisk убрал этот флаг - на загрузку никак не повлияло, все загрузилось нормально.

Может действительно биос сделали слишком умным и проблема только в этом моменте. Завтра попробую проверить на конечном железе

Burns ()
Ответ на: комментарий от zaz

В результате ядро не видит UEFI firmware и не может использовать его API для управления лоадерами.

Не знаю почему, но закрадывается сомнение, что это не совсем так. Вы уверены в этом?

Проверить в принципе даже знаю как - есть такой дистрибутив как арч. У него точно есть два загрузчика, efi - голые 4 строки с вариантами загрузки и bios - красивое окошко с бэкграундом и табличкой вариантов загрузки. Для установки efi загрузчика там необходимо скачать grub и efibootmgr, а при выполнении grub-install задать параметр вроде бы target. Т.е. вы полагаете, что при legacy загрузке установить efi загрузчик не выйдет? В свободное время проверю, заинтриговали :)

Burns ()
Ответ на: комментарий от zaz

Некоторые биосы сами просматривают MBR на предмет активного раздела, если на винчестере нету активного раздела то они его даже не пытаются грузить (первый лоадер из mbr)

Оказалось именно в этом и была проблема! Огромное спасибо, не думал, что решение будет таким вот простым. Очень благодарен за решение!!

Burns ()
Ответ на: комментарий от Burns

100% утверждать не буду, но на сколько я понял efibootmgr рабатает какраз через firmware которой нет если система стартовала через legacy (по крайней мере у меня при старте системы через legacy каталог /sys/firmware/efi/vars пустой даже если руками нужные модуля загрузить).

В результате efibootmgr не отробатывает, возможно можно както обойтись без него (если лоадер на диске только один то попробовать его положить по дефолтному пути) но мне такой вариант не подходил и я не совсем понимаю как это сделать.

zaz ★★★★ ()
Ответ на: комментарий от zaz

Могу я Вам еще один вопрос на данную тему задать? Второй час не гуглится ничего толкового.

В общем хочу написать скрипт раскатывания бекапа. Проблема в чем - если писать руками в терминале chroot /mnt grub-install --recheck /dev/sdX, то загрузчик ставится норм.

Пытаюсь сделать то же самое в скрипте двумя вариантами(в одну строку):

[1] chroot /mnt grub-install --recheck /dev/sdX
[2] chroot /mnt /bin/bash -c «grub-install --recheck /dev/sdX»

на выходе имею то, что срабатывает только «chroot /mnt», далее ожидается ручной ввод (скрипт прерывается), если написать «exit», то выполнение скрипта возобновляется и выполняются остатки «grub-install --recheck /dev/sdX» или «/bin/bash -c „grub-install --recheck /dev/sdX“».

ubuntu x86_64 пытаюсь уставить со slax x86_64.

Что меня удивляет - grub-install нет ни в слаксе, ни в распакованном образе операционки. Он появляется только после chroot, поэтому задать root-directory не выйдет.

Что я снова не так делаю?

Burns ()
Ответ на: комментарий от Burns

У вас случайно алиаса в скрипте на команду chroot нету ? Попробуйте из скрипта вызвать chroot по полному пути /usr/bin/chroot (чтоб точно небыло алиаса и/или встроенной команды или какогото вызова busybox)

zaz ★★★★ ()
Ответ на: комментарий от zaz

Черт подери... пол дня, пол чертовых дня я потратил на эти алиасы. Уже подумал, что под slax-ом кривой chroot и начал думать в сторону перехода со slax live cd к ubuntu live cd.

Еще раз премного благодарен!!

Burns ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.