web-dev-qa-db-fra.com

VIRSH: VM console n'indique pas de sortie

J'ai un VM que je peux commencer par virsh. Selon virsh dumpxml VM1, c'est la PTY allouée:

<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>

Le VM est en cours d'exécution:

# virsh list
 Id Name                 State
----------------------------------
  7 VM1                  running

À l'intérieur de la machine virtuelle, il s'agit de la configuration de GRUB:

kernel          /boot/vmlinuz-2.6.24-28-virtual root=UUID=7a1685b9-ecc8-4b70-932c-459a6faac07d ro quiet splash console=tty0 console=ttyS0,9600n8

Et ceci est la ligne de commande lancée par VIRSH pour démarrer la machine virtuelle:

/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

Mais si je me connecte avec virsh console VM1, ou je fais cat /dev/pts/6, rien ne montre dans le VM console.

Y a-t-il quelque chose d'autre que je dois considérer?

METTRE À JOUR

J'ai deux VMS, on a commencé directement avec kvm, l'autre via virsh. Celui qui a commencé a directement une console de travail. J'ai vérifié les fichiers ouverts dans les deux cas:

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

Comme vous pouvez le constater, dans l'un des VMS (le mauvais), il n'y a pas de descripteurs de fichier 1 et 2 et de descripteur de fichier 0 est redirigé vers/dev/null. C'est le problème que je suppose.

La question est, comment puis-je dire à VIRSH de ne pas le faire?

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

C'est ce que j'ajoute normalement à la définition VMS, en utilisant virsh edit Puis console=ttyS0 annexé dans la ligne de noyau de la machine virtuelle à grub.conf

Ne m'a jamais manqué jusqu'à présent

10
dyasny

Exemple de travail d'utilisation de Debian Jessie en tant que système d'exploitation hôte et invité.

  1. créez A VM à l'aide de virt-install ou de Virt-Manager dans tout cas où vous obtiendrez des instructions de console série ajoutées au fichier vm.xml

  2. dans Guest VM Exécutez ce qui suit

    systemctl enable [email protected]
    systemctl start [email protected]
    
  3. dans Guest VM en /etc/default/grub remplacer

    GRUB_CMDLINE_LINUX_DEFAULT="quiet"
    #GRUB_TERMINAL=console
    

    par

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0"
    GRUB_TERMINAL="serial console"
    
  4. dans Guest VM Exécutez ce qui suit

    guest# update-grub
    
  5. le VM console pour exécuter VM peut être obtenu par

    Host# virsh console VM
    

    ou démarrez le VM avec la console attachée

    Host# virsh start VM --console
    

Sources:

9
user292283

J'ai trouvé la réponse la plus applicable ici :

Supposons que votre domaine virtuel soit myGuest, votre éditeur préféré est vi, et votre invité est installé avec grub2 et utilise systemd. Si la dernière hypothèse n'est pas vraie, vous pourriez avoir un coup d'œil à travailler avec la console de série .

Tout d'abord, installez libguestfs-tools sur l'hôte: Sudo apt install libguestfs-tools. Vous aurez besoin de cela lorsque vous travaillez avec des invités sans tête.

Deuxièmement, fermez votre invité: virsh shutdown myGuest.

Ensuite, montez le disque virtuel: guestmount -d myGuest -i /mnt (ou utilisez tout autre répertoire existant comme montage). Maintenant en /mnt Vous devriez être capable de voir le système de fichiers de l'invité.

Avec grub2 et systemd, il vous suffit de modifier la configuration de GRUB: vi /mnt/etc/default/grub, et modifier comme

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"

Comme vous devrez courir update-grub sur l'invité, pour le premier départ, vous devez également modifier /mnt/boot/grub/grub.cfg. Trouvez l'élément de menu de démarrage par défaut et appendez les informations de la console à l'entrée linux pour ressembler à

linux   /boot/vmlinuz-4.4.0-75-generic root=UUID=76f3e237-d791-4e9d-8ad7-fe5c9165ae55 ro console=ttyS0,19200 earlyprint=serial,ttyS0,19200

Peut-être avez-vous besoin de privilèges root pour monter et éditer les fichiers.

Redémarrez maintenant l'invité et démarrez la console virtuelle:

virsh start myGuest && virsh console myGuest

Vous devriez voir le journal du noyau puis une invite de connexion. Après se connecter, n'oubliez pas de courir Sudo update-grub.

3
AbdolHosein