Почему «shutdown -r now» ведет себя иначе, чем «reboot -f» в Debian Linux?

11

Недавно мне пришлось столкнуться с неприятной, периодически возникающей проблемой точки монтирования клиент / сервер NFS. Когда проблема возникает на клиенте, я не могу размонтировать ее вместе с каким-то другим странным поведением. Единственное немедленное решение, которое у меня есть на сегодняшний день, - это перезагрузить клиентский компьютер

Но shutdown -r nowне работает вообще. С тех пор я обнаружил reboot -f, что делает перезагрузку системы. Почему? Я прочитал справочные страницы, но, похоже, ничего не отвечает на мой вопрос.

Почему shutdown -r nowведет себя иначе, чем reboot -f?

(Я продолжаю решать проблему NFS, но это не мой вопрос здесь.)

Стю Томпсон
источник

Ответы:

20

На странице справки по завершению работы:

По истечении TIME shutdown отправляет запрос демону init (8), чтобы система перешла на соответствующий уровень выполнения.

initзапускает и останавливает задания, когда система меняет уровни выполнения. При вводе уровня запуска 6 из-за перезагрузки система запускает все сценарии в /etc/rc6.d. Поскольку ваша система не отвечает shutdown, скорее всего, сценарий /etc/rc6.d(возможно, K05nfs-commonучитывая ваши проблемы с NFS) застрял, не позволяя завершить последовательность завершения работы. Фактически, последнее, что запускает init при переходе на уровень выполнения 6, это reboot -d -f -i.

reboot -f пропускает все скрипты и перезагружает систему напрямую.

Cakemox
источник
Большое спасибо за ссылку вашего ответа на мой контекст.
Стю Томпсон
12

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

reboot -fс другой стороны, немедленно перезагружает сервер, ничего не делая. ( rebootпрограмма initвызывает отключение сервера. Без -fфлажка она проверит, initсчитает ли она, что в данный момент перезагружается, и если нет, то shutdownвместо этого она вызовет процесс).

DerfK
источник
Большое спасибо за ссылку вашего ответа на мой контекст.
Стю Томпсон,
4

Поскольку 'reboot -f' не переходит на уровень выполнения 0 - он говорит операционной системе непосредственно инициализировать процессор. Страница руководства на моем ближайшем Linux-боксе гласит:

 -f     Force halt or reboot, don't call shutdown(8)

Страница man shutdown объясняет больше.

symcbean
источник
1

Если вы используете intrопцию на своих монтируемых NFS, то shutdown -r nowсможете убивать процессы, ожидающие завершения NFS IO. Это может привести к повреждению файла, но, вероятно, не более, чем shutdown -fсоздает.

BillThor
источник