我有一个虚拟机,我可以从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控制台中将不显示任何内容。
还有什么我必须考虑的吗?
我有两个虚拟机,一个是直接使用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作为主机和客户操作系统的工作示例。
使用virt-install或virt-manager创build一个虚拟机在任何情况下,您都会将序列控制台语句添加到VM.xml文件中
在客户VM中运行以下内容
systemctl enable [email protected] systemctl start [email protected]
在guest虚拟机在/etc/default/grubreplace
GRUB_CMDLINE_LINUX_DEFAULT="quiet" #GRUB_TERMINAL=console
通过
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0" GRUB_TERMINAL="serial console"
在客户VM中运行以下内容
guest# update-grub
运行虚拟机的虚拟机控制台可以通过
host# virsh console VM
或者通过连接控制台启动虚拟机
host# virsh start VM --console
资料来源: