Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: recordfail в grub2 [РЕШЕНО]  (Прочитано 15682 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ascaronter

  • Автор темы
  • Участник
  • *
  • Сообщений: 156
    • Просмотр профиля
recordfail в grub2 [РЕШЕНО]
« : 13 Декабря 2009, 21:09:30 »
История такова. Я решил ускорить загрузку ubuntu 9.10 начальной оптимизацией (брал инструкцию здесь https://help.ubuntu.ru/wiki/ubuntu_optimization). После чего grub перестал отсчитывать время до загрузки ОС по умолчанию, т.е. вообще ничего не загружал (Все ОС сами загружались нормально).
Я проверил /etc/default/grub, все вроде правильно было:
(Нажмите, чтобы показать/скрыть)

В инструкции прочитал, что счетчик выключается при выставленном значении GRUB_TIMEOUT=-1.
Но у меня ясно написано, что 15.  :o

Начал изучать файл /boot/grub/grub.cfg, и вот на какую сточку наткнулся:
if [ ${recordfail} = 1 ]; then
  set timeout=-1
else
  set timeout=15
Т. е. если  ${recordfail} = 1, то timeout=-1 и таймер выключается. Так у меня, видимо, и произошло.
Остался вопрос - за что отвечает переменная ${recordfail}? В мануалах и в инете не нашел.
Ясно, что ошибка записи, но какая?
Выход - изменить эту часть кода на
if [ ${recordfail} = 1 ]; then
  set timeout=10
else
  set timeout=15

Для этого я изменял /etc/grub.d/00_header (т.к. основной менять нельзя) и update-grub после этого.

По умолчанию у меня 15 секунд, если ${recordfail} = 1 выполняется, то 10.
И на самом деле - счетчик отсчитывал 10 секунд. У меня где-то был recordfail.
Кто-нибудь знает что это и как исправить мою ситуацию? А то такие "костыли" весьма опасны в нештатных ситуациях.



« Последнее редактирование: 14 Декабря 2009, 15:30:34 от Ascaronter »

Оффлайн dimas000

  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: recordfail в grub2
« Ответ #1 : 13 Декабря 2009, 21:43:53 »
основательно про'grep'ав на сей счет, нашел упоминание лишь в grub.cfg, в 00 и 10-ых скриптах. отсюда можно заключить, что сие не скриптами делается, а уже в самом грубе что-то выполняется. в качестве костыля можно попробовать в тот же 00 добавить "set recordfail=0", хотя если речь только о таймауте, проще действительно поправить....
собственно, что это и зачем надо - тут уж если только сырцы груба изучать. ну или хотя бы тем же grep пройтись...
можно попробовать переставить с лайвцд, ничем особым это не грозит, даже настройки все останутся....
Цитировать
А то такие "костыли" весьма опасны в нештатных ситуациях.
запускал с донельзя урезанным конфигом, вообще без единого упоминания об этом - ничего, все работает.
лучше на "ты"

Оффлайн Ascaronter

  • Автор темы
  • Участник
  • *
  • Сообщений: 156
    • Просмотр профиля
Re: recordfail в grub2
« Ответ #2 : 14 Декабря 2009, 10:16:26 »
Цитировать
в качестве костыля можно попробовать в тот же 00 добавить "set recordfail=0",
Неизвестно откуда grub берет параметр recordfail, поэтому вряд ли поможет добавление условия в один из скриптов.
Кстати,я нашел файл /boot/grub/grubenv Там есть единственная запись - recordfail=1. Посмотрите пожалуйста кто-нибудь, у вас что-нибудь в нем есть?
И сразу вопрос - его изменять можно?

Пользователь решил продолжить мысль 14 Декабря 2009, 02:35:24:
НИКОГДА не редактируйте grubenv. Мало, что он за загрузку ОС отвечает каким-то боком, так еще и восстанавливается сам, зараза!  >:(

Пользователь решил продолжить мысль 14 Декабря 2009, 06:36:28:
Кстати, перестановка grub не помогает - настройки сохраняются.  :)

Пользователь решил продолжить мысль 14 Декабря 2009, 11:29:30:
Понял! Это было из-за параллельной загрузки. Если вы ускоряли ubuntu параллельной загрузкой методом, описанном здесь - https://help.ubuntu.ru/wiki/ubuntu_optimization, то в /etc/init.d/rc измените CONCURRENCY=shell на CONCURRENCY=none.
А в /boot/grub/grubenv recordfail=1 измените на recordfail=0Все сохраните и перезагрузитесь. Всё должно работать. (И костыли уберите напоследок, чтобы не мешались)

Пользователь решил продолжить мысль 14 Декабря 2009, 16:01:41:
Можно в мануал занести, что в 9,10 тоже не работает параллельная загрузка. В 9,04 всё нормально было.
« Последнее редактирование: 14 Декабря 2009, 16:01:41 от Ascaronter »

Оффлайн dimas000

  • Старожил
  • *
  • Сообщений: 1437
  • Ubuntu 9.10 @ 2.6.34
    • Просмотр профиля
Re: recordfail в grub2 [РЕШЕНО]
« Ответ #3 : 14 Декабря 2009, 21:16:53 »
Цитировать
Неизвестно откуда grub берет параметр recordfail, поэтому вряд ли поможет добавление условия в один из скриптов.
если переменная существует, командой "set" можно поменять ее значение.
Цитировать
Кстати,я нашел файл /boot/grub/grubenv Там есть единственная запись - recordfail=1. Посмотрите пожалуйста кто-нибудь, у вас что-нибудь в нем есть?
И сразу вопрос - его изменять можно?
вот мой grubenv:
# GRUB Environment Block
########################################....куча решеток...###
только что глянул его с ls -l. хотя чмоды и стоят 644, но судя по времени изменения, он действительно обновляется при каждой загрузке
Цитировать
Можно в мануал занести, что в 9,10 тоже не работает параллельная загрузка. В 9,04 всё нормально было.
параллельная загрузка - это как?
лучше на "ты"

Оффлайн Ascaronter

  • Автор темы
  • Участник
  • *
  • Сообщений: 156
    • Просмотр профиля
Re: recordfail в grub2 [РЕШЕНО]
« Ответ #4 : 15 Декабря 2009, 23:38:01 »
Цитировать
параллельная загрузка - это как?
При загрузке будут задействованы оба ядра (если процессор двухъядерный) а не одно, как по дефолту.

Оффлайн sergeyvl12

  • Любитель
  • *
  • Сообщений: 95
    • Просмотр профиля
Re: recordfail в grub2 [РЕШЕНО]
« Ответ #5 : 28 Января 2010, 21:30:28 »
спасибо! была та же проблема.

кстати, на счет /etc/init.d/rc:

Когда менял CONCURRENCY, то почитал вверху коммент:

"Valid options are 'none', 'startpar' and 'makefile'"

Там 'shell' среди опций не значится. гыгы

Попробуем startpar :)
 

Оффлайн ibex

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: recordfail в grub2 [РЕШЕНО]
« Ответ #6 : 28 Февраля 2010, 15:20:29 »
Мне тоже помогло, только я не понял от чего вообще так случилось.

Ubuntu 9.10 Server

CONCURRENCY=shell  поставил почти после установки ОС. А тут на днях решил попробовать изменить время задержки в grub. С 10 секунд поменял на 2 и сделал `update-grub` после этого он грузился только если вручную выбрать пункт загрузки.

Поменял обратно CONCURRENCY=shell, на =none, снова `update-grub` и нифига :)

