virsh: konsola VM nie wyświetla żadnych danych wyjściowych


Mam maszynę wirtualną, od której mogę zacząć
       virsh
... Zgodnie z
       virsh dumpxml VM1
, to jest wybrany obiekt:
<serial type='pty'>
<source path='/dev/pts/6'/>
<target port='0'/>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/6'>
<source path='/dev/pts/6'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>

Maszyna wirtualna jest uruchomiona:
# virsh list
Id Name State
----------------------------------
7 VM1 running

Wewnątrz maszyny wirtualnej jest to konfiguracja grub:
kernel/boot/vmlinuz-2.6.24-28-virtual root=UUID=7a1685b9-ecc8-4b70-932c-459a6faac07d ro quiet splash console=tty0 console=ttyS0,9600n8

A to jest wiersz poleceń uruchamiany przez virsh, aby uruchomić maszynę wirtualną:
/usr/bin/kvm -S -M pc-0.12 -enable-kvm -m 256 -smp 1,sockets=1,cores=1,threads=1 -name VM1 -uuid 47ff6ec2-a748-4738-16b9-2ffe5780e456 -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/VM1.monitor,server,nowait -mon chardev=monitor,mode=readline -rtc base=utc -boot c -drive file=/var/VMs/VM1.qcow2,if=none,id=drive-ide0-0-0,boot=on,format=raw -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:12:34:50,bus=pci.0,addr=0x3 -net tap,fd=64,vlan=0,name=hostnet0 -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -vnc 127.0.0.1:0 -k de -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4

Ale jeśli się skontaktuję
       virsh console VM1
, albo ja
       cat/dev/pts/6
nic nie jest wyświetlane w konsoli maszyny wirtualnej.
Czy jest coś jeszcze, co powinienem rozważyć?

AKTUALIZACJA
>
Mam dwie maszyny wirtualne, z których jedna działa bezpośrednio z
       kvm
, inny przez
       virsh
... Uruchomiony bezpośrednio ma konsolę roboczą. Sprawdziłem otwarte pliki w obu przypadkach:
root@host1:~# lsof | grep 25093 | grep dev
kvm 25093 root DEL REG 0,4 3758780/dev/zero
kvm 25093 root DEL REG 0,4 3758779/dev/zero
kvm 25093 root DEL REG 0,4 3758777/dev/zero
kvm 25093 root 0u CHR 136,3 0t0 6/dev/pts/3
kvm 25093 root 1u CHR 136,3 0t0 6/dev/pts/3
kvm 25093 root 2u CHR 136,3 0t0 6/dev/pts/3
kvm 25093 root 3u CHR 10,232 0t0 8025/dev/kvm
kvm 25093 root 7u CHR 10,200 0t0 4983/dev/net/tun
root@host1:~# lsof | grep 8341 | grep dev
kvm 8341 libvirt-qemu DEL REG 0,4 9743486/dev/zero
kvm 8341 libvirt-qemu DEL REG 0,4 9743485/dev/zero
kvm 8341 libvirt-qemu DEL REG 0,4 9743483/dev/zero
kvm 8341 libvirt-qemu 0r CHR 1,3 0t0 4640/dev/null
kvm 8341 libvirt-qemu 4u CHR 5,2 0t0 4897/dev/ptmx
kvm 8341 libvirt-qemu 5u CHR 10,232 0t0 8025/dev/kvm
kvm 8341 libvirt-qemu 64u CHR 10,200 0t0 4983/dev/net/tun

Jak widać, jedna z maszyn wirtualnych (niewłaściwa) nie ma deskryptorów plików 1 i 2, a deskryptor pliku 0 jest przekierowywany do/dev/null. Myślę, że to jest problem.
Pytanie brzmi, jak mam powiedzieć virsh, żeby tego nie robił?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>

To jest to, co zwykle dodaję do definicji maszyn wirtualnych używających
         virsh edit
następnie
         console=ttyS0
dodane do linii jądra VM w grub.conf
Nigdy mnie nie zawiodłem, aż do teraz
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Roboczy przykład użycia Debian jessie jako systemu operacyjnego hosta i gościa.
  • utwórz maszynę wirtualną za pomocą virt-install lub virt-manager. Tak czy inaczej, instrukcje konsoli szeregowej zostaną dołączone do pliku VM.xml.
  • na maszynie wirtualnej gościa uruchom następujące
    systemctl enable serial-getty@ttyS0.servicesystemctl start serial-getty@ttyS0.service
  • na maszynie wirtualnej gościa w
    /etc/default/grub           
    zastąpić
    GRUB_CMDLINE_LINUX_DEFAULT="quiet"#GRUB_TERMINAL=console
    przez
    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0"GRUB_TERMINAL="serial console"
  • na maszynie wirtualnej gościa uruchom następujące
    guest# update-grub
  • Można uzyskać konsolę maszyny wirtualnej do uruchamiania maszyny wirtualnej
    host# virsh console VM
    lub uruchom maszynę wirtualną z podłączoną konsolą
    host# virsh start VM --console

Źródła:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Znalazłem najbardziej odpowiednią odpowiedź

Tutaj
https://askubuntu.com/question ... ponse
:
Powiedzmy, że Twoja wirtualna domena
         myGuest
, twój preferowany edytor
         vi
a twój gość jest zainstalowany z
         grub2
i używa
         systemd
... Jeśli to drugie założenie jest błędne, możesz rzucić okiem

Praca z konsolą szeregową
https://wiki.archlinux.org/ind ... nsole
.
Zainstaluj najpierw
         libguestfs-tools
na hoście:
         sudo apt install libguestfs-tools
... Będziesz tego potrzebował, gdy masz do czynienia z bezgłowymi gośćmi.
Po drugie, wyłącz gościa:
         virsh shutdown myGuest
.
Następnie zamontuj dysk wirtualny:
         guestmount -d myGuest -i/mnt
(lub użyj dowolnego innego istniejącego katalogu jako punktu podłączenia). Teraz w
/mnt
powinieneś zobaczyć system plików gościa.
Z
         grub2
i
         systemd
, musisz tylko zmienić konfigurację grub:
         vi/mnt/etc/default/grub
i zmień sposób
GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,19200n8'
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1"

Jak będziesz musiał biec
         update-grub
na gościa, na pierwszy bieg musisz również zmienić
/mnt/boot/grub/grub.cfg
... Znajdź domyślny element menu rozruchowego i dodaj informacje o konsoli do
         linux
wpis podobny do
linux/boot/vmlinuz-4.4.0-75-generic root=UUID=76f3e237-d791-4e9d-8ad7-fe5c9165ae55 ro console=ttyS0,19200 earlyprint=serial,ttyS0,19200

Do montowania i edytowania plików mogą być potrzebne uprawnienia roota.
Teraz zrestartuj gościa i uruchom konsolę wirtualną:
virsh start myGuest && virsh console myGuest

Powinieneś zobaczyć dziennik jądra, a następnie monit logowania. Po zalogowaniu nie zapomnij uruchomić
         sudo update-grub
.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się