Tak schválně, kolikrát jste za poslední týden použili klávesu SysRq? Tedy za předpokladu, že na vaší klávesnici vůbec nějaká taková je, protože někteří výrobci její funkci na klávese s printscreenem nejen nepopisují, ale pro jistotu ji ani neimplementují. Systém requesty jsou přitom nesmírně užitečné při řešení závažných problémů na *nixových strojích.
Jaderná klávesa
V počítačovém pravěku, kdy většina aplikací pracovala na základní systémové úrovni a často úplně obcházela operační systém, bylo potřeba celou tu prasečinu nějak spolehlivě řídit. Posílání interruptů se zdálo být tím pravým řešením a právě to byl původní úkol SysRq klávesy. Dnes SysRq sice také složí ke komunikaci se systémovým jádrem, ovšem nikoliv jako iniciátor přerušení, ale jako modifikační klávesa k vytváření mocných klávesových zkratek.
K tomu, aby váš kernel SysRq klávesové zkratky akceptoval, musí být zkompilován s možností CONFIG_MAGIC_SYSRQ a v sysctl mít nastaven parametr kernel.sysrq na hodnotu vyšší než 0. Tedy za předpokladu, že používáte kernel ve verzi 2.6.12 nebo vyšší, kde lze možnosti SysRq nastavovat pomocí bitmasky. V nižších verzích existovalo pouze vypnuto/zapnuto.
Noty
- 0 - 9 - Nastavují úroveň logování do konzole. Úroveň 0 vypisuje pouze nejkritičtější zprávy (OOPS, PANIC), úroveň 9 pak kdejaký nezajímavý spam.
- b - Rebootuje systém bez jakéhokoliv ukončování aplikací, vysypávání dat a odpojování disků.
- c - Shodí systém jevem zvaným NULL pointer dereference, tj. pokusem o užití ukazatele s hodnotou 0. Pokud je systém patřičně nakonfigurován, zaznamená crashdump.
- d - Zobrazí aktivní (uzamčené) zámky.
- e - Pošle SIGTERM všem procesům mimo init.
- f - Zavolá oom_kill, čímž je vyvolána stejná událost jako při zaplnění paměti a systém začne zabíjet paměťové žrouty.
- g - Přepne do debuggeru kernelu, je-li přítomen.
- h - Zobrazí nápovědu.
- i - Pošle SIGKILL všem procesům mimo init.
- j - Zavolá FITHAW ioctl a rozmrazí tak filesystémy zmražené FIFREEZE ioctl.
- k - Pozabíjí programy na současné virtuální konzoli.
- l - Zobrazí stack trace pro aktivní CPU.
- m - Vysype do konzole informace o paměti.
- n - Resetuje nice (prioritu) úloh prováděných v reálném čase.
- o - Vypne systém.
- p - Vysype do konzole registry a flagy CPU.
- q - Vypíše informace o hrtimerech a clockevent zařízeních.
- r - Přepne klávesnici z raw módu do XLATE.
- s - Pokusí se syncnout všechny připojené filesystémy.
- t - Vypíše do konzole seznam úloh a informace o nich.
- u - Pokusí se remountnout filesystémy jen pro čtení.
- v - Obnoví framebuffer konzoli.
- w - Vypíše seznam nepřerušitelných (blokovaných) úloh.
- z - Vysype ftrace buffer.
Velice užitečná sekvence pro zakousnuté a zdánlivě mrtvé systémy je REISUB, tedy unRaw, tErminate, kIll, Sync, Unmount, reBoot. Oblíbená mnemotechnická pomůcka k této sekvenci je „Reboot Even If System Utterly Broken“, což pěkně vystihuje i její smysl.
Vzdálený SysRq
A až vás někdo, komu podpíráte servery, pořádně naštve, můžete mu mašinu pomocí SysRq crashnout i na dálku. Bonusové body dostanete, pokud server jede bez KVM a je umístěn v nějaké obtížně dostupné lokalitě.
Řídící znak pak SysRq triggeru pošlete následovně:
echo "c" > /proc/sysrq-trigger
Ovšem vzhledem k tomu, že SysRq počítá s výpisy do místních a nikoliv vzdálených konzolí, velmi pravděpodobně kýžený výstup na druhé straně SSH neuvidíte. Zběsile zvonící telefon ale bude známkou úspěchu.