一.问题描述:

KVM中宿主机通过console无法连接客户机,卡在这里不动了。

# virsh console vm01
Connected to domain vm01
Escape character is ^]

为KVM客户机添加virsh console支持  http://www.linuxidc.com/Linux/2013-02/79556.htm

二、解决办法:利用vnc或宿主机的桌面进入客户机vm01中添加参数

1、添加ttyS0的安全许可,允许root登录:
# echo "ttyS0" >> /etc/securetty
2、在/etc/grub.conf文件中为内核添加参数:
console=ttyS0
这步要注意:
console=ttyS0一定要放在kernel这行中(大约在第16行),不能单独一行,即console=ttyS0是kernel的一个参数,不是单独的,如下(往右拉进度条,在最后):
# cat -n /etc/grub.conf
  # grub.conf generated by anaconda
 #
 # Note that you do not have to rerun grub after making changes to this file
 # NOTICE:  You have a /boot partition.  This means that
 #          all kernel and initrd paths are relative to /boot/, eg.
 #          root (hd0,0)
 #          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
 #          initrd /initrd-[generic-]version.img
 #boot=/dev/vda
  default=0
  timeout=5
  splashimage=(hd0,0)/grub/splash.xpm.gz
  hiddenmenu
  title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)
      root (hd0,0)
      kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0
      initrd /initramfs-2.6.32-431.el6.x86_64.img
3、在/etc/inittab中添加agetty:
S0:12345:respawn:/sbin/agetty ttyS0 115200
4、重启客户机:
# reboot

三、问题解决

# virsh console vm01
Connected to domain vm01
Escape character is ^]
Red Hat Enterprise Linux Server release 6.5 (Santiago)
Kernel 2.6.32-431.el6.x86_64 on an x86_64
 
vm01 login: root
Password:
Last login: Sun Oct 12 00:11:47 on tty1
[root@vm01 ~]#

附:关于终端的基本概念汇总

tty(终端设备的统称):

tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。

终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。

pty(伪终端,虚拟终端):

但是如果我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty)

pts/ptmx(pts/ptmx结合使用,进而实现pty):

pts(pseudo-terminal slave)是pty的实现方法,与ptmx(pseudo-terminal master)配合使用实现pty。



====================================== 简洁版内容=======================================

  • 可以实现在宿主机中命令行连接到客户机的命令行
  • 需要在客户机添加支持
  • 客户机:
- 添加ttyS0的安全许可,允许root登录
#echo "ttyS0" >> /etc/securetty
- 在/etc/grub.conf文件中为内核添加参数
#sudo vim /etc/grub.conf
添加console=ttyS0到kernel属性那一行最后,约16行处
- 在/etc/inittab中添加agetty
#sudo vim /etc/inittab
在最后添加一句
S0:12345:respawn:/sbin/agetty ttyS0 115200
- 重启虚拟机
# reboot
  • 宿主机
# sudo virsh console vmname
Connected to domain vmname
Escape character is ^]
这里提示连接上去了,并且按Ctrl+]可以随时退出
输入:
tty
显示:
/dev/ttyS0
随即进入客户机终端,如果是初次登录先填写用户名再根据提示填写密码

  • 整体原理是securetty设置安全权限,允许root登录。修改grub.conf让内核把输出定向至ttyS0。然后在inittab中加一个ttyS0在系统启动时会生成一个ttyS0来接收内核的数据