Irf*_*rfy 6 kvm virsh libvirt virtual-consoles
我有一个适用于没有图形的 centos7 客户机的串行控制台,我可以使用virsh console vm
. 来宾具有适当的console=ttyS0,115200n8
内核命令行参数。
是否可以配置额外的控制台,以便我可以说出virsh console vm --devname vc1
并获得登录提示?
本能地,我正在考虑以某种方式连接到访客的前 6 个虚拟控制台的字符设备;我研究了libvirt 域格式和virtio-serial,因为看起来我应该朝这个方向发展,但无法让它工作。
背景: 我们遇到了网络问题,需要花费大量时间来修复,在此期间,我们需要一名团队成员处理网络问题,另一名团队成员不间断地继续在虚拟机上工作,因此需要在没有网络的情况下使用多个控制台。
我知道有
<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</graphics>
Run Code Online (Sandbox Code Playgroud)
允许使用 6 个虚拟终端进行 VNC 访问,我只是想知道是否可以通过virsh console <domain> --device <device>
语法以任何合理的方式拥有这样的 6 个虚拟终端,因为这样virsh console
要方便得多。
软件:
# cat /etc/fedora-release # host
Fedora release 24 (Twenty Four)
# virsh --version
1.3.3.3
# qemu-system-x86_64 --version
QEMU emulator version 2.6.2 (qemu-2.6.2-8.fc24), Copyright (c) 2003-2008 Fabrice Bellard
# cat /etc/centos-release # guest
CentOS Linux release 7.3.1611 (Core)
Run Code Online (Sandbox Code Playgroud)
我经常在虚拟机上使用多个“控制台” - 一个用于交互式控制台,显示启动并以登录提示结束,另一个用于将所有这些记录到文本文件中(通常/var/lib/libvirt/consoles/<domain>.log
)
我不知道您是否可以在虚拟机中拥有多个交互式“控制台”,但是您可以添加任意数量的串行端口,然后getty
在虚拟机中运行它们以获得登录提示。
VM中的这些串行端口可以连接到例如使用协议的主机上的文件、套接字或TCP端口telnet
。最容易使用的可能是 telnet 端口。
例如,要添加可通过 访问的串行 ttyS1 串行端口telnet
,请将以下 XML 片段保存到/tmp/serial1.xml
:
<serial type='tcp'>
<source mode='bind' host='127.0.0.1' service='4555' tls='no'/>
<protocol type='telnet'/>
<target port='1'/>
<alias name='serial1'/>
</serial>
Run Code Online (Sandbox Code Playgroud)
然后跑virsh attach-device --config <domain> /tmp/serial1.xml
。
这会将串行端口设备添加到 VM,该设备将在 VM 下次重新启动时激活。(可能有某种方法可以将其添加为热插拔 USB 设备而不是非 USB 串行端口,并避免重新启动虚拟机的需要。我从来没有足够关心去发现)。
VM 重新启动后,在端口上运行 getty。例如,使用 sysvinit,编辑/etc/inittab
并运行telinit q
.
使用系统:
systemctl enable getty@ttyS1.service
systemctl start getty@ttyS1.service
Run Code Online (Sandbox Code Playgroud)
要从 KVM 主机连接到 VM 的串行端口,请运行telnet 127.0.0.1 4555
。
您可以根据需要创建任意多个串行端口,每个端口监听不同的端口。只需更改 XML 片段中的 TCP 端口号 ( service=
)、目标端口和别名即可。
如果您需要从另一台机器访问它,您可以让它侦听不同的 IP 地址(尽管tls='yes'
在这种情况下您可能需要,并使用启用 tls 的telnet
客户端进行连接,这将需要设置一个证书供 qemu 使用)。
例如,我向 Debian Stretch VM 添加了两个串行端口:
首先,本地主机上的 ttyS1:4555
$ telnet localhost 4555
Trying 127.0.0.1...
Connected to localhost.mydomain.
Escape character is '^]'.
Debian GNU/Linux 9 stretch ttyS1
stretch login:
telnet> quit
Connection closed.
Run Code Online (Sandbox Code Playgroud)
然后 ttyS2 在 localhost:4556
$ telnet localhost 4556
Trying 127.0.0.1...
Connected to localhost.mydomain.
Escape character is '^]'.
Debian GNU/Linux 9 stretch ttyS2
stretch login:
telnet> quit
Connection closed.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7793 次 |
最近记录: |