Konfigurálható Magic SysRq

Címkék

Kis kitérő:

Linux kernelt futtatva kerülhetünk olyan helyzetbe, amikor a rendszerünk úgy néz ki, hogy teljesen halott (pl. deadlock, ...). Ilyen esetben kaphatunk fekete konzolt, ``lefagyó'' X szervert, stb. A Linux kernel működését kevésbé ismerő felhasználók ilyenkor azt gondolhatják, hogy ``megfagyott a Linux...''

Az igazság az, hogy nagyon kevés esetben ``fagy meg'' a Linux kernel annyira, hogy teljesen magatehetetlen. Ha nincs mint tenni, a kernel általában eldumpol (oops), és látható az, hogy mely programozási hiba miatt szállt el. Igazából, ha a kernel nem dumpol el, akkor az esetek nagy részében még igenis működik, csak éppen mi nem látjuk, hogy mit csinál. A kezdő felhasználó általában nyom egy reset-et, ha az X vagy a konzol nem reagál, és ezzel kockáztatja azt, hogy a filerendszere esetleg megsérülhet. Ha ismerné a Magic SysRq billentyűkombinációkat, akkor minden bizonnyal azt használná, és megkímélhetné magát több kellemetlenségtől is.

Mi is az a Magic SysRq? A "mágikus SysRq billentyűparancs" olyan billenytű szekvencia, amelyek segítségével egyszerű parancsokat adhatunk át közvetlenül a Linux kernelnek. Általában a Magic SysRq parancsokat a (kernel)fejlesztők használják a debug-olási munka során. Bizonyos esetben (például, mikor nem látjuk a konzolt, mert az ``megfagyott'') szükség lehet arra, hogy a kernelnek olyan utasítást adjunk, hogy 'S'ync-elje le a filerendszert, 'U'mount-oljon, és 'B'oot-olja újra a gépet. Ezzel a filerendszer ``tiszta marad'' és a következő bootolás után elkerülhetjük az fsck-t. A kernelnek számos más hasznos parancsot is adhatunk a fent felsoroltakon kívül. Nézzük mi kell ahhoz, hogy egy gépen használhassuk a Magic SysRq billentyű-kombinációkat:1.) A kernelbe bele kell fordítani a Magic SysRq támogatást.

Kernel hacking --->
Magic SysRq key

2.) Ha megvan, akkor bootoljunk újra a kernellel, és nézzük meg, hogy engedélyezve van-e a használata:

(300MHz 49C) root@alderaan:/home/trey $ sysctl -a | grep sysrq

kernel.sysrq = 0


Ha nincs, akkor engedélyezzük:

(300MHz 50C) root@alderaan:/home/trey $ sysctl -w kernel.sysrq=1

kernel.sysrq = 1

Maradandó beállítást a /etc/sysctl.conf-ban lehet elvégezni.

Ezek után már használhatjuk is a Magic SysRq billentyűket. A használata a következő:

Példaként nézzük a korábban említett szituációt... A konzolon nincs kép, nem látjuk mit billenytűzünk be a gépbe... Újra kellene bootolni a gépet, de úgy, hogy ne sérüljön a filerendszer...

A megoldás, ha engedélyezve van a Magic SysRq:

Altgr + Sys Rq billentyűk lenyomása mellett leütjük a következő billentyűket a következő sorrendben:

(Altgr + Sys Rq +) s

(s = sync, szinronizálja a filerendszert, kiüríti a dirty puffereket)

(Altgr + Sys Rq +) u

(u = umount, vészhelyzetben umount-olja a filerendszereket)

(Altgr + Sys Rq +) b

(b = boot, újrabootolja a gépet)


Az Intel architektúrákon a SysRq billentyűt jelölik még Prt Sc-nel (print screen) is.

Nem csak erre a három funkcióra használható a Magic SysRq. Az alábbi lista bővebb infót ad a használatról.

'r' - Turns off keyboard raw mode and sets it to XLATE.

'k' - Secure Access Key (SAK) Kills all programs on the current virtual

console. NOTE: See important comments below in SAK section.

'b' - Will immediately reboot the system without syncing or unmounting

your disks.

'o' - Will shut your system off (if configured and supported).

's' - Will attempt to sync all mounted filesystems.

'u' - Will attempt to remount all mounted filesystems read-only.

'p' - Will dump the current registers and flags to your console.

't' - Will dump a list of current tasks and their information to your

console.

'm' - Will dump current memory info to your console.

'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.)

'e' - Send a SIGTERM to all processes, except for init.

'i' - Send a SIGKILL to all processes, except for init.

