发行版为了系统安全,默认在物理服务器上不能访问KVM虚拟机,所以使用virsh console vm_name是没有任何输出内容的。

RHEL/CentOS 7

在虚拟机内部,在/boot/grub2/grub.cfg最后添加console=ttyS0

grubby --update-kernel=ALL --args="console=ttyS0"

上述命令是直接在/boot/grub2/grub.cfg配置的linux16 /vmlinuz-3.10...行最后添加上console=ttyS0,但并不会修改/etc/default/grub文件

或者编辑/etc/default/grub文件,在GRUB_CMDLINE_LINUX变量值中添加console=ttyS0,然后再执行命令grub2-mkconfig -o /boot/grub2/grub.cfg

然后重启操作系统

已经测试:RHEL可以使用systemctl来激活serial-getty@ttyS0.service

RHEL/CentOS7和Ubuntu 15.04都使用了systemd,所以也可以直接使用systemctl来启用Guest虚拟机的控制台,方法相同

systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

此时可以直接在Host物理服务器使用virsh console my_vm直接访问虚拟机控制台,非常方便。

Debian/Ubuntu

记录但未验证

  • 复制出ttyS0.conf
sudo cp /etc/init/tty1.conf /etc/init/ttyS0.conf

然后编辑ttyS0.conf修改如下行

exec /sbin/getty -8 115200 ttyS0 xterm

当前应该也是通过内核设置来输出串口

编辑/etc/default/grub设置

GRUB_CMDLINE_LINUX_DEFAULT=”console=ttyS0″

然后执行

sudo update-grub2

Ubuntu 15

  • 首先为Guest定义一个console设备
virsh ttyconsole my_vm

输出类似/dev/pts/41则表明Guest已经有了串口设备

否则就要使用virsh edit添加设备

<console type='pty'>
  <target port='0'/>
</console>
  • 在Guest中配置串口

对于Ubuntu 15.04,使用systemctl命令

systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

对于早期版本则编辑/etc/init/ttyS0.conf

# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -L 115200 ttyS0 xterm

然后执行以下命令初始化串口

sudo start ttyS0

参考

results matching ""

    No results matching ""