LINUX.ORG.RU

правильное выключение + GRUB2 отключить подтверждение при перезагрузке

 ,


1

1

Есть такая проблема - при нештатной перезагрузке, GRUB2 (из Ubuntu Server 12.04 LTS) ожидает нажатия клавиши для продолжения и выбора варианта.

1) Как отключить эту штуку? Чтобы GRUB2 всегда загружал систему.

2) Как вообще штатно завершать удаленный Linux-сервер (который крутится внутри обородования) к которому есть ssh доступ? Вот допустим оборудование должно быть обесточено, но надо предварительно как-то завершить работу ОС.

2) доставить acpid или заходить по ssh и говорить sudo poweroff
1) надо гуглить. лень. ;)

aol ★★★★★ ()

1) Как отключить эту штуку? Чтобы GRUB2 всегда загружал систему.

Ищи в /etc/grub.d/ и /etc/default/grub

2) Как вообще штатно завершать удаленный Linux-сервер (который крутится внутри обородования) к которому есть ssh доступ? Вот допустим оборудование должно быть обесточено, но надо предварительно как-то завершить работу ОС.

ssh [user@]hostname [command]

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

ssh [user@]hostname [command]

о, интересно, не знал, надеюсь можно как-то автоматизировать это

я забыл пояснить что это мне надо делать из программы на C++, т.е. чтобы сервер, прежде чем программа скомандует отключить питание, сервер пока успешно выключился, жаль подтверждения об этом он не пришлет - надо знать наверняка - отмонтировал ли сервер все свои ФС

I-Love-Microsoft ★★★★★ ()

1) Как отключить эту штуку? Чтобы GRUB2 всегда загружал систему.

тут Over9000 таких тем. Это дистрозависимо на самом деле. GRUB тут не причём, проблема в том, что ядру не смонтировать корневой раздел, есть два варианта:
1. проверить, и ждать оператора если что.
2. проверить с ключом -y (всегда ДА!)
как оно ставится именно в бубунте - не знаю.

2) Как вообще штатно завершать удаленный Linux-сервер

man halt, man reboot, man poweroff (это одна и та же команда на самом деле)

drBatty ★★ ()
Ответ на: комментарий от I-Love-Microsoft

I-Love-Microsoft

я забыл пояснить что это мне надо делать из программы на C++, т.е. чтобы сервер, прежде чем программа скомандует отключить питание, сервер пока успешно выключился, жаль подтверждения об этом он не пришлет - надо знать наверняка - отмонтировал ли сервер все свои ФС

ну подождите какое-то время... Если обычный сервер не откликается по ssh уже скажем минуту, то отключение ему вряд ли чем-то повредит, ИМХО. Там уже случилось нечто СТРАШНОЕ.

drBatty ★★ ()

по первому пункту:
man grub.conf recordfail

aol ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

надо делать из программы на C++

man system

надо знать наверняка - отмонтировал ли сервер все свои ФС

Перемести /etc/init.d/umountfs, на его месте создай скрипт, который будет вызывать его и при $? == 0 сообщать программе.

Сообщить можно созданием временного файла (ssh user@host «touch /tmp/server0down»), наличие которого программа на С++ будет мониторить.

anonymous ()
Ответ на: комментарий от I-Love-Microsoft

о, интересно, не знал, надеюсь можно как-то автоматизировать это

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

imul ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

я забыл пояснить что это мне надо делать из программы на C++, т.е. чтобы сервер, прежде чем программа скомандует отключить питание, сервер пока успешно выключился

Не до конца распарсил, но функция system()

жаль подтверждения об этом он не пришлет - надо знать наверняка - отмонтировал ли сервер все свои ФС

ping сервака, при этом из shutdown скриптов вырезать часть, которая отвечает за сброс IP адреса при выключении, тогда, как я понимаю, ядро будет отвечать на пинги пока оно еще работает. Это не совсем отмонтирование, но, очитывая что последнее, что делает ядро перед тем как выгрузиться, это отмонтирует корень - сойдет. Еще, если есть доступ к рутеру, можно на нем проверять состояние интерфейса к серваку.

Kroz ★★★★★ ()

костыль который мне помог

Не знаю если ответ актуален ещё, во всяком случае всем кто в дальнейшем в поиске найдут эту тему , должно помочь.

1) Как отключить эту штуку? Чтобы GRUB2 всегда загружал систему.

Так же столкнулся с подобной проблемой. В случае нештатного отключения компьютера (вырубили свет потом включили) GRUB2 доходил до меню и ждал выбора. Мне бы хотелось чтобы компьютер рестартовал сам с включением света и сервер поднимался. Как оказалось за это отвечает переменная Recordfail , которая по умолчанию выставляется Recordfail=1 после успешной загрузки системы она обнуляется. А при загрузке GRUB2 в файле /boot/grub/grub.cfg идет проверка:

if [ ${recordfail} = 1 ]; then
  set timeout=-1
else
  set timeout=0
таким образом GRUB2 в случае если система была выключена не штатно принудительно выводит меню загрузки и ждет пока администратор в ручную выберет что грузить. Это делается для предотвращения зацикливания загрузки системы, если там что-то серьезно навернулось.

Теперь вторая особенность. Везде пишут что /boot/grub/grub.cfg редактировать нельзя, мол он все-равно потом автоматически генерируется и все вами сделанное потрется. Это не совсем так. Перезапись файла происходит только по команде sudo update-grub Пока эта команда не выполнена конфиг не меняется системой (во всяком случае я не обнаружил обратное)

Таким образом решением проблемы автозапуска системы в случае сбоя будет замена кода в файле /boot/grub/grub.cfg на следующий:

if [ ${recordfail} = 1 ]; then
#  set timeout=-1
  set timeout=15
else
  set timeout=0
Исходное значение было # set timeout=-1 Оно заменено на set timeout=15 И теперь если произойдет некорректное выключение системы, меню будет висеть 15 сек, а не до нажатия enter.

Недостатки данного решения:
1. К сожалению этот костыль влечет опасность зацикливания загрузки системы в случае серьезного сбоя в системе.
2. Каждый раз когда вам надо поменять настройки GRUB2 вы запускаете sudo update-grub , а значит перезаписываете /boot/grub/grub.cfg , после чего опять в ручную надо его править.

csm ()
Ответ на: костыль который мне помог от csm

Спасибо :) Хотя я давно уже решил немного другим способом - саму function recordfail { - внутри неё просто clear, по сути пустая команда

I-Love-Microsoft ★★★★★ ()
Ответ на: костыль который мне помог от csm

Re: костыль который мне помог

здесь первичные параметры /etc/grub.d/00_header а редактируем make_timeout () { cat << EOF if [ «\${recordfail}» = 1 ]; then set timeout=${GRUB_RECORDFAIL_TIMEOUT:--1} else set timeout=${2} fi EOF } обновляем sudo update-grub проверяем cat /boot/grub/grub.cfg | grep -C 5 terminal_output

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