一.问题描述:
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来接收内核的数据