Magic SysRq key (SysRq, System Request) pozwala wysyłać niskopoziomowe komendy bezpośrednio do jądra, z pominięciem przestrzeni użytkownika. Działa tak długo, jak samo jądro jeszcze pracuje — nawet gdy SSH nie odpowiada, GUI jest zamrożone i nic innego nie reaguje. To standardowy sposób na bezpieczny restart zawieszonego systemu bez twardego resetu.

Jak włączyć i używać SysRq?

Ze względów bezpieczeństwa, na wielu dystrybucjach funkcja ta jest domyślnie ograniczona. Pełną kontrolę włącza się za pomocą sysctl.

  1. Sprawdzenie statusu:

    cat /proc/sys/kernel/sysrq
    

    Wartość 1 oznacza, że wszystkie funkcje są włączone. Inne wartości (np. 176) oznaczają, że tylko niektóre, bezpieczniejsze komendy są dozwolone.

  2. Włączenie pełnej funkcjonalności (tymczasowo):

    sudo sysctl -w kernel.sysrq=1
    
  3. Włączenie na stałe: Dodaj wpis do pliku /etc/sysctl.conf (lub do pliku w /etc/sysctl.d/):

    kernel.sysrq = 1
    

Jak wywołać komendy?

  • Na maszynie fizycznej (z klawiaturą): Trzymaj wciśnięte klawisze Alt + SysRq (często jest to ten sam klawisz co Print Screen), a następnie wciśnij klawisz odpowiadający komendzie (np. b dla restartu). Alt + SysRq + b

  • Na maszynie zdalnej (przez SSH lub konsolę): Nie mamy fizycznej klawiatury, więc używamy polecenia echo, aby zapisać literę komendy do specjalnego pliku w /proc:

    echo b | sudo tee /proc/sysrq-trigger
    

Najważniejsze komendy SysRq: Sekwencja R-E-I-S-U-B

Najsłynniejszym zastosowaniem SysRq jest bezpieczny restart zawieszonego systemu. Zamiast “twardego” resetu, wykonujemy sekwencję komend, która minimalizuje ryzyko utraty danych. Łatwo ją zapamiętać jako hasło “Raising Elephants Is So Utterly Boring” (lub, w mniej cenzuralnej wersji, “Reboot Even If System Utterly Broken”).

Wykonuj każdą komendę, czekając kilka sekund pomiędzy nimi:

  1. R - echo r > /proc/sysrq-trigger

    • Raw: Przełącza klawiaturę z trybu XLATE do trybu surowego, odbierając kontrolę np. serwerowi graficznemu X.org. Pierwszy krok do odzyskania kontroli.
  2. E - echo e > /proc/sysrq-trigger

    • End: Wysyła sygnał SIGTERM do wszystkich procesów (oprócz init), prosząc je o grzeczne zakończenie pracy.
  3. I - echo i > /proc/sysrq-trigger

    • Interrupt: Wysyła sygnał SIGKILL do wszystkich procesów (oprócz init), brutalnie je kończąc. To na wypadek, gdyby nie posłuchały grzecznej prośby.
  4. S - echo s > /proc/sysrq-trigger

    • Sync: Synchronizuje wszystkie zamontowane systemy plików. Zapisuje wszystkie dane z buforów na dysk. To kluczowy krok zapobiegający utracie danych!
  5. U - echo u > /proc/sysrq-trigger

    • Unmount: Przemontowuje wszystkie systemy plików w tryb tylko do odczytu (read-only). To dodatkowe zabezpieczenie przed uszkodzeniem danych podczas restartu.
  6. B - echo b > /proc/sysrq-trigger

    • Boot: Natychmiastowy restart systemu, bez odmontowywania systemów plików czy synchronizacji (ale zrobiliśmy to już w krokach s i u). Odpowiednik wciśnięcia przycisku “Reset”.

Inne przydatne komendy

  • h - Help: Wyświetla listę dostępnych komend w logu kernela (dmesg).
  • m - Memory: Wyświetla informacje o użyciu pamięci.
  • t - Tasks: Pokazuje listę aktualnie uruchomionych zadań (procesów).
  • f - Full (OOM): Wywołuje “OOM killer” (Out-of-Memory killer), aby zabił najbardziej pamięciożerny proces. Przydatne, gdy system się zawiesił z powodu braku pamięci.

Włącz kernel.sysrq=1 na serwerach i zapamiętaj sekwencję REISUB — może zapobiec utracie danych, gdy jedyną alternatywą byłby twardy reset.