♣️解决显卡直通 kernel: vfio-pci BAR 1: can't reserve 问题
00 分钟
2023-6-13
2023-8-27
type
status
date
slug
summary
tags
category
icon
password

1、问题描述

当给虚拟机直通独显时,可能出现如下图所示的报错:
notion image
错误信息为:
其中 0000:01:00.0 为显卡的 PCI BUS 位置。

2、问题的根本原因

此错误的原因是由于 Linux 的帧缓冲( Framebuffer )占用了显卡,导致显卡无法正常进行直通。
什么是帧缓冲( Framebuffer )
当 unRAID 系统在启动的过程中,我们可以通过显示器看到 unRAID 系统加载时不断跳出来的一行行启动信息,这些信息是由 Linux 控制台输出到帧缓冲之后,由帧缓冲显示到显示器上从而可以我们看到相关的信息。
所以帧缓冲中的内容就对应屏幕上的信息显示,可以将其简单理解为屏幕上显示内容对应的缓存,修改帧缓冲中的内容即表示修改屏幕上的内容,所以,直接操作帧缓冲可以直接从显示器上观察到效果 —— 《闲聊Framebuffer》
unraid 启动时的控制台输出信息
unraid 启动时的控制台输出信息
那么此时影响我们直通显卡给虚拟机的问题出现了,那就是帧缓冲从 unRAID 系统加载开始就占用了我们的显卡,导致我们将显卡直通给虚拟机时不能正常直通,从而出现了 BAR 1: can't reserve 的错误信息。
那么解决此问题的目标就很明确了 —— 不让帧缓冲占用我们的显卡设备。因此我们就需要通过一些 Linux 内核启动参数来让系统在启动加载的过程中禁用帧缓冲,从而不让帧缓冲占用显卡。

3、解决办法

往内核启动参数中添加以下参数并重启 unRAID:
此参数的作用就是在 Linux 内核启动阶段禁用帧缓冲,从而实现显卡不被占用的目的。
notion image
notion image
但需要说明的是,添加上述参数之后,你会发现 unraid 在启动时,在显示器上看不到输出信息了(或者启动信息输出到一个阶段之后不再输出),那么造成这个现象的原因就是我们添加这里的参数所造成的,相当于是一个“副作用”,但实际上不影响 unraid 的使用。

4、补充

此错误还会导致 unraid 日志空间被占满的情况,即主面板中的 Log 空间 100%:
notion image
解决办法可以选择重启 unRAID,也可以通过以下命令解决(复制粘贴以下命令到 unRAID 的命令行窗口运行即可):

(完)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

评论