0%

Proxmox VM 直通声卡导致宿主机无法正常启动的解决方法

故障原因

使用PVE虚拟的Windows 10通过远程桌面方式播放视频,在播放的过程中音频有时断时续的现象。分析可能是虚拟的声卡性能差导致,想仿照PVE直通GPU的方式直通宿主机声卡给Windows 10,但经过一顿操作后直通还是失败了并且导致宿主机网络功能异常无法再通过远程访问PVE的管理界面。这时候一定会想到可以通过宿主机外接显示器操作啊,对不起,宿主机的显卡已经直通给Windows 10了接上也没有信号!还有一个致命的点就是虚机是随宿主机开机启动的,宿主机重启也没有用,事情陷入了僵局……

  1. 宿主机硬件直通失败导致宿主机网络发生问题无法进入PVE管理界面
  2. 虚机随宿主机开机启动,无法通过重启宿主机解决
  3. 由于宿主机的显卡已经直通给客户机,所以无法通过外接显示设备的方式操作宿主机

初步解决方案

远程访问PVE是没戏了,网络完全Down了起不来。因为PVE是基于Linux的并且Bootloader是GRUB,想到了编辑Grub启动菜单进入Recovery mode然后修改PVE虚机的配置文件不让windows 10自动启动。具体操作步骤如下:

宿主机外接显示器,显示GRUB开机菜单(这时候客户机还没有启动,显卡没有被直通过去)

进入recovery mode

  1. 在开机菜单出现时,键盘按e键进入编辑模式
    proxmox grub
  2. 找到linux /vmlinuz-...那一行
    grub editor
  3. 在后面输入init=/bin/bash
  4. CTRL + x会自动进行引导,稍等一会儿就引导完成就进入了recovery mode
    recovery mode

使根文件系统可写

Recovery mode默认以只读方式挂载根文件系统(rootfs),我们需要修改文件所以需要以读写方式重新挂载。

1
mount -rw -o remount /

修改PVE虚机配置失败

上面重新挂载了根文件系统后我们就可以去找找PVE的虚机配置文件了,经过查找在这个文件夹下:/etc/pve。但是,坑爹的来了,这文件夹就是空的什么也没有,挠头…
经过Google发现PVE的虚机配置文件是通过其特有的pmxcfs[1]方式进行管理,它是通过一个SQLite数据库文件/var/lib/pve-cluster/config.db来存储配置文件的,PVE启动后查询该数据库然后将配置文件数据加载进内存后挂载到/etc/pve目录下。
由于我们在Recovery mode下,上述挂载过程不会发生所以看不到虚机的配置文件,这就尴尬了😂。

转个弯就能解决问题的方案

上面说到我们即使进入Recovery mode下也看不到虚机的配置,事情看似陷入了僵局。但是我们把问题再过一下脑子:

  1. 为什么要费这么大功夫进入recovery mode?
    为了去改虚机的配置,不让这台错误配置直通的虚机启动
  2. 现在遇到什么问题?
    虚机的配置被pmxcfs管理,无法直接操作
  3. 现在有什么方案?
    1. 尝试在recovery mode下挂载pmxcfs
    2. 备份然后删除pmxcfs数据库文件/var/lib/pve-cluster/config.db

上面3.1的方案官方给的教程是把pmxcfs数据库文件拷贝到一台健康的PVE node上去挂载然后修改,我仅此一个PVE Node无法实施。就只剩3.2的方案了。

具体操作如下:

删除pmxcfs数据库让PVE宿主机正常启动

以下操作在Recovery mode根文件系统可写环境下完成。

1
2
3
4
cd /var/lib
mkdir backup
mv pve-cluster/* backup/
sync

然后重启

恢复pmxcfs数据库

重启之后网络就可以进入PVE管理UI了,因为pmxcfs被清的缘故,这时UI中是没有任何虚机的。我们需要进行恢复pmxcfs数据库操作:

以下操作在PVE node Shell完成。

1
2
3
4
5
6
7
8
9
# 清理新生成的pmxcfs数据库文件
rm -rf /var/lib/pve-cluster/*

# 恢复
mv /var/lib/backup/* /var/lib/pve-cluster/
rm -rf /var/lib/backup

# 重启pve-cluster服务挂载恢复后的pmxcfs
systemctl restart pve-cluster

挂载之后,去/etc/pve/qemu-server文件夹下就能找到对应虚机的配置文件。比如本文中windows 10的虚机id是100对应配置文件就为100.conf,编辑此文件删除掉错误的配置保存即可。

问题解决

完成上面的步骤,重启宿主机后PVE就正常工作了。


  1. Proxmox Cluster File System (pmxcfs) ↩︎

请吃个烤串~~
willsky 微信

微信