virsh:VM控制台不显示任何输出

我有一个虚拟机,我可以从virsh开始。 根据virsh dumpxml VM1 ,这是分配的pty:

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

VM正在运行:

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

在虚拟机内部,这是grubconfiguration:

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

这是virsh启动虚拟机的命令行:

 /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 

但是,如果我使用virsh console VM1连接,或者使用cat /dev/pts/6 ,则VM控制台中将不显示任何内容。

还有什么我必须考虑的吗?

UPDATE

我有两个虚拟机,一个是直接使用kvm ,另一个是通过virsh 。 直接启动的那个有一个工作控制台。 我已经在两种情况下validation了打开的文件:

 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 

如您所见,在其中一个VM(错误的)中,没有文件描述符1和2,文件描述符0被redirect到/ dev / null。 这是我猜的问题。

问题是,我怎么告诉virsh不这样做?

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

这是我通常添加到虚拟机定义,使用virsh edit然后console=ttyS0附加在VM的内核线在grub.conf

从来没有让我失望

使用Debian jessie作为主机和客户操作系统的工作示例。

  1. 使用virt-install或virt-manager创build一个虚拟机在任何情况下,您都会将序列控制台语句添加到VM.xml文件中

  2. 在客户VM中运行以下内容

     systemctl enable [email protected] systemctl start [email protected] 
  3. 在guest虚拟机在/etc/default/grubreplace

     GRUB_CMDLINE_LINUX_DEFAULT="quiet" #GRUB_TERMINAL=console 

    通过

     GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0" GRUB_TERMINAL="serial console" 
  4. 在客户VM中运行以下内容

     guest# update-grub 
  5. 运行虚拟机的虚拟机控制台可以通过

     host# virsh console VM 

    或者通过连接控制台启动虚拟机

     host# virsh start VM --console 

资料来源:

  • 0pointer.de systemd为pipe理员,第十六部分
  • keypressure.com通过TLStestinglibvirt