记录一次archlinux升级nvidia驱动滚挂
大概有不到一个月没升级,使用sudo pacman -Syu
升级了一下,升级完之后重启卡在:
failed to start Load Kernel Module
tty都切不了了,显示的字体也偏大,显示不正常。百度了一下,可能与nvidia显卡驱动有关,加载nvidia内核模块失败,升级的时候看到将nvidia 升级到了515.48.07
。
由于nvidia 驱动在linux的不成熟(2022年6月),滚动升级确实有点危险,于是打算不在linux下使用nvidia显卡了,使用livecd 进去系统然后卸载显卡驱动试试。
livecd启动时候报错BIOS error
搜索了一下可能与没有开启核心显卡有关,livecd 不能使用nvidia显卡。于是在bios 中开启核心显卡成功进入了livecd。
在livecd中挂在系统盘,然后切换到系统根路径:
mount /dev/nvme1p1 /mnt
arch-chroot /mnt
查询已经安装的nvidia驱动,并卸载:
pacman -Q |grep nvidia
pacman -Rns nvidia
# 实际上将跟nvidia相关的都卸载了
查询是否还有nvidia 内核模块:
lsmod |grep nvidia
# 查询结果为空,没有nvidia模块
卸载完后,重启。重启卡在clean 磁盘,日志就不动了,但是现在可以切换tty了。使用ctrl+alt+f2
新开一个tty可以登录进来,现在应该是卡在图形界面了,启动一下xwindows试试:
startx
报错了,给了一个日志文件/var/log/Xorg.0.log
里面大概是nvdia模块加载失败。看来虽然卸载了nvidia, x11还在用它,查看一下X的配置文件/etc/X11/xorg.conf
:
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig: version 510.60.02
...
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "Nvidia Corporation"
BusID "PCI:1:0:0"
EndSection
现在这个X11的配置文件还是nvidia生成的,在Section "Device"
里面配置还是使用nvidia显卡进行渲染,这里需要修改成使用核心显卡渲染,感觉这里面的核心参数应该是Driver
和BusID
,如何配置Driver没找到文档,先设置成"intel" , 查看Intel显卡的BusID:
$ lspci |grep VGA
0000:00:02.0 VGA compatible controller: Intel Corporation TigerLake-H GT1 [UHD Graphics] (rev 01)
0000:01:00.0 VGA compatible controller: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] (rev a1)
nvdia 的id是 01:00.0
对应写成 "PCI:1:0:0"
,那intel的BusID应该写成:"PCI:0:2:0"
,这部分配置修改后为:
...
Section "Device"
Identifier "Device0"
Driver "intel"
VendorName "Intel Corporation"
BusID "PCI:0:2:0"
EndSection
...
改完之后再执行startx
图形界面可以正常启动了。
总结:
- 大概率是由于升级nvidia显卡导致的挂机,暂时先不使用独显了,如果要修复显卡驱动可以尝试降级。
- linux 的内核模块加载失败可能会导致内核无法启动,也就是显卡驱动会影响内核加载。也可以尝试使用
rmmod
删除nvidia内核模块看看能否启动内核。 - 进入livecd 再使用
arch-chroot
是可以对原系统进行运维的,就跟安装的时候一样 - x11是可以配置显卡的,很多Linux独显黑屏估计都跟x11 配置了使用nvidia设备但是又没有驱动好有关
- 再碰到黑屏或许也可以尝试在grub启动界面添加内核参数解决,通过内核参数禁用有问题的模块来进入系统。