Недавно мне пришлось столкнуться с надоедливой, периодически возникающей проблемой зависшей точки монтирования клиент / сервер NFS. Когда проблема возникает на клиенте, я не могу размонтировать, а также некоторые другие странности. Единственное немедленное решение, которое у меня есть на сегодняшний день, - это перезагрузить клиентский ящик.
Но shutdown -r now
вообще не работает. С тех пор я обнаружил reboot -f
, который делает перезагрузите систему. Зачем? Я прочитал справочные страницы, но, похоже, на мой вопрос нет ответа.
shutdown -r now
вести себя иначе, чем reboot -f
?(Я продолжаю решать проблему NFS, но это не мой вопрос.)
На странице руководства по выключению:
По истечении TIME команда shutdown отправляет запрос демону init (8), чтобы перевести систему на соответствующий уровень выполнения.
init
запускает и останавливает задания по мере того, как система меняет уровни выполнения. При переходе на уровень запуска 6 из-за перезагрузки система запускает все сценарии в /etc/rc6.d. Поскольку ваша система не отвечает на shutdown
, скорее всего, это сценарий в /etc/rc6.d
(возможно K05nfs-common
учитывая проблемы с NFS) зависает, не позволяя завершиться последовательности завершения работы. Фактически, последнее, что запускает init при переходе на уровень запуска 6, - это reboot -d -f -i
.
reboot -f
пропускает все скрипты и перезагружает систему напрямую.
shutdown
инструктирует init
чтобы начать процедуру выключения, которая включает в себя информирование пользователей, вошедших в систему, о завершении работы системы, корректное завершение всех процессов, размонтирование и синхронизацию дисков и т. д. Вы зависаете здесь, потому что процессы, застрявшие в ожидании ввода-вывода, как правило, очень трудно убить, а застрявшее монтирование NFS не может быть размонтировано.
reboot -f
, с другой стороны, немедленно перезагружает сервер, не делая этого. (reboot
это программа init
призывает выключить сервер. Без -f
флаг, он проверит, init
думает, что в настоящее время перезагружается, и если нет, он вызовет shutdown
вместо того, чтобы начать процесс).
Поскольку 'reboot -f' не переходит на уровень запуска 0 - он сообщает ОС, что нужно повторно инициализировать ЦП напрямую. На странице руководства на моем ближайшем Linux-сервере написано:
-f Force halt or reboot, don't call shutdown(8)
На странице руководства по выключению объясняется больше.
Если вы используете intr
вариант на ваших монтировках NFS, затем shutdown -r now
должен иметь возможность убивать процессы, ожидающие завершения ввода-вывода NFS. Это может привести к повреждению файла, но не более чем shutdown -f
создает.