Kiedy wymagany jest restart?


27

Czy oprócz aktualizacji jądra są jakieś zmiany w systemie Linux, które wymagają ponownego uruchomienia? Wiem, że są sytuacje, w których ponowne uruchomienie ułatwia rzeczy, ale czy są takie, których nie można wykonać inaczej niż przy ponownym uruchomieniu?

Aby wyjaśnić: myślę o typowym systemie stacjonarnym lub serwerowym, który nie cierpi z powodu awarii sprzętu.


3
wszystko można zrobić bez restartu. nawet zmiana jądra może być wykonana za pomocą ksplice, dzięki czemu możesz wymieniać jądro na gorąco. Jedyne, co musisz wziąć pod uwagę, to fakt, że wszystko bez restartu może być bardzo skomplikowane
Kiwy

4
Twoje pytanie jest bardzo szerokie, ponieważ „system Linux” może oznaczać wiele bardzo różnych rzeczy.
Zrin

Również „wszelkie zmiany” mogą oznaczać wiele różnych sytuacji. Czy odzyskiwanie z uszkodzonego dysku twardego będącego częścią dublowania MD jest taką zmianą? Jeśli tak, to - niestety - czasami będzie wymagało ponownego uruchomienia, ponieważ na przykład niektóre awarie dysku twardego (na niektórych kontrolerach dysku twardego) mogą powodować brak reakcji systemu. Ale prawdopodobnie nie pytasz o takie „zmiany” ...
Zrin

3
@ Kiwi Technicznie ksplice nie zmienia jądra . Ksplice pozwala na załatanie działającego jądra podczas jego działania. Być może myślisz o kexec , który umożliwia ładowanie nowego obrazu jądra „nad” działającym jądrem w pamięci.
Thomas Nyman

Przypomina mi to, że Windows XP (nigdy nie wykroczyłem poza) nigdy nie zamyka się przed ponownym uruchomieniem, nawet jeśli właśnie zaktualizował IE8 (lub inny numer), który nie był otwarty od 4 lat, od czasu instalacji systemu Windows i stąd konieczność pobrania przeglądarka.
Shahbaz

Odpowiedzi:


44

Przychodzi mi na myśl kilka rzeczy:

  • Odzyskaj z paniki jądra

    Paniki jądra, z definicji, nie można odzyskać bez ponownego uruchomienia jądra.

  • Odzyskaj z zawieszonych, które pozostawiają cię bez dostępu do terminala

    Jeśli system nie reaguje na polecenia i nie możesz wydać poleceń w celu przywrócenia systemu, jedyne, co możesz zrobić, to zrestartować komputer. Zwykle chcesz uniknąć ręcznego wyłączania zasilania. W takich sytuacjach jądro Linuksa ma obsługę Magic SysRq, której można użyć do ponownego uruchomienia komputera w sytuacji awaryjnej.

    Dopóki CONFIG_MAGIC_SYSRQopcja jest włączona w konfiguracji jądra, a kernel.sysrq sysctlopcja jest włączona, możesz wydawać polecenia bezpośrednio do jądra za pomocą magicznych kombinacji klawiszy SysRq:

    Zauważ, że Alt+ SysRqponiżej oznacza naciśnij i przytrzymaj Alt , a następnie naciśnij i przytrzymaj SysRq (zazwyczaj PrintScrnklawisz).

    1. Alt+ SysRq+ r: odzyskaj kontrolę nad klawiaturą
    2. Alt+ SysRq+ e: wysyłaj SIGTERMdo wszystkich procesów, z wyjątkiem tych init, które dają im szansę na pełne zakończenie działania
    3. Alt+ SysRq+ i: wysyłanie SIGKILLdo wszystkich procesów, z wyjątkiem initwymuszania ich zakończenia
    4. Alt+ SysRq+ s: próba synchronizacji wszystkich zamontowanych systemów plików
    5. Alt+ SysRq+ u: podłącz ponownie cały system plików tylko do odczytu
    6. Alt+ SysRq+ b: uruchom ponownie komputer lub

      Alt+ SysRq+ o: zamknij

    Mnemonik dla magicznych kombinacji klawiszy SysRq do próby płynnego ponownego uruchomienia to:

    R eboot E ven I f S ystem U tterly B roke

    W przypadku serwerów bezgłowych istnieje nawet cel iptables umożliwiający zdalne sekwencje SysRq w sieci.

  • Odzyskaj ze stanu nie do rozruchu

    Jeśli system został już doprowadzony do stanu, w którym normalne uruchomienie nie jest możliwe (np. W wyniku nieudanej aktualizacji systemu, uszkodzonego systemu plików itp.), Wówczas jedynym sposobem uzyskania dostępu do konsoli odzyskiwania w systemie może być ponowne uruchomienie przy użyciu odpowiednich opcji czasu rozruchu.

  • Zmień parametry jądra w czasie uruchamiania

    Niektóre parametry jądra (np. W auditcelu włączenia / wyłączenia kontroli jądra) można ustawić tylko wtedy, gdy jądro jest ładowane podczas rozruchu.


