为什么给虚机配串口日志
图形控制台只能看当前画面,画面一闪而过的内核报错与引导失败信息很难抓住;串口输出可以同时接入交互控制台与日志文件,既能用 virsh console 登录,也能把输出留存下来事后翻查。做法是在域定义里建 serial 与 console 设备:type 取 pty 用于交互,type 取 file 则把输出写进文件,同时 guest 内核命令行要加上串口参数,否则内核信息不会送到串口。
基本信息
| 适用平台 | 使用 libvirt 与 QEMU 的 Linux 宿主,guest 通常为 Linux |
|---|---|
| 交互设备 | serial type='pty' 配合 console 设备,用 virsh console 进入 |
| 日志设备 | serial type='file' 并指定 source path,输出留存到文件 |
| guest 内核参数 | 在启动参数中加入串口与控制台参数(如 ttyS0 与波特率) |
| guest 服务 | 启用对应串口的 getty 服务才能通过串口登录 |
| 用途 | 引导失败排查、内核 panic 留痕、无人值守环境的证据留存 |
典型使用场景
- 虚机引导失败或反复重启,需要看到内核阶段的输出
- 远程虚拟化环境没有图形控制台,用串口做交互登录
- 关键虚机留存启动日志,用于事后分析异常重启原因
- 自动化部署场景:通过串口脚本化下发与采集信息
- 内核参数调优验证:观察引导过程中的报错与提示
- 取证与审计:把启动过程日志纳入统一的日志收集
域定义片段与验证
域定义片段与验证
<serial type='pty'> <!-- 交互用串口设备 -->
<target port='0'/>
</serial>
<console type='pty'> <!-- 与上面配对的控制台设备 -->
<target type='serial' port='0'/>
</console>
<!-- 需要留存日志时把 serial 改为 type='file' 并指定 <source path='/var/log/vm1-serial.log'/> -->
# guest 内核命令行需包含串口控制台参数(设备名与波特率按实际情况填)
# 交互登录还需在 guest 内启用对应串口的 getty 服务
# 验证:virsh console vm1 能进入,且日志文件在重启后持续增长配置项与效果
| 配置项 | 作用 | 常见问题 |
|---|---|---|
| serial type='pty' | 提供交互串口通道 | 只配设备不改内核参数,串口里看不到内核输出 |
| serial type='file' | 把串口输出写入日志文件 | 文件所在分区写满导致日志中断 |
| console 设备 | 与 serial 配对供 virsh console 使用 | 缺少 console 时无法用命令行进入 |
| 内核命令行 | 让内核把输出送到串口 | 参数写错设备名,输出仍走图形控制台 |
| getty 服务 | 提供串口登录提示符 | 未启用时串口只有输出、无法登录 |
| 日志轮转 | 控制日志文件增长 | 未纳入轮转,长期累积占满分区 |
需要留存日志时把 serial 改成 type='file' 并指定 source path;guest 内核命令行同时加上串口参数,才能把内核与登录输出送到串口。
串口日志文件会持续增长并包含引导与登录信息:必须纳入日志轮转与容量监控,同时注意其中的敏感信息暴露。