KVM (debug)

From DCEwiki
Jump to navigation Jump to search

Nejjednodušší způsob pro získávání informací z prostředí virtualizovaného linuxového stroje je využití přesměrovaného virtuálního sériového portu. Hodí se to především v situaci kdy jádro virtuálního stroje z neznámých příčin panikaří, ale lze toho také využít k monitoringu stroje atp.

Přesměrování sériového portu

V prostředí standardní grafické konzole QEMU je standardně výstup sériového portu přesměrován na třetí grafickou konzoli, na kterou se lze přepnout kombinací CTRL+ALT 3 (viz předchozí kapitola).

Přistupujeme-li však ke stroji bez grafické konzole, přes SPICE, nebo VNC, je přesměrování sériového portu vypnuto. Musí být tedy explicitně zapnuto při spouštění na příkazovém řádku pomocí volby -serial.

Poznámka
... -serial file:/var/log/virtual_guest.log ...

Port nemusí být nutně přesměrován do soubor na disku. Cílem může být i soket, TCP port či jiná konzole hostitele. Podobně jako když se přesměrovává monitorovací konzole QEMU.

Poznámka
... -serial telnet:localhost:1234,server,nowait ...

V prostředí linuxového virtuálu je pak sériový port dostupný jako zařízení /dev/ttyS0. Jelikož jde o jednoduché znakové zařízení, je nejsnazší formou testu poslat přes příkaz echo nějaký řetězec. V případě že přesměrování funguje, se řetězec objeví v cílovém souboru.

Je-li volba -serial uvedena vícekrát, jsou postupně přesměrovány i další sériové porty /dev/ttyS1, /dev/ttyS2, atd...

Přetočení konzolového výpisu na sériový port

Když linuxové jádro zpanikaří, vypíše obvykle chybu na aktuální konzoli. Aby byl dump jádra vypsán na sériový port, je třeba před zavedením jádra předat prostřednictvím parametru console v zavaděči jméno příslušné sériové konzole. Viz ukázka příslušného řádku s přesměrováním na /dev/ttyS0 ze souboru /boot/grub/grub.cfg:

Poznámka
...
linux /boot/vmlinuz root=/dev/vda1 ro console=ttyS0 quit
...

Jednoduchým testem přímo v prostředí virtuálního stroje si pak můžeme ověřit, jestli k zápisu na tuto konzoli skutečně dojde:

Poznámka
stroj:~# echo 1 > /proc/sys/kernel/sysrq
stroj:~# echo c > /proc/sysrq-trigger

Jak dále zachycenou chybu zpracovat již přesahuje rámec tohoto manuálu. Více viz http://www.dedoimedo.com/computers/kdump.html

Poznámka Abychom nemuseli po každé aktualizaci jádra upravovat konfiguraci pro grub ručně, je dobré doplnit příslušný parametr pro přesměrování linuxové konzole do proměnné GRUB_CMDLINE_LINUX v souboru /etc/default/grub