'l' - Send a SIGKILL to all processes, INCLUDING init. (Your system

will be non-functional after this.)

'h' - Will display help ( actually any other key than those listed

above will display help. but 'h' is easy to remember :-)


Miután tudjuk mi az a Magic SysRq, és mire használható, könnyen beláthatjuk, nem csak jó dologra lehet használni, ha bele van fordítva a kernelbe, annak lehetnek negatív hatásai is. Ezért néhány Linux disztribútor (pl. a SuSE) nem is fordítja bele a default kernelbe a Magic Sysrq-t.

A SuSE felé azonban jeleztek olyan igényeket, hogy jó lenne, ha a felhasználók tudnának néhány funkciót használni a Magic SysRq adta lehetőségek közül, de nem mindent. Ennek hatására Jan Kara a SuSE kernel hackere írt egy patchet, amely lehetővé teszi a rendszeradminisztrátornak, hogy a /proc/sys/kernel/sysrq felületen keresztül konfigurálni tudja azt, hogy milyen funkcióit lehessen használni a SysRq-nak.

0 - teljesen tiltva a sysrq

1 - teljesen engedélyezve a sysrq

>1 - bitmask-kal meghatározva, hogy a sysrq mely funkciói használhatók

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)

128 - allow reboot


Használata:

echo "0" > /proc/sys/kernel/sysrq

Kérte Andrew Mortont, hogy tegye a patchet a mainline kernel részévé. Andrew kérte a fejlesztőt, hogy indokolja meg, hogy miért kellene a mainline kernelbe beépíteni a patchet. Jan azt írta, hogy például egy oktatóteremben a rendszeradminisztrátor nem szeretné, hogy a felhasználók használják az Umount/Kill-t, de jó lenne ha hozzáférnének például a SAK/raw funkcióhoz. A másik indok az volt, hogy a SuSE nem fordítja bele a kernelbe a Magic SysRq-t, mert néhány ember aggódik a biztonság miatt, viszont emiatt a kernel fejlesztők kevés debug visszajelzést kapnak (pl. deadlock esetén hasznos lenne). A fejlesztők életét tenné könnyebbé...

Andrew-nek ennyi elég is volt, és úgy tűnik, hogy a patch a mainline kernel része lesz.

Hozzászólások

Érdekes, hogy ilyen funkciókat a /proc fájlrendszerbe tesznek, mikor úgy sejtem, szeretnének mielöbb megszabadulni tőle, és áttérni a jóval struktúráltabb és kezelhetőbb sysfs -re...

Ha jol latom, akkor az a problema, hogy egy soros vonalon keresztul is lehet hasznali ezt a feature-t. Szerintem jo lenne, ha konfiguralhato lenne, hogy a kernel csak bizonyos bemeneti csatornakrol fogadja el a MagigcSysrq-t (pl: konzol).

Amugy nekem vegyes tapasztalataim vannak ezzel a dologgal. egyszer mar az is elofordult velem, hogy leragadt a gep, adtam neki egy sync-et, egy umount-ot, aztan egy rebootot, es mikor bebootolt a gep a fajlrendszer nem erezte valami jol magat. De ez csak egyszer torten meg. Azota is benne van a kernelemben es neha igencsak hasznos tud lenni.

Nekem egy olyan ficsor hianyzik a vanillabol ami kidumpolja a oops ot mondjuk a swap paricioba, hogya X alol elszal a linux akkor megtudjam hol a hiba. Tudom van valahol vmi hasonlo patch de en meg nem lattam.

En erre eddig 2 dolgot hasznaltam. Az egyik, hogy atmegyek a masik szobaba, benyomom hugom gepet, es be-ssh-zok rola, azt ujrainditom :)

A masik pedig a power button.

Beallitasa: (Fejbol, gentoo alatt, gondolom a tobbi alatt is hasonlo)

Belerakom a kernelbe a Power Button tamogatast, ami valahol a Power Management/ACPI resznel talalhato.

Felrakom az acpid nevu daemont (emerge acpid)

Konfiguralom a daemont. Ami kb. annyi, hogy a konfig file-jaba ami 2 soros kikommentezem, hogy allitsa le a gepet. (emacs /etc/acpid/valahol..)

Majd beallitom, hogy automatikusan elinduljon. (rc-update add acpid boot)

Innentol, ha valami gaz van, csak megnyomom a Power gombot es szabalyosan leallitja a gepet. Nalam volt mar olyan, hogy elindult a gdm es behalt a billentyuzet, bejelentkezni se tudtam, meg kiloni az X-et se, akkor nagyon jol jott.

Udv.

ProTech