SysRq

Z Wikiverzity

SysRq funkce Linuxového jádra.

K čemu to[editovat]

Za běžných podmínek počítač běží tak hladce, že běžný uživatel ani netuší, že má nějaká jádro. Občas ale může dojít k něčemu podobnému, co uživatelé Windows znají pod pojmem "Modrá obrazovka". Většinou se ani nejedná o nějaký problém v kódu jádra, ale o nějaký problém s hardware, které je jádrem spravováno. Pokud počítač používáme i k různým pokusům se zapojením do reálného světa, může se nám to při nějakém takovém laborování snadno přihodit. Proto je dobré mít předem nastudováno (případně vytištěno na kusu papíru), co v takových případech zkusit dělat ještě dříve, než sáhneme po tlačítku Reset.

Trocha magie[editovat]

  • Jádro musí být (v části Kernel Hacking) zkompilované s volbou: CONFIG_MAGIC_SYSRQ

Ovládání[editovat]

  • Posláním něčeho do souboru /proc/sysrq-trigger, např. pro help:
 echo "h" > /proc/sysrq-trigger
  • Trojhmatem Alt+SysRq+něco (Kouzelnou klávesu PrintScreen/SysRq u AT klávesnice většinou najdete nad klávesou Insert)

Ovládání trojhmatem musí být povoleno v souboru /proc/sys/kernel/sysrq. Jestli je nebo ne, zjistíme:

 cat /proc/sys/kernel/sysrq
  • 1: v pořádku, povoleno
  • 0: zakázáno. V tom případě je možno funkci povolit:
    • dočasně:
 echo "1" > /proc/sys/kernel/sysrq
    • trvale (pro nabootování): do souboru /etc/sysctl.conf přidáme řádek:
 kernel.sysrq = 1

Kromě 0 a 1 je možno něco povolit a něco zakázat - viz níže.

Ono něco je nějaký znak (obvykle malé písmeno či číslice) kterému se říká CommandKey. Seznam command-keys se může v různých verzí jádra trochu lišit a proto je dokumentace v souboru, který je součástí zdrojových souborů jádra: /usr/src/linux/Documentation/sysrq.txt

V případě, že systém padá, je někdy pozdě bycha honit a proto je vhodné mít příslušnou tabulku vytisknutou po ruce (odpovídá jádru 2.6)


Jak co povolit a zakázat na klávese SysRq[editovat]

The list of possible values in /proc/sys/kernel/sysrq:
   0 - disable sysrq completely
   1 - enable all functions of sysrq
  >1 - bitmask of allowed sysrq functions (see below for detailed function
       description):
          2 - enable control of console logging level
          4 - enable control of keyboard (SAK, unraw)
          8 - enable debugging dumps of processes etc.
         16 - enable sync command
         32 - enable remount read-only
         64 - enable signalling of processes (term, kill, oom-kill)
        128 - allow reboot/poweroff
        256 - allow nicing of all RT tasks

You can set the value in the file by the following command:
    echo "number" >/proc/sys/kernel/sysrq

Tabulka příkazových kláves (CommandKeys)[editovat]

kód english česky poznámka
r Turns off keyboard raw mode and sets it to XLATE. Uvolní myš a klávesnici z držení X serveru. Pak lze stisknout ALT+F{1,2,3,4,5,6} a přepnout se do textové konsole, ze které lze killnout x-server
k Secure Access Key (SAK) Kills all programs on the current virtual console. NOTE: See important comments below in SAK section. Tato kombinace zabije všechny procesy na současném terminálu.
b Will immediately reboot the system without syncing or unmounting your disks. Něco jako tlačítko reset. Rebootuje bez syncování disku a bez unmountování. Pokud to jde, použít předtím volby s a u
o Will shut your system off (if configured and supported). Vypnutí prostřednictvím APM subsystému
s Will attempt to sync all mounted filesystems. Zapíše všechna data z diskových cachí na disk, jako sync.
u Will attempt to remount all mounted filesystems read-only. Pokusí se přemountovat všechny připojené filesystémy do režimu pouze pro čtení
p Will dump (print) the current registers and flags to your console. Vypíše současný stav registů a flagů (často je to defaultní chování samotné klávesy SysReg i bez trojhmatu) \*
t Will dump a list of current tasks and their information to your console. Vypíše seznam o běžících procesech na terminál a také nějaké bližší informace k těmto procesům. \*
m Will dump current memory info to your console. Vypíše informace o paměti na terminál. \*
v Dumps Voyager SMP processor info to your console. Vypíše info o Voyager SMP processoru \*
0-9 Sets the console log level, controlling which kernel messages will be printed to your console. ('0', for example would make it so that only emergency messages like PANICs or OOPSes would make it to your console.) Nastaví úroveň logování. Logovací informace jsou vypisovány na terminál. 0 znamená vypisuj jen informace jako je OOPs a PANIC.
f Will call oom_kill to kill a memory hog process Zavolá oom_kill, což zabije proces, který spotřebovává všechnu dostupnou paměť. (free memory)
e Send a SIGTERM to all processes, except for init. Pošle signál SIGTERM všem procesům, vyjma procesu init.
i Send a SIGKILL to all processes, except for init. Pošle signál SIGKILL všem procesům, vyjma procesu init.
l Send a SIGKILL to all processes, INCLUDING init. (Your system will be non-functional after this.) Pošle signál SIGKILL všem procesům, včetně procesu init. Systém potom zůstane v nefunkčním stavu!
h Will display help ( actually any other key than those listed above will display help. but 'h' is easy to remember :-) Vypíše nápovědu k SysRQ na terminál. (Stejně bude reagovat i libovolná další klávesa, která není namapována na nějakou funkci.) \*

Poznámky:

  • \* V openSUSE se informace vypisují na 10. terminál


Doporučené čtení[editovat]