3
„Zrestartuj się, nawet jeśli system całkowicie się zepsuje” Faworyzuję to pytanie na wszelki wypadek, ale nie sądzę, żebym kiedykolwiek o tym zapomniał.
embedded.kyle

1
Warto zauważyć, że można wyjść z paniki za pomocą kexec i uniknąć całkowitego ponownego uruchomienia. Dotyczy to również wyjścia z punktu rozruchowego. (w żadnym wypadku nie są one tym samym, przynajmniej w systemie x86). Jednak +1 do końca tej odpowiedzi.
Rzeczywistość

@Vality Dzięki za komentarz. Jeśli kexec wymaga ponownego uruchomienia, być może do pewnego stopnia zależy od punktu widzenia. Na przykład dokumentacja kdump opisuje kexec-on-panic jako restart, który zachowuje obraz pamięci jądra systemu. Jeśli chodzi o kwestię stanu nie do rozruchu, rozważałem również takie rzeczy, jak błędna konfiguracja bootloadera (np. Niepowodzenie ładowania jądra), gdzie kexec nie pomaga. Biorąc pod uwagę naturę pytania, uważam, że pewna różnica zdań na temat semantyki jest nieunikniona.
Thomas Nyman

@ThomasNyman Dziękuję za twoją szczegółową odpowiedź, patrząc na pytanie, które masz rację. Myślę, że mówienie o kexecu prawdopodobnie po prostu niepotrzebnie skomplikuje sprawy odbiorcom docelowym lub temu pytaniu. Masz również rację, jeśli chodzi o błędy programu ładującego.
Rzeczywistość

Nigdy nie zauważyłem tego małego SysRq napisanego pod ekranem! To jest niesamowite. Chciałbym to wiedzieć, kiedy uczyłem się programowania modułów jądra!
Shahbaz,

2

Są dwa razy, kiedy mogę wymyślić, gdzie chciałbym zrestartować komputer:

  1. Kiedy muszę się upewnić, że system może uruchomić się w odpowiednim stanie.

    Kiedyś pracowałem nad systemem, w którym działał jakiś demon. Po kilku latach działania z powodu awarii zasilania nastąpiło ponowne uruchomienie, ale demon nie był częścią procesu uruchamiania i nikt nie miał pojęcia, jak skonfigurowano go wiele lat wcześniej. System był wyłączony przez kilka dni, a my zastanawialiśmy się, jak go zmienić.

    Ponowne uruchomienie jest jedynym sposobem, aby upewnić się, że system uruchomi się ponownie poprawnie po awarii zasilania.

  2. Po aktualizacji biblioteki systemowej.

    Powiedzmy, że w bibliotece współdzielonej z wieloma aplikacjami / serwerami w systemie odkryto poważną lukę w zabezpieczeniach. Możesz zaktualizować bibliotekę bez ponownego uruchamiania, ale ile procesów nadal działa przy załadowanej niezabezpieczonej bibliotece? Możesz starannie zrestartować wszystko przy użyciu starej biblioteki (jeśli możesz to rozgryźć), ale jest to podatne na błędy i może potrwać dłużej niż tylko ponowne uruchomienie.

    Ponowne uruchomienie jest najlepszym sposobem na upewnienie się, że wszystkie uruchomione procesy nadal nie korzystają ze starej, błędnej biblioteki.


Są lepsze sposoby na znalezienie wszystkich plików binarnych w zależności od konkretnej biblioteki, jeśli używasz dobrego menedżera pakietów. przychodzi na myśl revdep-przebudowany z Gentoo.
Spidey,

1
@Spidey: Jak odbudujesz te pliki binarne, w jaki sposób upewnisz się, że nie ma starych procesów działających z biblioteką błędów
Gabe,

1
Skąd wiesz, które demony mają załadowane niepoprawne biblioteki?
Gabe,

1
@ Gabe Możesz na przykład sprawdzić, które procesy zmapowały biblioteki do ich pamięci, lsofzanim zaktualizujesz biblioteki.
Thomas Nyman

1
@ Gabe Pewnie, i chociaż zgadzam się, że jest to całkowicie dobry powód do ponownego uruchomienia, OP wyraźnie nie pyta, w jakich przypadkach ponowne uruchomienie jest bardziej konwencjonalne, ale kiedy ponowne uruchomienie jest absolutnie konieczne .
Thomas Nyman

0

Jeśli masz na myśli planowane zmiany w konfiguracji oprogramowania i zakładasz doskonale działający sprzęt (jeszcze tego nie widziałem) i oprogramowanie wolne od błędów (wiesz ...), to tylko błąd w jądrze lub sterownik zmusiłby cię do restart. :)

Poza tym ... Nie jestem pewien, czy można go wymienić initbez przełączania się w tryb pojedynczego użytkownika i wykonywania magii, która zasadniczo nie różni się niczym od ponownego uruchomienia.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.