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


15

Так же, как любопытство; что-то пошло не так с машиной Linux, из-за чего корневая файловая система показала «64Z». Некоторые команды работают, вроде top, dfи kill, но другие, например reboot, предлагают «команда не найдена» (так как она не может прочитать корневую файловую систему) и chmodвызывают ошибку сегментации.

Есть ли способ перезагрузить систему в любом случае, т.е. без rebootпрограммы? Я попытался kill -PWR 1(отправив SIGPWR в init), но, похоже, это ничего не дало.

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


Надеюсь, это избавит меня от проблемы в следующий раз ... [ cyberciti.biz/tips/reboot-linux-box-after-a-kernel-panic.html ]
gatoatigrado

Вы видели, что проблема с root fs вызвала панику ядра?
Ханан Н.

Ответы:


25

Попробуйте перезагрузиться с помощью волшебного ключа sysrq:

echo b > /proc/sysrq-trigger

Для получения дополнительной информации прочитайте вики или документацию по ядру .


1
Благодарность! Это перезагрузило систему. (К сожалению, все, что случилось с корневой файловой системой, кажется невосстановимым ... печально).
gatoatigrado

5

RAC (карта удаленного доступа) или iLO (встроенная подсветка) или MP (процессор управления) предоставят вам средства для перезагрузки вашего сервера.

Например, если у вас Dell PowerEdge с RAC-картой (называемой DRAC), вы можете выключить и снова включить сервер через ssh:

ssh drac "racadm serveraction powercycle"

Другой вариант - использовать Web-GUI для RAC / iLO и делать то же самое там.

Существует также открытый стандарт для этого материала: IPMI.


3

Еще более интересным, чем ответ @Rush, является возможность перезагрузить (и многое другое) систему, даже если система вообще не реагирует на клавиатуру. Но он должен отвечать на пакеты ping (ICMP).

Смотрите здесь для полной документации и инструкции о том, как реализовать это.


4
Как насчет дать краткую инструкцию / краткое изложение принципов, а не просто ссылку?
kizzx2

вам нужно немного настроить этот подход, но, безусловно, идеальная идея.
gatoatigrado

Это звучит интересно, но разве не существует значительного риска для безопасности? Разрешение перезагрузки сервера с помощью одного ICMP-пакета выглядит как атака типа «отказ в обслуживании», ожидающая своего завершения.
bgvaughan

@bgvaughan: вы правы, и по ссылке, которую я привел выше, есть плюсы и минусы в этом, и один из них - безопасность, хотя вы можете ограничить, кто может это сделать.
Ханан Н.

2

Самый простой способ - просто изменить уровень выполнения.

В Linux вы можете сделать:

Prompt# init 6

Более подробная информация здесь: http://linux.about.com/od/itl_guide/a/gdeitl36t04.htm


1
Это не будет работать в этой ситуации. Команда init находится в / sbin (по крайней мере, в Ubuntu), поэтому она требует доступа к файловой системе.
Солнечно

1

Это требует предварительной настройки, но если вы привыкли к отказу машины (например, из-за низкоуровневой разработки на ней), вам может потребоваться настроить сторожевой таймер , то есть задачи ядра или пользователя, которые автоматически перезагружают его при это становится безразличным. Linux может использовать аппаратный сторожевой таймер, если таковой имеется на материнской плате, или программный сторожевой таймер.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.