KVM (debug)

From DCEwiki
Jump to: navigation, 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[edit]

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[edit]

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