Dlaczego „shutdown -r now” zachowuje się inaczej niż „restart” -f ”w systemie Debian Linux?

11

Niedawno miałem do czynienia z przykrym, przerywanym problemem punktu zawieszenia klienta / serwera NFS. Kiedy problem występuje na kliencie, nie mogę odmontować, podobnie jak inne dziwne zachowania. Jedynym natychmiastowym rozwiązaniem, jakie mam do tej pory, jest ponowne uruchomienie skrzynki klienta.

Ale w shutdown -r nowogóle nie działa. Od tamtej pory odkryłem reboot -f, że restartuje system. Dlaczego? Przeczytałem strony podręcznika, ale nic nie wydaje się odpowiadać na moje pytanie.

Dlaczego shutdown -r nowzachowuje się inaczej niż reboot -f?

(Nadal rozwiązuję problem z NFS, ale to nie jest moje pytanie tutaj).

Stu Thompson
źródło

Odpowiedzi:

20

Ze strony podręcznika zamykania:

Po upływie CZASU zamknięcie wysyła żądanie do demona init (8) w celu sprowadzenia systemu do odpowiedniego poziomu działania.

inituruchamia i zatrzymuje zadania, gdy system zmienia poziomy uruchamiania. Podczas wchodzenia na poziom 6 z powodu ponownego uruchomienia system uruchamia wszystkie skrypty w /etc/rc6.d. Ponieważ system nie reaguje shutdown, prawdopodobnie skrypt w /etc/rc6.d(prawdopodobnie K05nfs-commonbiorąc pod uwagę problemy z NFS) utknął, uniemożliwiając zakończenie sekwencji zamykania. W rzeczywistości ostatnią rzeczą, którą init uruchamia po przejściu na poziom 6, jest reboot -d -f -i.

reboot -f pomija wszystkie skrypty i bezpośrednio restartuje system.

Cakemox
źródło
Dziękuję bardzo za połączenie odpowiedzi z moim kontekstem.
Stu Thompson
12

shutdowninstruuje, initaby rozpocząć procedurę zamykania, która polega na powiadomieniu zalogowanych użytkowników, że system się wyłącza, zgrabnym zabiciu wszystkich procesów, odmontowaniu i synchronizacji dysków itd. Jesteś zawieszony, ponieważ procesy, które utknęły w oczekiwaniu na IO, są bardzo trudne do zabicia, a twojego zablokowanego podłączenia NFS nie można odmontować.

reboot -f, z drugiej strony, natychmiast ponownie uruchamia serwer bez robienia tego. ( rebootto initwywołania programu w celu zamknięcia serwera. Bez -fflagi sprawdzi, czy inituważa, że ​​obecnie się restartuje, a jeśli nie, zadzwoni, shutdownaby rozpocząć proces).

DerfK
źródło
Dziękuję bardzo za połączenie odpowiedzi z moim kontekstem.
Stu Thompson
4

Ponieważ „restart” -f ”nie przechodzi na poziom 0 - nakazuje systemowi operacyjnemu ponowne zainicjowanie procesora bezpośrednio. Strona podręcznika na moim najbliższym Linux-ie mówi:

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

Strona podręcznika zamykania wyjaśnia więcej.

symcbean
źródło
1

Jeśli użyjesz tej intropcji w instalacjach NFS, shutdown -r nowpowinno być możliwe zabicie procesów oczekujących na IO NFS na zakończenie. Może to spowodować uszkodzenie pliku, ale najprawdopodobniej nie spowoduje więcej shutdown -f.

BillThor
źródło