Когда требуется перезагрузка?

27

Помимо обновления ядра, есть ли какие-либо изменения в системе Linux, которые требуют перезагрузки? Я знаю, что бывают ситуации, когда перезагрузка облегчает задачу, но есть ли такие, которые нельзя выполнить, кроме как перезагрузкой?

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

отметка
источник
3
все можно сделать без перезагрузки. даже изменение ядра может быть выполнено с помощью ksplice, чтобы вы могли выполнить горячую замену ядра. Единственное, что вы должны принять во внимание, это то, что создание всего без перезагрузки может быть очень сложным
Kiwy
4
Ваш вопрос очень широкий, потому что «система Linux» может означать много разных вещей.
Зрин
Также «любые изменения» могут означать довольно много разных ситуаций. Является ли восстановление после сбоя жесткого диска, являющегося частью зеркала MD, таким изменением? Если да, то, к сожалению, иногда требуется перезагрузка, потому что, например, некоторые сбои жесткого диска (на некоторых контроллерах жесткого диска) могут привести к зависанию системы. Но вы, вероятно, не спрашиваете о таких "изменениях" ...
Зрин
3
@Kiwy Технически ksplice не меняет ядра . Ksplice позволяет исправлять работающее ядро, пока оно работает. Возможно, вы думаете о kexec , который позволяет загружать новый образ ядра «поверх» работающего ядра в памяти.
Томас Найман
Это напоминает мне, Windows XP (я никогда не выходил за рамки) никогда не закрывается о перезапуске, даже если он просто обновил IE8 (или любой другой номер), который не был открыт в течение 4 лет, с момента установки Windows и, следовательно, необходимость загрузки браузер.
Шахбаз

Ответы:

44

Несколько вещей приходят на ум:

  • Выздороветь от паники ядра

    Паника ядра по определению не может быть восстановлена ​​без перезапуска ядра.

  • Восстановление от зависаний, которые оставляют вас без терминального доступа

    Если система не отвечает, и вы не можете выполнить команды восстановления, единственное, что вы можете сделать, это перезагрузить компьютер. Как правило, вы хотите избежать ручного включения питания. Для подобных ситуаций в ядре Linux есть поддержка Magic SysRq, которую можно использовать для перезагрузки машины в чрезвычайной ситуации.

    Пока CONFIG_MAGIC_SYSRQопция включена в конфигурации ядра, аkernel.sysrq sysctl опция включена, вы можете выдавать команды непосредственно ядру с помощью волшебных комбинаций клавиш SysRq:

    Обратите внимание, что Alt+ SysRqниже означает, что нажмите и удерживайте Alt , затем нажмите и удерживайте SysRq (обычно это PrintScrnклавиша).

    1. Alt+ SysRq+ r: восстановить контроль над клавиатурой
    2. Alt+ SysRq+ e: отправить SIGTERMвсем процессам, кроме init, давая им возможность завершить изящно
    3. Alt+ SysRq+ i: отправить SIGKILLвсем процессам, кроме init, заставляя их завершить
    4. Alt+ SysRq+ s: попытка синхронизации всех смонтированных файловых систем
    5. Alt+ SysRq+ u: перемонтировать всю файловую систему только для чтения
    6. Alt+ SysRq+ b: перезагрузка или

      Alt+ SysRq+ o: выключение

    Мнемоника магических комбинаций клавиш SysRq для попытки постепенной перезагрузки:

    " R Eboot Е VEN Я F S ystem U tterly В Roke "

    Для безголовых серверов существует даже цель iptables, позволяющая удаленные последовательности SysRq по сети.

  • Восстановление из состояния без загрузки

    Если система уже была приведена в состояние, при котором обычная загрузка невозможна (например, в результате неудачного обновления системы, поврежденной файловой системы и т. Д.), Единственным способом доступа к консоли восстановления в системе может быть перезагрузка используя соответствующие параметры загрузки.

  • Изменить параметры ядра во время загрузки

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

Томас Найман
источник
3
«Перезагрузка, даже если система совершенно сломалась». Я предпочитаю этот вопрос на всякий случай, но не думаю, что когда-либо забуду об этом.
embedded.kyle
1
Возможно, стоит отметить, что вы можете выйти из паники с помощью kexec и избежать полной перезагрузки. Это в равной степени относится и к выходу из точки загрузки без загрузки. (в любом случае, это не одно и то же, по крайней мере, в системе x86). Однако +1 для остальной части этого ответа.
Vality
@Vality Спасибо за ваш комментарий. Если kexec влечет за собой перезагрузку, возможно, в определенной степени зависит от их точки зрения. Документация Kdump , например , описывает Kexec-на-паники , как перезагрузка , которая сохраняет образ памяти системного ядра. Что касается вопроса о не загружаемом состоянии, я также рассмотрел такие вещи, как неправильная конфигурация загрузчика (например, невозможность загрузки ядра), где kexec не помогает. Учитывая природу вопроса, я думаю, что некоторое расхождение во взглядах относительно семантики неизбежно.
Томас Найман
@ThomasNyman Спасибо за ваш подробный ответ, глядя на вопрос, который вы правы, я чувствую. Я думаю, что разговор о kexec, вероятно, просто излишне усложнит вещи для целевой аудитории или этот вопрос. И вы также делаете хорошее замечание относительно ошибок загрузчика.
Vality
Я никогда не замечал этот маленький SysRq, написанный под экраном печати! Это круто. Я хотел бы знать это, когда я изучал программирование модуля ядра!
Шахбаз
2

Есть два раза, когда я могу думать о том, где я хотел бы перезагрузиться:

  1. Когда мне нужно убедиться, что система может загрузиться в правильном состоянии.

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

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

  2. Когда системная библиотека была обновлена.

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

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

Гейб
источник
Существуют лучшие способы найти все двоичные файлы в зависимости от определенной библиотеки, если вы используете хороший менеджер пакетов. На ум приходит revdep-rebuilt из Gentoo.
Spidey
1
@Spidey: После того, как вы перестроите эти двоичные файлы, как вы обеспечите отсутствие старых процессов, работающих с ошибочной библиотекой?
Гейб
1
Как узнать, в какие демоны загружены нарушающие библиотеки?
Гейб
1
@Gabe Вы можете, например, проверить, какие процессы отображают библиотеки в их пространство памяти, lsofпрежде чем обновлять библиотеки.
Томас Найман
1
@Gabe Конечно, и хотя я согласен с тем, что это вполне веская причина для перезагрузки, OP явно не спрашивает, в каких случаях перезагрузка более удобна, но когда перезагрузка абсолютно необходима .
Томас Найман
0

Если вы имеете в виду запланированные изменения в конфигурации программного обеспечения и предполагаете, что оборудование работает идеально (я такого еще не видел) и программное обеспечение без ошибок (вы знаете ...), то только ошибка в ядре или драйвере заставит вас перезагружать. :)

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

Zrin
источник