虚拟机串口控制台
在host主机上访问vm的控制台
kvm虚拟机的XML配置中设置设备(以下两种配置方法皆可):
如下(host操作系统CentOS 7)
或者如下(host操作系统Fedora 26/27)
此外,vitio控制台设备/dev/hvc[0-7]
输出到guest中(参考 http://fedoraproject.org/wiki/Features/VirtioSerial )
这里的虚拟机设备
'/dev/pts/0'
默认在libvirt创建虚拟机的时候就会添加,并且会随着虚拟机的增加,设备编号从0
开始递增。通常情况下不需要手工设置。
guest虚拟机内部设置串口输出
kvm虚拟机(guest)内部设置GRUB,向内核传递如下参数
或者(实际设置效果相同)
CentOS 7 grub2 设置串口输出
在CentOS 7上使用GRUB2
首先编辑
/etc/default/grub
设置如下
然后执行
重启虚拟机,如果使用sudo virsh console centos7
连接控制台报错 (这里假设虚拟机名字是centos7
)
则表明已经有其他virsh console
指令连接到了这个控制台,可以通过ps aux | grep console
检查一下host主机中是否存在virsh console centos7
kvm虚拟机(guest)内部编辑
/etc/securetty
添加如下行,允许root
从ttyS0
设备登陆:
重启虚拟机。
CentOS 6 grub 设置串口输出
在CentOS 6上使用grub
直接编辑
/boot/grub/menu.lst
kvm虚拟机(guest)内部编辑
/etc/securetty
添加如下行,允许root
从ttyS0
设备登陆:
重启虚拟机。
Ubuntu 16/14,
在Ubuntu 16/14,Debian 9/8/7 都使用GRUB2,类似CentOS 7。不过,ubuntu/debian提供了
update-grub
指令更新grub.cfg
配置文件。(Configure GRUB2 Boot Loader Settings In Ubuntu 16.04)
编辑
/etc/default/grub
在GRUB_CMDLINE_LINUX
行添加serial=tty0 console=ttyS0,115200n8
,案例如下
执行以下命令生成
grub.cfg
配置
在Ubuntu 16上,
update-grub2
命令实际是update-grub
执行程序的一个软链接。
kvm虚拟机(guest)内部编辑
/etc/securetty
添加如下行,允许root
从ttyS0
设备登陆:
SUSE
SUSE也使用GRUB2,配置方法类似。参考 Configure kernel core dump capture
guest虚拟机控制台输出到host主机日志
为了排查guest出现的内核crash问题,通常可以采用在guest操作系统内部启用kdump,或者采用libvirt pvpanic。此外,也可以通过将虚拟控制台的信息输出到host主机日志,方便从host主机上分析vm crash原因。
在host主机上编辑虚拟机XML,添加如下内容
注意:需要去除原先设置的console登陆的配置,改为定向到host的文件。
如果没有注释掉
<serial type='pty'>
和<console type='pty'>
,则会提示:
则控制台输出可以记录到host主机的/var/log/libvirt/vm/vm-serial.log
文件中。
注意:必须确保
/var/log/libvirt/vm
目录存在,否则虚拟机无法启动。
不过,上述配置也带来libvirtd.log
日志中记录:
代码
参考
Last updated