type
status
date
slug
summary
tags
category
icon
password
如需技术支持,请点击 👉 联系方式
由于在Linux内核启动阶段,由于帧缓冲占用了显卡设备,导致显卡设备在进行虚拟机直通时无法正常直通,出现 BAR 1: can't reserve 的报错信息。本文章介绍了问题的实际原因并提供相应的解决办法。
1、问题描述
当给虚拟机直通独显时,可能出现如下图所示的报错:
错误信息为:
其中0000:01:00.0
为显卡的 PCI BUS 位置。
2、问题的根本原因
此错误的原因是由于 Linux 的帧缓冲( Framebuffer )占用了显卡,导致显卡无法正常进行直通。
什么是帧缓冲( Framebuffer )?
当 unRAID 系统在启动的过程中,我们可以通过显示器看到 unRAID 系统加载时不断跳出来的一行行启动信息,这些信息是由 Linux 控制台输出到帧缓冲之后,由帧缓冲显示到显示器上从而可以我们看到相关的信息。
所以帧缓冲中的内容就对应屏幕上的信息显示,可以将其简单理解为屏幕上显示内容对应的缓存,修改帧缓冲中的内容即表示修改屏幕上的内容,所以,直接操作帧缓冲可以直接从显示器上观察到效果 —— 《闲聊Framebuffer》。
那么此时影响我们直通显卡给虚拟机的问题出现了,那就是帧缓冲从 unRAID 系统加载开始就占用了我们的显卡,导致我们将显卡直通给虚拟机时不能正常直通,从而出现了
BAR 1: can't reserve
的错误信息。那么解决此问题的目标就很明确了 —— 不让帧缓冲占用我们的显卡设备。因此我们就需要通过一些 Linux 内核启动参数来让系统在启动加载的过程中禁用帧缓冲,从而不让帧缓冲占用显卡。
3、解决办法
往内核启动参数中添加以下参数并重启 unRAID:
此参数的作用就是在 Linux 内核启动阶段禁用帧缓冲,从而实现显卡不被占用的目的。
但需要说明的是,添加上述参数之后,你会发现 unraid 在启动时,在显示器上看不到输出信息了(或者启动信息输出到一个阶段之后不再输出),那么造成这个现象的原因就是我们添加这里的参数所造成的,相当于是一个“副作用”,但实际上不影响 unraid 的使用。
4、补充
此错误还会导致 unraid 日志空间被占满的情况,即主面板中的 Log 空间 100%:
解决办法可以选择重启 unRAID,也可以通过以下命令解决(复制粘贴以下命令到 unRAID 的命令行窗口运行即可):
(完)