深度好文:解决Ubuntu 18.04安装nvidia显卡驱动,导致内核不匹配:无需重装系统修复内核

深度好文:解决Ubuntu 18.04安装nvidia显卡驱动,导致内核不匹配:无需重装系统修复内核

目录

        • 一、问题描述
        • 二、尝试修复
        • 三、安装Nvidia驱动和CUDA并配置cuDNN
        • 四、总结

一、问题描述

昨天打算更新一下Ubuntu 18.04的显卡驱动,以支持更新版本的cuda和Pytorch。结果在安装新版本驱动的时候,显卡驱动和系统内核版本不一致,导致进不去系统了。后来参考解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本不匹配的问题,非但没有解决问题,反而把系统里面原本的内核损坏了。(这个博客中的写得巨烂,首先排版就很烂,其次注意事项也不写清楚。事实上,对于Linux内核,最好别去动它。一个内核文件也不大,几百兆,就留着也不占什么空间,没有必要卸载旧的内核。装新的内核之后,配置启动方式就行了。)这下完蛋了,重启之后彻底进不去系统了。

二、尝试修复

进入终端模式(ctrl+alt+F1),尝试使用sudo apt install按照我以前的教程安装指定版本(5.11.0-34)的内核,结果一直失败。并且由于系统语言设置的中文,在终端模式下报错信息一直是乱码**,完全没办法定位错误。(事后复盘,我发现5.11.0-34的内核版本是针对Ubuntu 20.04LTS的,所以Ubuntu 18.04用apt install就会找不到匹配的软件包,如下图所示。)

image-20240327120301853

既然是内核的问题,还有一种方法是离线安装内核,下载指定版本内核相关文件到本地,然后安装。但是由于此前内核损坏,进系统的时候出现了bus error,导致无法识别插入的U盘。这个方法也行不通。

所以这个时候,我们需要正常显示报错信息和提示,这样我们才方便定位排查错误。具体做法可以参考:Ubuntu系统误删内核后修复方法。流程总结如下:

  1. 准备一个空的U盘,下载Ubuntu镜像制作启动盘。这里推荐使用国产开源软件ventoy。ventoy超级好用,有了它就无需反复格式化U盘,可以同时保存多个不同类型的镜像文件,并且正常使用U盘。
  2. 更改bios启动方式,进入时选择”try Ubuntu without installing“。
  3. 在进入的Ubuntu系统内挂载原系统根目录,boot目录和必要的系统目录。这一步需要用到fdisk -lmount命令。
  4. 使用chroot命令更改根目录到挂载的原系统根目录,这样就可以进入原系统了。
  5. 在原系统内使用apt(在线安装)或者dpkg(离线安装)命令安装新的内核。
  6. 安装完成之后,使用sudo update-grub来更新一下引导。
  7. 重启,进入Ubuntu高级选项,选择安装的新内核,即可进入系统。
  8. 进入系统后,别忘了更改默认启动内核。具体方法可以参考我之前的教程,提供了三种方法修改启动内核。

在这个过程中,我遇到的坑如下:

  1. 在挂载原系统目录时,根目录在一个分区上,/usr目录在另一个分区上。一开始我只挂载了根目录所在分区,没有挂载/usr目录的分区。导致我使用chroot命令之后,一直使用不了aptdpkg命令。后来,询问GPT-4才发现问题所在。(GPT is all you need!!!)

    image-20240327140310348

  2. 使用apt-get install linux-image-generic时,下载安装的内核版本时4.15.0,这个版本也比较老了。我通过这个内核进入系统之后发现无法上网,没有深究。后来通过离线方式安装了5.15.0的内核版本,离线安装的方式可以参考Linux系统-Ubuntu安装指定版本的内核。需要注意的是,下载的文件应该是不带low-latency的四个文件,而不是参考教程里面说的3个,可参考下图中GPT给出的建议。具体安装流程总结如下:

    image-20240327151404877

  3. 选择内核版本的时候,不能太高也不能太低,亲测5.8.0可用。如果版本太高,例如:5.15.0版本,可能因为依赖问题(5.15.0的内核头文件需要libc6>= 2.34,但是Ubuntu18.04里面libc6版本为 2.27)无法安装headers文件,导致后续安装显卡驱动的时候报错。ERROR: Unable to find the kernel source tree for the currently running kernel. 出现这个错误就是说明没有安装成功headers文件。关于这一点,有个博客写得蛮好的。不过,他的解决方式在我的环境里面没有work。我是直接手动安装了5.8.0的headers才成功。

三、安装Nvidia驱动和CUDA并配置cuDNN

这一部分安装我之前的教程来就可以了,没什么可说的。安装驱动的时候,记得加上--no-x-check --no-nouveau-check --no-opengl-files

这里需要注意一下,修改/etc/profile文件来添加cuda的环境变量时,一定要仔细检查,不然出啥问题了,在进系统时会出现输入密码循环登录的情况。解决方案也很简单,进入终端模式,输入用户名,密码,把/etc/profile修改回去,再重启即可。如果是个人用户使用,在~/.bashrc这种个人级别的配置文件添加cuda路径是最好的。

四、总结

折腾上面这些东西,花了我一个下午+一个晚上。中途一度想放弃重装系统,但是数据丢失的代价太大了,还是坚持下来了。以后可以多问问GPT,把情况描述清楚,GPT-4给出的答案都很靠谱,基本和自己上网搜的解决方案差不多,可以显著提升效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/289137.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringCloud+Hadoop+Vue实现的企业级网盘系统实现

编程语言:Java、Mybatis、Spring、SpringBoot、SpringCloud、Node、Vue 开发环境:Windows 10 Mysql 开发工具:WebStorm、IDEA编译器、Git、Maven 应用部署服务器:SpringBoot内置Tomcat插件 Node服务器:Node v10.1…

jconsole jvisualvm

jconsole 打开方式 命令行输入 jconsole双击想要连接的应用 界面展示 jvisualvm 打开方式 命令行输入 jvisualvm双击想要连接的应用 可以安装插件,比如 Visual GC 直观看到 GC 过程

最新版puppeteer 在linux下的安装教程

最新版的 puppeteer 在安装的时候,Chromium不会自动下载,导致安装失败 这个时候需要跳过Chromium的安装,然后手动下载Chromium并安装。 1、先设置npm跳过Chromium下载 export PUPPETEER_SKIP_DOWNLOADtrue 2、安装puppeteer npm i pup…

1. Java概述

文章目录 1.Java语言概述1.1 Java介绍1.1.1 软件开发概述1.1.2 计算机语言1.1.3 Java 简史1.1.4 Java 技术体系平台1.1.5 Java在各领域的应用1.1.6 Java语言特点1.1.7 Java核心机制一-Java虚拟机1.1.8 Java核心机制二-垃圾回收1.1.9 Java开发工具 1.2 Java环境搭建1.2.1 JDK、J…

PhpStorm 2023 for Mac/Win:开启PHP集成开发新纪元,让编程更高效更智能

在数字时代的浪潮中,PHP作为一种广泛应用的服务器端脚本语言,其重要性不言而喻。而要在PHP的世界里游刃有余,一款强大的集成开发环境(IDE)是必不可少的。PhpStorm 2023,正是这样一款能够助您一臂之力的编程…

Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(三)

概览 承接上一篇博文: Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(二)我们在其中讨论了如何使用第三方强大通用的钩子库 SwiftHook 来协助我们完成 NSObject 构造器 init 的 SWIZZ 操作。我们还讨论了为什么用 print 打印对象信息时会发生崩溃…

如何借用 NTFS 交换数据流 实现隐藏文件?如何使用【文件包含】PHP伪协议?不同操作系统如何实现文件隐藏和木马伪装?

如何借用 NTFS 交换数据流 实现隐藏文件?如何使用【文件包含】PHP伪协议?不同操作系统如何实现文件隐藏和木马伪装? NTFS交换数据流(Alternate Data Streams, ADS)是NTFS文件系统特有的一种功能,它允许在同一个文件名下存储多个数据流。除了默认的数据流(通常用于存储文…

ExoPlayer架构详解与源码分析(12)——Cache

系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…

免费的CMS平台,免费CMS文章更新系统

随着网站建设的需求日益增加,寻找一款免费的CMS平台以及配套的文章更新系统成为了许多网站所有者的首要任务。本文将探讨免费的CMS平台的特点,以及CMS文章更新系统的作用和如何选择合适的系统。 免费的CMS平台的特点 开源免费:免费的CMS平台…

Ansible-1

Ansible是一款自动化运维、批量管理服务器的工具,批量系统配置、程序部署、运行命令等功能。基于Python开发,基于ssh进行管理,不需要在被管理端安装任何软件。Ansible在管理远程主机的时候,只有是通过各种模块进行操作的。 需要关…

mysql80-DBA数据库学习1-数据库安装

掌握能力 核心技能 核心技能 mysql部署 官网地址www.mysql.com 或者www.oracle.com https://dev.mysql.com/downloads/repo/yum/ Install the RPM you downloaded for your system, for example: yum install mysql80-community-release-{platform}-{version-number}.noarch…

JAVA虚拟机实战篇之GC调优[2](解决GC问题的手段)

文章目录 版权声明解决GC问题的手段优化基础JVM参数-Xmx 和 –Xms-XX:MaxMetaspaceSize 和 –XX:MetaspaceSize-Xss虚拟机栈大小‐XX:SurvivorRatio和‐XX:MaxTenuringThreshold-XX:DisableExplicitGC 案例:垃圾回收器的选择复习:垃圾回收器的组合关系背…

vue 元素拖动,复制,已复制元素可移动,快捷方便,已解决

注意:使用当前组件时,请先了解组件代码逻辑 下方组件根据自己的需求来更改响应的元素id,调整代码实现逻辑,这里不过多解释 import Vue from "vue";/*** 拖拽*/ Vue.directive("Drag", (el) > {const move…

MySQL表内容的增删查改

在前面几章的内容中我们学习了数据库的增删查改,表的增删查改,这一篇我们来学习一下对表中的内容做增删查改。 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 1.创建Create 我们先创建…

深入解析MD5哈希算法:原理、应用与安全性

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 本文将深入探讨MD5哈希算法的工作原理、应用场景以及安全性问题。我们将了解MD5如何生成固定长度的哈希值,以及它在数…

BUG未解之谜01-指针引用之谜

在leetcode里面刷题出现的问题,当我在sortedArrayToBST里面给root赋予初始值NULL之后,问题得到解决! 理论上root是未初始化的变量,然后我进入insert函数之后,root引用的内容也是未知值,因此无法给原来的二叉…

could not resolve com.android.tools.build:gradle:4.1.1.

一、报错信息 could not resolve com.android.tools.build:gradle:4.1.1.其实是因为你的网络不能从AS工程提供的mavenCentral()、google()和jcenter()等仓库下载相应的依赖。 二、解决方法 在build.gradle(Project)中,在原先的maven仓库前加上阿里云镜像源。这里…

如何遍历整个DOM树

原文链接:[如何遍历整个DOM树(外网原文链接)](https://chrisdeo.github.io/2019/07/20/%E5%A6%82%E4%BD%95%E9%81%8D%E5%8E%86%E6%95%B4%E4%B8%AADOM%E6%A0%91/) 作为前端开发工程师,我们大部分工作内容其实还是围绕着DOM在进行Javascript的编写&#xf…

SQL把统计结果作为条件进行查询

今天在社区看到一个问题如何返回 统计数值,比较简单,分享一下写法: --测试数据 if not object_id(NTempdb..#T) is nulldrop table #T Go Create table #T([name] nvarchar(21),[year] nvarchar(21),[time] nvarchar(22)) Insert #T select …

手写SpringBoot(二)之动态切换Servlet容器

系列文章目录 手写SpringBoot(一)之简易版SpringBoot 手写SpringBoot(二)之动态切换Servlet容器 手写SpringBoot(二)之动态切换Servlet容器 文章目录 系列文章目录手写SpringBoot(二&#xff…