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

15

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

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

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

gatoatigrado
источник
Надеюсь, это избавит меня от проблемы в следующий раз ... [ 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.

Nils
источник
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 может использовать аппаратный сторожевой таймер, если таковой имеется на материнской плате, или программный сторожевой таймер.

Жиль "ТАК - перестань быть злым"
источник