5.4. 打开虚拟机串口控制台
通过使用 virsh console
命令,可以连接到虚拟机(VM)的串行控制台。
但虚拟机有以下情况时很有用:
- 没有提供 VNC 协议,因此没有为 GUI 工具提供视频显示。
- 没有网络连接,因此无法使用 SSH 进行交互。
先决条件
主机上的 GRUB 引导装载程序必须配置为使用串口控制台。要进行验证,请检查主机上的
/etc/default/grub
文件是否包含GRUB_TERMINAL=serial
参数。$ sudo grep GRUB_TERMINAL /etc/default/grub GRUB_TERMINAL=serial
虚拟机必须配有一个串口控制台设备,如
console type='pty'
。要进行验证,请执行以下操作:# virsh dumpxml vm-name | grep console <console type='pty' tty='/dev/pts/2'> </console>
虚拟机必须在内核命令行中配置串口控制台。要验证这一点,虚拟机上的
cat /proc/cmdline
命令输出应包含 console=<console-name>,其中 <console-name> 是特定的架构:-
对于 AMD64 和 Intel 64:
ttyS0
对于 ARM 64:
ttyAMA0
注意此流程中的以下命令使用
ttyS0
。# cat /proc/cmdline BOOT_IMAGE=/vmlinuz-3.10.0-948.el7.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb
如果没有在虚拟机中正确设置串口控制台,请使用 virsh 控制台连接到虚拟机,请将您连接到无响应的客户端控制台。但是,您仍然可以使用 Ctrl+] 快捷键退出无响应的控制台。
要在虚拟机上设置串行控制台,请执行以下操作:
在虚拟机上启用
console=ttyS0
内核选项:# grubby --update-kernel=ALL --args="console=ttyS0"
清除可能会阻止您更改生效的内核选项。
# grub2-editenv - unset kernelopts
- 重启虚拟机。
-
对于 AMD64 和 Intel 64:
必须启用
serial-getty@<console-name>
服务。例如,在 AMD64 和 Intel 64 上:# systemctl status serial-getty@ttyS0.service ○ serial-getty@ttyS0.service - Serial Getty on ttyS0 Loaded: loaded (/usr/lib/systemd/system/serial-getty@.service; enabled; preset: enabled)
流程
在您的主机系统上,使用
virsh console
命令。如果 libvirt 驱动程序支持安全控制台处理,以下示例连接到 guest1 虚拟机:# virsh console guest1 --safe Connected to domain 'guest1' Escape character is ^] Subscription-name Kernel 3.10.0-948.el7.x86_64 on an x86_64 localhost login:
- 您还可以使用与标准命令行界面相同的方法与 virsh 控制台互动。
其它资源
-
您系统上的
virsh
手册页 - 在虚拟机上配置串行控制台日志(视频)