Pomimo iż Linux uchodzi za stabilne środowisko to raz na jakiś czas trafi się ciężka zwiecha - z powodu przeciążenia, awarii sprzętu… nieistotne…
Załóżmy że licho wzięło za cel główny serwer plików lub bazę danych dla wielu, wielu stron internetowych. Dostać się po ssh nie możemy bo lecą timeout’y, a siedząc bezpośrednio przy klawiaturze konsola nie reaguje. Mimo to coś ostro daje po dyskach, więc ewentualny twardy reset to na bank utrata części plików… jeśli system po nim w ogóle wstanie… 😑
Jeśli powyższa historyjka wygląda znajomo to zdecydowanie warto czytać dalej.
W wielu dystrybucjach kernel standardowo jest skompilowany z opcją CONFIG_MAGIC_SYSRQ - opcja opisana jest jako szczególnie przydatna dla developerów jądra ale i nam może się przysłużyć jako ostatnia deska ratunku przed twardym resetem.
Aby wywołać funkcję trzeba przytrzymać na klawiaturze: Lewy ALT + PrintScrn/SysRq i przycisk określający funkcję. Kilka z możliwych funkcji to:
- r - przełącz klawiaturę z trybu RAW do XLATE (w wolnym tłumaczeniu: odzyskaj obsługę klawiatury od X’ów),
- e - wyślij SIGTERM do wszystkich procesów z wyjątkiem init’a,
- i - wyślij SIGKILL do wszystkich procesów z wyjątkiem init’a,
- s - wywołaj sync dla wszystkich zamontowanych zasobów (czyli zapisz wszystkie niezapisane dotąd transakcje dyskowe),
- u - przemontuj wszystkie zamontowane zasoby to trybu tylko do odczytu,
- b - natychmiast uruchom ponownie system, bez odmontowania partycji i bez synchronizacji dysków.
To tylko część funkcji, ale wykonanie ich w kolejności w jakiej zostały tu wypisane (czyli reisub) powinno skutkować STOSUNKOWO bezpiecznym resetem, po którym nawet nie powinno być potrzebne skanowanie dysków fsck’iem. Każda z funkcji potrzebuje kilka/kilkanaście sekund na wykonanie (szczególnie warto zaczekać by po sync’u przestała migać kontrolka aktywności dysków twardych) - nie warto się spieszyć. Po ostatnim wywołaniu system powinien się zrestartować - zdarzyło mi się tylko kilka razy by procedura ta zawiodła.
Metodę można też wykorzystać dla serwerów zdalnych, które np. z jakiegoś powodu nie chcą się zrestartować w standardowy sposób. Można to zrobić wysyłając poszczególne polecenia do /proc/sysrq-trigger
, np. tak:
echo b > /proc/sysrq-trigger
Na zdalnych maszynach i VPS’ach wygodniejsze może być skonfigurowanie demona sysrqd
.
Dla zainteresowanych, więcej funkcji Magic SysRq (głównie diagnostycznych) i dokładniejszy opis można znaleźć na stronie wiki .