So drucken Sie die Dmesg-Ausgabe von der QEMU-Gast-VM auf den Hostcomputer

So drucken Sie die Dmesg-Ausgabe von der QEMU-Gast-VM auf den Hostcomputer

Befehl
Folgendes mache ich

# Step 1. In host machine
$ qemu-system-x86_64 \
        -enable-kvm -nodefaults -nographic -L /usr/share/qemu \
        -m 8G -smp 4 -boot c \
        -netdev user,hostnet0,hostfwd=tcp::5556-:22 \
        -drive file=ubuntu18.04.qcow2,if=virtio,cache=none \
        -device virtio-net-pci,netdev=hostnet0,id=net0,bus=pci.0,addr=0x3\
        -serial pty  

# Step 2. In guest machine
$ sudo vim /etc/default/grub
# Change GRUB_CMDLINE_LINUX="" as GRUB_CMDLINE_LINUX="console=ttyS0"

# Step 3. In host machine
# There should be a printed log showing 
# which pty is being used when the host runs qemu
# Let say, /dev/pts/3
$ sudo cat /dev/pts/3 

# Step 4. Login /dev/pts/3
$ echo "id" > /dev/pts/3
$ echo "password" > /dev/pts/3

# Step 5. Print dmesg in a log file
$ echo dmesg > /dev/pts/3

Ich möchte ein Kernelprotokoll vom Gastcomputer abrufen. Der obige Code verwendet grundsätzlich pty als serielle Schnittstelle, sodass ich das Protokoll über ein bestimmtes tty abrufen kann. Das Problem ist jedoch, dass für diese Methode eine Warnung angezeigt wird.

Wenn ich den Befehl ausgebe, dmesgerhalte ich diese Meldung:

[ 0.00000] serial8250: too much work for irq4

Ich glaube nicht, dass dies eine kritische Warnung ist, aber es ist ziemlich ärgerlich, sie zu sehen, und es scheint mir, dass mehrere Protokolle ignoriert werden.

Ich würde gerne wissen, ob es einen besseren Weg gibt, ein Protokoll ohne Warnung von der VM zu erhalten. Ich finde, diese Warnung ist nicht richtig. Ich behebe das Problem, indem ich mich regelmäßig anmelde und eine hässliche Ausgabe von umleite cat.

Gibt es eine Möglichkeit, sofort ein Protokoll abzurufen, ohne echo dmesg zu verwenden?

Antwort1

Alternative

# Using a named pipeline
# Step 1. qemu configuration
$ qemu-system-x86_64 \
        -some options like above \
        -serial pipe:/tmp/guest

# Step 2. To get a log
$ mkfifo /tmp/guest.in /tmp/guest.out
$ cat /tmp/guest.out
$ printf "id\n" > /tmp/guest.in
$ printf "pw\n" > /tmp/guest.in
$ printf "cmd\n" > /tmp/guest.in

Verknüpfung

Antwort2

Sie können die Kernel-Parameter des Gasts -serial file:console.logergänzen qemu-systemoder anhängen .console=ttyS0,115200 ignore_loglevel

Mit ignore_loglevelwerden alle Kernel-Meldungen unabhängig von ihrem Protokolllevel auf der Konsole (hier dem seriellen Gerät) ausgegeben.

verwandte Informationen