通过Serial Console 来连接KVM虚拟机

首先,连接KVM虚拟机的方式由以下这些,本文就是针对最后一种方式:

  • virt-manager(GUI)
  • VNC client (GUI)
  • ssh (CLI)
  • Serial Console(CLI)

确认虚拟机的硬件配置是否支持:

virsh dumpxml guest-vm | grep -A4 \<console

输出: 1)

    <console type='pty' tty='/dev/pts/13'>
      <source path='/dev/pts/13'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>

确认虚拟机本身是否支持: 2)

grep "ttyS0" /etc/securetty

2.1 CentOS-7

2.1.1 方式1

利用grubby命令搞定: 3)

# 移除开机GUI,显示字符界面,详细输出;
# 一行命令搞定,简单粗暴!
grubby --remove-args="rhgb quiet" --args=console=ttyS0,115200 --update-kernel=ALL

2.1.2 方式2

修改grab的默认配置,然后重新生成新配置:

vim /etc/default/grub
添加 console=ttyS0 到 GRUB_CMDLINE_LINUX后面;去掉rhgb,quiet参数.
sed -i 's/ rhgb quiet//' /etc/default/grub
# 更新配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

2.2 CentOS-6

Centos6系统,在虚拟机系统中做如下配置:

  1. echo “ttyS0” » /etc/securetty
  2. 在/etc/grub.conf文件中为内核添加参数,在kernel后面加:console=ttyS0
  3. 在/etc/inittab中添加agetty:S0:12345:respawn:/sbin/agetty ttyS0 115200
  4. 重启客户机
  5. reboot

2.3 Ubuntu 16.04

vim /etc/default/grub
# 修改GRUB_CMDLINE_LINUX_DEFAULT
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,38400n8 console=tty0"
update-grub

如果是ubuntu 14.04还需下面的操作:

# Create the serial console in the guest
cp /etc/init/tty1.conf /etc/init/ttyS0.conf
vim /etc/init/ttyS0.conf
# 修改最后一行为:
sbin/getty -8 38400 ttyS0”.

2.4 Ubuntu 18.04/Debian 10

cat > /etc/default/grub <<'EOF'
GRUB_DEFAULT=0
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8"
GRUB_TERMINAL="console serial"
EOF
 
update-grub

virsh start guest-vm --console
# OR
virsh console guest-vm
Connected to domain vm.example.com
Escape character is ^]

当通过“virsh console vm_name”来连接虚拟机的时候,terminal的界面很小,不能自适应,需要经过下面的配置来校正。

4.1 手动调整serial界面

长度100,宽度100:

stty rows 100 cols 100

4.2 自动适配

安装xterm:

yum install xterm
apt install xterm

将以下内容写入/etc/bashrc: 4)

# resize serial window
if [[ $(tty) == '/dev/ttyS0' ]]; then
  trap 'resize > /dev/null 2>&1' DEBUG
fi
或者:
tty | grep -q /dev/ttyS && trap 'eval $(resize > /dev/null 2>&1)' DEBUG


1)
确认有serial的端口映射,默认是有的.
2)
没有输出的话需要添加ttyS0到/etc/securetty
3)
强烈推荐
4)
捕捉到DEBUG信号的时候执行resize,丢弃任何输出
  • virtualization/kvm/kvm_console.txt
  • 最后更改: 2019/09/04 05:17
  • 由 mrco