Magiczny klawisz SysRq to kombinacja klawiszy w jądrze Linuksa, która, jeżeli opcja CONFIG_MAGIC_SYSRQ została włączona w czasie kompilacji kernela, pozwala użytkownikowi wykonać różne niskopoziomowe komendy niezależnie od stanu systemu używającego SysRq. Jest często używany do odzyskania systemu ze stanu zawieszenia lub do ponownego jego uruchomienia bez zniszczenia systemu plików.
Magiczne komendy
Kombinacja składa się z Alt, SysRq i innego klawisza:
- od 0 do 9 ustawia poziom logu konsoli, który kontroluje typy wiadomości kernela , które są wyjściem konsoli,
- b natychmiastowo uruchamia ponownie system bez odmontowania partycji czy synchronizacji
Użycie samej sekwencji Alt+SysRq+B może zaowocować zniszczonym systemem plików
- c uruchamia ponownie kexec[1] i wyjście crashdump’a[2]
- e wysyła sygnał SIGTERM[3] do wszystkich procesów poza init (PID 1)
- f wywołuje oom_kill, który zabije proces absorbujący najwięcej pamięci
- h lub inny klawisz nieprzypisany żadnej komendzie, wyświetla zwięzłą pomoc w konsoli
- i wysyła sygnał SIGKILL[4] do wszystkich procesów poza init
- k zabija wszystkie procesy w aktualnej wirtualnej konsoli (tak więc może zostać użyty do zabicia X’ów i programów svgalib, zobacz poniżej)
- l wysyła sygnał SIGKILL do wszystkich procesów włączając init,
- m wyświetla aktualną informację o pamięci w konsoli
- o wyłącza system
- p wyświetla aktualne rejestry i flagi procesora w konsoli
- r przełącza klawiaturę z trybu raw, używanego przez takie programy jak X11 i svgalib, w tryb XLATE
- s usiłuje zsynchronizować wszystkie zamontowane systemy plików
- t wyświetla listę aktualnych zadań i informacje o nich w konsoli
- u usiłuje odmontować wszystkie zamontowane systemy plików w trybie tylko do odczytu
- v wyświetla informację Voyager SMP
Dostęp z terminala i konfiguracja
Jeżeli maszyna jest niedysponowana lub jest sterowana na odległość, magiczne komendy można wykonać za pomocą terminala. To jest jednakże zależne od posiadania dostępu do powłoki w maszynie. By wykonać magiczne komendy, wpisz pożądaną komendę do SysRq trigger w procfs. Na przykład:
echo b > /proc/sysrq-trigger
To jest równoznaczne kombinacji klawiszy Alt+SysRq+B, która ponownie uruchamia komputer.
Ta właściwość jest kontrolowana zarówno przez opcję w czasie kompilacji jądra, CONFIG_MAGIC_SYSRQ, jak i kernelowy parametr sysctl, kernel.sysrq. Niektóre dystrybucje umożliwiają tylko opcję w czasie kompilacji jądra, ale inne, jak Ubuntu, umożliwiają te właściwości standardowo. By włączyć lub wyłączyć wywołania SysRq:
echo 0 > /proc/sys/kernel/sysrq
echo 1 > /proc/sys/kernel/sysrq
Odpowiednio wyłącza lub włącza wywołania. Selektywne włączenie komend jest nadal możliwe.
Awaryjny ponowny rozruch
„Raising Elephants Is So Utterly Bonkers” (polski odpowiednik „Rybak Edward Idzie Spożyć Ulubiony Browar”) jest mnemonicznym wymysłem dla zapamiętania sekwencji klawiszy, która powinna być użyta jako alternatywa dla ciskania w klawisz POWER, jeżeli Linux Ci się kiedykolwiek zawiesi i będzie potrzebny ponowny rozruch.
- Alt+SysRq+R – wyłącza klawiaturę z czystego trybu
- Alt+SysRq+E – kończy wszystkie procesy (oprócz init)
- Alt+SysRq+I – zabija wszystkie procesy (oprócz init)
- Alt+SysRq+S – synchronizuje dysk(i)
- Alt+SysRq+U – odmontowuje wszystkie systemy plików tylko do odczytu
- Alt+SysRq+B – uruchamia ponownie komputer
„Raising Skinny Elephants Is Utterly Boring” jest alternatywną „pamięciówką” dla tych samych sekwencji klawiszy, jedynie przekładając synchronizację systemów plików przed zamykanie i zabijanie wszystkich procesów.
Niezależnie od tego, która sekwencja została wybrana, powinna być wykonywana w wolnym tempie, dając systemowi szansę na wykonanie jednej czynności zanim każemy mu wykonać następną. Wykonując sekwencję powoli pozwalamy systemowi na bezpieczne zakończenie wszystkich procesów zanim wykonamy drastyczniejszą komendę zabicia wszystkich procesów. Jednakże, by zminimalizować ryzyko utraty danych, dobrym pomysłem jest poczekanie między komendą synchronizacji a odmontowania dysków i na koniec wydać komendę ponownego rozruchu.
Alternatywą do wykonania sekwencji klawiszy REISUB/RSEIUB jest proste wciśnięcie Alt+SysRq+R, jak Ctrl+Alt+Delete. Jest to równoważne do wydania przez root’a komendy „shutdown now” w konsoli; wyłączenie po sekwencji Ctrl+Alt+Del zabiera systemowi krótką chwilę. Jednakże, nie wszystkie Linuksy obsługują prostszą metodę.
Programy graficzne
Jeżeli magiczne klawisze SysRq są używane, by zabić zawieszony program graficzny, program nie ma szans by odzyskać tryb tekstowy. To może zrobić wszystko nieczytelnym. Komendy „textmode” (część SVGAlib) i „reset” potrafią odzyskać tryb tektowy i zrobić konsolę znów czytelną.
Terminologia
kexec – pozwala na ominięcie BIOS-u i bootloadera, i na załadowanie nowego jądra
crashdump – narzędzie pomocnicze crashdumpd wykorzystywane do raportowania błędów
SIGTERM – poprawne zamknięcie procesu
SIGKILL – unicestwienie procesu co może powodować utratę wszystkich zawartych w nim danych (nie ma możliwości przechwycenia tego sygnału przez proces)
Pragniemy uruchomić konkurs na polski odpowiednik “Raising Elephants Is So Utterly Bonkers”, oraz “Raising Skinny Elephants Is Utterly Boring”, dla zwycięzcy mamy niesamowitą nagrodę w postaci umieszczenia tekstu w artykule 😀 Wszystkie propozycję prosimy umieszczać w komentarzach.
rybak edward idzie spożyć ulubiony browar 😉
A co to w ogóle jest ten „Raising Elephants”?
Wystarcza S, U, B zamiast całego R, E, I, S, U, B. Artykuł całkiem w porządku, opisywałem to rok temu na swoim joggerze ;]
Jedna uwaga: nie poleca się stosowania SysRq na systemach korzystających z partycji reiserfs, xfs oraz jfs – istnieje duże niebezpieczeństwo utraty danych.
„Wychowywanie słoni”
Fajny ten SysRq, chyba włączę sobie na stałe;)
Ranienie Elokwętnych Strusi Intensywnie Uczula Brzuch
[quote post=”616″]Użycie samej sekwencji Alt SysRq B może zaowocować zniszczonym systemem plików[/quote]
Dziwne bo sam to kilkukrotnie robiłem i nic się nie stało, nawet nie wiedząc o tym wrzuciłemt to na forum 😀
http://forum.ubuntu.pl/viewtopic.php?p=212159#212159
Ranny Emu Sumiennie Intensyfikuje Ucieczke Buszem
night: mam rozumieć że podczas totalnego zawieszenia się systemu, kiedy nic bezpiecznego nie może go reaktywować, lepiej jest użyć twardego restartu niż SysRq?
@acidburnpl: nie, nic takiego nie napisałem 🙂 Jeśli jest totalne zawieszenie systemu (co skutkuje także zawieszeniem jądra i zawieszeniem init) nawet SysRq nie pomoże – kernel nie odbierze niskopoziomowego zapytania. A jeśli chodzi o pominięcie R, E, I -> synchronizacja dysków wystarczy dla zapisania danych z aplikacji.
R-E-wolta I S-U-B-kultura
REIS UBeków
Artykuł na pewno się przyda. Teraz tylko trzeba poczekać aż się system zawiesi. 😉
Romana Edwarda I Stefana Użądliły Bąki
Coś rzadko dodawane są wpisy ;{
Jak dla mnie Rybak Edward wymiata 😀
Zwycięzcą za rozwinięcie skrótu REISUB jest „Rybak Edward Idzie spożyć Ulubiony Browar”. Gratulujemy 😀
Jeszcze przydałoby się coś dla RSEIUB, najlepiej jak w roli głównej wystąpi również Rybak Edward.
Rybak Szalony Edward Ilustruje Ulubioną Bajkę 😉
Sorry za double-commenta:
Rybacy Szanują Edwarda I Uruchamiają BSD xD
Rybak Edward innym sposobem uruchamia bios
1. Rybacy Syntetyzują Eksperymentalny, Intensywnie Uzależniający Bimber.
2. Robotnicy Sprawdzają Ewentualną Idiotoodporność U-Buntu.
3. Rżnij, Siecz, Eksterminuj Idiotów, Ukatrupiaj Baranów…
4. Rebelia Szerzy Ekstremizm, Intensywnie Upowszechniając Bunt.
5. Ratuj Się, Emeryku, I Ukatrup Bestię!
I jak? 🙂
Ciekawe, czy jeszcze ktoś to przeczyta…
Zastanawiam się, dlaczego nikt się nie spytał, co zrobić, jak nie ma takiego klawisza (SysRq)…
Może to śmieszne, ale u mnie na klawiaturze (Logitech) napis się nie zmieścił i metodą prób i błędów doszedłem, że to jest Print Screen! Chyba warto o tym wspomnieć.
Nigdy z SySRq nie korzystałem, ale ostatnio coś sie serwerek psuje i mam nadzieję, że ten opis będzie dla mnie bardzo pomocny.
Wielkie Dzięki za super opis!!!
A ja zadam dość głupie pytanie: lewy, czy prawy Alt? (o ile ma to znaczenie)
Witam! mam pytanie czy Unix też obsługuje owe nisko poziomowe sygnały?
Wiem, że artykuł swoje latka ma, ale nadal aktualny. Przydałoby się wspomnieć, że komenda
echo 1 > /proc/sys/kernel/sysrq
nie zadziała na uprawnieniach użytkownika i dodanie sudo przed nią nie pomoże. Musimy być zalogowani na roota 'sudo su’ i wtedy ją wykonać lub zamiast tego użyć sprytniejszego sposobu
'echo 1 | sudo tee /proc/sys/kernel/sysrq’.