在PVE里使用虚拟串口与虚拟机进行命令行交互
起因
在pve中,如果给虚拟机直通了物理显卡,此虚拟机在加载显卡驱动后就会默认使用直通显卡输出视频流,因此pve对于这个虚拟机的基于虚拟显卡的VNC控制台就无法使用了,虚拟机进入“Headless”状态。因此,为了在这种情况下仍然能通过控制台与虚拟机交互,就需要使用虚拟串口。
实战操作
添加硬件接口
进入pve后台,选中要添加串口的虚拟机,进入硬件选项卡,点击“添加”-“串行接口”,编号使用默认的Serial0即可。确认后更改即写入了配置文件。
修改GRUB引导配置
通过 SSH 进入虚拟机,编辑 GRUB 配置文件:
sudo nano /etc/default/grub
找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,将其修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty0 console=ttyS0,115200n8"
console=tty0:保留常规屏幕输出。console=ttyS0,115200n8:将内核日志和终端输出同时发送到串口,速率为 115200,并设置为首要输出端口。
同时,确保以下几行也存在(如果没有则添加):
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
修改完毕后,将更改写入GRUB文件,并执行以下命令应用更改:
sudo update-grub
如果使用的是 Arch Linux 等没有 update-grub 的发行版,请执行 grub-mkconfig -o /boot/grub/grub.cfg。
执行完毕后关闭虚拟机,并重新冷启动。此时刚才添加的虚拟串口被应用。
在PVE控制台里使用串口
启动后,由于首要输出端口被设定为串口,因此vnc在加载驱动前也收不到画面。此时需要在控制台右上角的Console选项卡里切换到xterm.js,连接后即可通过串口和虚拟机进行命令行交互。
许可协议:
CC BY 4.0