А в /boot/grub/grubenv тем временем было пусто, т.е. recordfail={0,1} вообще не было. Пока не дописал ничего не работало..

странно в общем :)


Оффлайн Mr.Visor

  • Любитель
  • *
  • Сообщений: 82
  • #include <beard.h>
    • Просмотр профиля
    • guest@visor.by
Re: recordfail в grub2 [РЕШЕНО]
« Ответ #7 : 22 Августа 2010, 00:49:27 »
От себя хочу добавить, что recordfail в grub'е используется, по крайней мере, при гибернации (он же спящий режим).
Особенно это хорошо видно по скрипту в файле /etc/pm/sleep.d/10_grub-common:
(Нажмите, чтобы показать/скрыть)

В данном контексте с переменной (а судя по исходникам grub.cfg, полноценной функцией) всё достаточно просто:
Уходим в гибернацию - ставим recordfail=1 (чтобы сразу же грузилась Ubuntu без задержек на меню grub). Вышли из гибернации - recordfail=0 (менюшка уже может понадобиться).
Как раз сейчас я борюсь за то, чтобы recordfail был равен 1 при уходе в гибернацию. Чую без костылей не обойдётся...  :-\

Оффлайн slimsua

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: recordfail в grub2 [РЕШЕНО]
« Ответ #8 : 09 Октября 2010, 13:02:17 »
Столкнулся намедни с необходимостью настройки GRUB 2 при установке Funtoo Linux. Скрипты генерации grub.cfg меня не устроили, сам GRUB 2 в Funtoo урезан (утилиты grub-mkconfig в комплекте нет), остается ручная правка /boot/grub/grub.cfg. Внятной документации не нашел (по /etc/default/grub и /etc/grub.d/* что-то есть, на французском, хе-хе). На просторах Интернета наиболее часто разбираемый конфиг - это конфиг Ubuntu. В частности уперся в пресловутый recordfail.
Так вот, насколько я понял, recordfail - это не какая-то собственная возможность GRUB 2 и потому в руководствах и исходниках самого GRUB упоминаний о recordfail не найти. Дело в том, что GRUB 2 имеет скриптинговые возможности a-la shell, в том числе установку переменных (eg. set [VARIABLE[=VALUE]]). Более того, он способен сохранять значения переменных между своими сессиями (функции GBUB2 save_env и load_env, а также утилита grub_editenv). А хранит он их как раз в файле /boot/grub/grubenv. Эта возможность им самим также используется для релизации GRUB_DEFAULT=saved.
Итак, переменная recordfail - это пример того, как в Ubuntu (а точнее, в Debian) используется скриптовые возможности GRUB 2. Если заглянуть в /boot/grub/grub.cfg, можно найти реализацию функции recordfail, где переменная recordfail устанавливается в 1 и сохраняется. А в menuentry производится вызов этой функции (кстати, только в тех menuentry, где грузится Ubuntu). В /boot/grub/grub.cfg имеется и реакция на значение recordfail: если 0 (или не установлена) - включить обычный таймер обратного отсчета, если 1 - таймер выключить.
Если кто еще не догадался, recordfail=1 - это признак сбоя загрузки. Именно поэтому в menuentry изначально полагается recordfail=1, а по завершении загрузки сама Ubuntu должна эту переменную очистить. Так что где-то в скриптах инициализации должен быть зарыт вызов типа grub-editenv /boot/grub/grubenv unset recordfail Что, в частности, и выполняется в /etc/pm/sleep.d/10_grub-common.
Если же переменная не очищается, то GRUB при следующем запуске отключает таймер и тем самым отменяет автозагрузку ОС и дает возможность спокойно и не торопясь отредактировать menuentry вручную, перейти в интерактивный режим или просто выбрать другой пункт загрузки.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: recordfail в grub2 [РЕШЕНО]
« Ответ #9 : 25 Сентября 2012, 17:58:35 »
Recordfail - переменная которая грубом во время начальной загрузки ставится в 1 (true) и если загрузка пройдет то переменная скидывается. Отвечает за сброс /etc/init.d/grub-common.

Смысл всего этого действа - предотвратить циклическую перезагрузку в случая обрушения системы на этапе загрузки.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

 

Страница сгенерирована за 0.039 секунд. Запросов: 23.