SysRq: klávesa pro řešení problémů

28. 8. 2012
Doba čtení: 4 minuty

Sdílet

Nestává se to příliš často, ale i s Linuxem se můžete dostat do situace, kdy systém přestane odpovídat. Buď si za to můžete sami nebo jste narazili na nějakou nepříjemnou chybu. V každém případě je dobré mít v záloze nějaké řešení pro krizové situace. Jedno nabízí například klávesa SysRq, která umí zajímavé věci.

Úvodní poznámka: Funkce klávesy SysRq není v Linuxu žádnou novinkou, je to věc z opravdové linuxové prehistorie. Přesto se o ní příliš nemluví, i když vás dokáže dostat z mnoha problémů. Neškodí si proto o její funkci říct, začátečníky třeba tahle funkce překvapí.

Kouzelná klávesa SysRq (anglicky magic SysRq key) je kombinace kláves, pomocí kterých je možné jádru posílat příkazy bez ohledu na to, v jakém stavu se nachází uživatelské prostředí. Hlavní výhoda SysRq je v tom, že obvykle funguje i v případě zamrznutí prostředí nebo v situaci, kdy si některá aplikace přivlastní vstup z klávesnice a systém na ni přestane reagovat. Dokud jádro běží, je možné s ním takto komunikovat. Až „kernel panic“ zastaví i SysRq.

V takové situaci přichází řada na SysRq, pomocí které můžeme například bezpečně odpojit souborové systémy a restartovat počítač. Zmíněnou klávesu nalezneme obvykle v horní řadě kláves, za klávesou F12. U některých klávesnic je o jednu řadu níže, nebo někde úplně jinde. V každém případě je kombinována s funkci Print Screen. Klávesu najdeme i na noteboocích, kde je její umístění ještě variabilnější. Často je ale pro její stisknutí třeba navíc podržet klávesu Fn.

Aktivace SysRq

Aby bylo možné vůbec funkci klávesy začít využívat, je třeba ji v jádře zapnout. Některé distribuce mají ve výchozím stavu SysRq vypnutou kvůli bezpečnosti. Náhodný návštěvník, který by se dostal ke klávesnici, by totiž mohl začít provádět věci, které nechceme. Mohl by třeba zavřít šetřič obrazovky, který chrání počítač heslem. Pokud SysRq zapnete, dejte pozor na to, kdo se vám dostane ke klávesnici.

Nastavení svého systému zjistíte přečtením příslušného souboru v  /proc:

$ cat /proc/sys/kernel/sysrq

Pokud v něm máte zapsanou jedničku, máte SysRq aktivní. Nula znamená vypnuto. Aktivaci provedete prostým zápisem jedničky do tohoto souboru (samozřejmě jako root).

# echo "1" > /proc/sys/kernel/sysrq

Toto nastavení vydrží ale jen do příštího restartu systému. Pokud chcete, aby bylo permanentní, budete muset konfigurační volbu zapsat do

/etc/sysctl.conf. To provedete následujícím příkazem:
# sysctl -w kernel.sysrq=1

Pro pokročilé: Je možné také nastavit vyšší hodnotu, která nepovolí kompletní funkčnost SysRq, ale jen některé vlastnosti. Jde o devítibitovou hodnotu, ve které každý bit označuje jednu funkci. Zprava je to: kompletní povolení SysRq (jednička), ovládání logování, ovládání klávesnice, debugování dumpů, sync, remount na read-only, posílání signálů procesům, reboot a změna nice. Kombinací těchto bitů můžete povolit jen konkrétní možnosti. V mém Debianu je ve výchozím stavu nastaveno 438.

Teď už můžeme přejít k tomu hlavnímu: k zasílání příkazů jádru. To se provádí pomocí kombinace tří kláves: Alt+SysRq+příkaz. Nezapomeňte, že jádro předpokládá standardní rozložení QWERTY. Pokud používáte vlastní rozložení, bude jej jádro ignorovat a vy na to nesmíte zapomenout. Jinak budete posílat úplně jiné příkazy, než chcete.

Zamrzlý X server

Pokud zamrzne X server nebo některá aplikace, která vám zablokovala klávesnici, jste od systému odstřiženi. Zbytek systému ale funguje a pokud byste se dostali ke konzoli, můžete problém odstranit. Máte v zásadě dvě možnosti:

Alt + SysRq + r přepne klávesnici z raw módu zpět pod nadvládu jádra. Tím odeberete vládu nad vstupem zlobivé aplikaci. Pak můžete například pomocí Ctrl + Alt + F1 přepnout na textovou konzoli a začít řešit.

Alt + SysRq + k zabije všechny procesy na aktuální virtuální konzoli. Dojde tedy k zavření X serveru včetně všech aplikací, které pod ním běží. Je to podobné jako zaslání signálu pomocí Ctrl + Alt + Backspace, ale SysRq je jistější.

Bezbolestný restart systému

Pokud dojde k větší havárii a vy musíte restartovat počítač, můžete to udělat pomocí SysRq. To vám (na rozdíl od klasického resetu) umožní čistě odpojit souborové systémy, provést na nich synchronizaci a až poté provést reboot.

Někdo si pamatuje jen kombinaci kláves „sub“, tedy Sync, Umount, Boot. Pokud ale chcete předem pozavírat běžící aplikace, je lepší si pamatovat „reisub“. Jednotlivé klávesy jsou:

  • r – přepne klávesnici z raw módu a odebere ovládání z X
  • e – požádá slušně všechny procesy, aby se vypnuly (SIGTERM)
  • i – sestřelí zbývající procesy, které nereagovaly (SIGKILL)
  • s – zapíše cache na disky (jako sync)
  • u – odpojí svazky (jako mount -o remount -r -a)
  • b – okamžitý restart

Nejprve samozřejmě stisknete kombinaci Alt + SysRq a poté teprve postupně pomalu namačkáte klávesy „reisub“.

Další možnosti

Samozřejmě to není jediná možnost, existuje řada dalších příkazů, které takto můžete jádru předat. Například se vám mohou hodit:

  • Alt + SysRq + n – real time procesům je možné nastavovat nice
  • Alt + SysRq + f – zavolá OOM killer, který se zbaví náročné aplikace v paměti
  • Alt + SysRq + h – vypíše na terminál nápovědu ke klávesám (dobře se pamatuje)
  • Alt + SysRq + 0 – 9 – nastaví úroveň logování na konzoli
  • Alt + SysRq + w – vypíše úlohy v nepřerušitelném stavu
  • Alt + SysRq + o – vypne počítač

Toto je jen několik příkladů, prakticky každá klávesa na klávesnici posílá nějaký ten příkaz. Ostatní se ale hodí spíše vývojářům jádra než běžným uživatelům. Kompletní možnosti naleznete v dokumentaci jádra v sysrq.txt.

ict ve školství 24

Na závěr ještě jednu zajímavost: SysRq můžete použít i na vzdáleném stroji. Buďto jako v nedávném našem článku Reboot serveru pingem můžete využít iptables a předem se připravit, nebo, pokud se ještě můžete přihlásit, můžete využít rozhraní v /proc, do kterého jednoduše zapisujete jednotlivé znaky, jako byste je mačkali na klávesnici.

# echo u > /proc/sysrq-trigger

Výše uvedený příkaz odpojí souborové systémy. Znaky samozřejmě posíláte už bez Alt a SysRq.

Zdroje

Znali jste tuto funkci SysRq?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.