ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu安装与NVIDIA驱动配置全指南:从分区到排错

Ubuntu安装与NVIDIA驱动配置全指南:从分区到排错 如果你正打算在一台新机器或双系统环境里装 Ubuntu或者在虚拟机里折腾过几次后想转到实体机跑通全流程这篇内容值得完整看一遍。这个系列第一篇我从镜像下载、启动盘制作、系统安装、分区方案一路讲到 NVIDIA 驱动安装的三种方式和各种高频报错排查把整条链路串起来讲。之所以这么安排是因为我见过太多人卡在最后一步系统装好了桌面进来了然后 NVIDIA 驱动一装就黑屏、循环登录、nvidia-smi报错最后心态崩掉。你会发现大部分问题的根源其实在安装前和安装中就已经埋下了。1. 装系统前先解决镜像、U盘、BIOS三个基础问题很多人一上手就急着下载镜像、写U盘结果系统都进不了安装界面或者在驱动阶段踩大坑。花十分钟把下面三件事确认好后面能省几个小时。1.1 机器是UEFI还是LegacySecure Boot怎么关先搞清楚你的机器引导模式。现在绝大多数新电脑默认是UEFI GPT引导老一点的可能还是传统的 Legacy MBR 模式。这直接决定了你分区怎么分、启动盘怎么做。开机进 BIOS 的方法各品牌不一样常见是开机瞬间连按 Del 或 F2。进去以后主要找这几个东西引导模式Boot Mode / BIOS Mode设为 UEFI部分机器叫 UEFI Only。Secure Boot尽量设为 Disabled。这一步非常关键后面装 NVIDIA 驱动时如果 Secure Boot 还开着闭源驱动模块因为没通过签名校验加载时会被内核拒绝结果就是驱动装完重启后不起作用。如果你不想关 Secure Boot后面装驱动时系统会提示你注册 MOK那个流程比较绕新手没必要折腾。如果机器同时支持 CSM / Legacy 兼容建议直接关掉避免引导错乱。不同品牌主板入口差异很大但思路是一致的找到引导相关的菜单改 UEFI关 Secure Boot保存重启。如果你只打算用虚拟机这一步可以跳过虚拟机的固件设置在创建虚拟机时选 UEFI 或 BIOS 都行跟实体机逻辑一样。1.2 镜像版本怎么选下载后如何校验镜像下载我建议优先走官方源如果你所在网络环境访问官方源速度不理想用清华 TUNA、阿里云这类公共镜像站也行它们同步的就是官方内容。版本上非特殊需求一律选 LTS长期支持版比如 22.04 LTS 或 24.04 LTS别追临时版本软件源和驱动适配都需要时间用的人越多你遇到问题时能搜到的解决方案也越多。下载镜像时有一个很容易被忽略的习惯校验文件完整性。官方页面会提供 SHA256 校验值下载完以后在本地算一下镜像的 SHA256跟官网给出的值比对。我之前有一次用第三方链接下的镜像安装到一半报错查来查去才发现是镜像文件损坏白白浪费了一晚上。校验命令很简单# Linux / macOS sha256sum ubuntu-24.04-desktop-amd64.iso # Windows PowerShell Get-FileHash .\ubuntu-24.04-desktop-amd64.iso -Algorithm SHA2561.3 制作启动U盘的三种方法我推荐哪种镜像下载好之后需要一个至少 8GB 的U盘来制作启动盘。注意制作启动盘会把U盘里的所有数据清空操作前确认U盘里没有要紧东西。三种方式我按推荐度排序RufusWindows我个人最推荐。打开后会自动识别设备和镜像分区类型选 GPT目标系统选 UEFI其他默认就行。它速度快、成功率也高。balenaEtcher跨平台界面非常简洁Windows、macOS、Linux 都有选镜像、选U盘、点 Flash 三步搞定。缺点是偶尔会碰到写入完成后U盘没法被主板识别的情况我就遇到过两次。dd 命令Linux / macOS如果你手边只有命令行可以直接用 dd。先确认U盘设备名比如/dev/sdb然后执行sudo dd ifubuntu-24.04-desktop-amd64.iso of/dev/sdb bs4M statusprogress convfsync这里特别提醒of后面一定要写U盘设备名而不是分区名比如/dev/sdb1写错了轻则白忙一场重则把整个磁盘覆盖掉那时真就是数据无价了。启动盘做完以后不要急着拔如果你方便再把U盘插到目标机器上试一下能否进安装界面。U盘无法引导的原因通常有三个BIOS 引导顺序没把U盘排到第一位、启动盘制作方式不对、U盘插在了前面板的USB口但主板识别异常。实在不行就换个USB口这事我也见过不少。2. 系统安装流程中的关键决定分区和选项一个都别乱选镜像启动起来后安装界面反而没什么难度真正影响后续使用的是分区方案和安装时的几个勾选项。2.1 分区方案怎么排才不后悔如果你打算整个磁盘都装 Ubuntu安装时选择清除整个磁盘并安装 Ubuntu也可以但我不建议你这么做。原因很简单默认分区分太粗后面想扩容或者单独处理 /home 会很麻烦。手动分区的推荐方案UEFI GPT挂载点/用途建议大小说明EFI 系统分区512MB ~ 1GB如果机器上已有其他系统的 EFI 分区比如 Windows可以共用不必新建swap建议 8GB 或按内存大小现在 16GB 内存的机器较多swap 可以设 8GB 用于休眠和内存溢出兜底/建议 60GB 起步系统和软件都装这里想编译大型项目或装多个开发环境建议 100GB/home剩余全部你的文档、下载、配置都在这里独立分区后重装系统不丢数据/boot可选1GB有些发行版引导经常出问题的独立出来好排查Ubuntu 不是必需双系统用户在分区时要格外小心。EFI 分区一定不要格式化成 ext4否则会把 Windows 引导干掉。你用安装器自带的手动分区识别出那个小体积的 FAT32 分区就是 EFI 分区挂载点选efi或boot/efi不要动它的文件系统格式直接沿用 FAT32。2.2 安装时的几个勾选项如何取舍Ubuntu 安装器在更新和其他软件这一步通常会让你勾选安装时下载更新和为图形或无线硬件安装第三方软件。我个人的习惯是不勾安装时下载更新。因为安装过程联网更新会拉长安装时间而且如果刚好遇上网络波动可能拖累整个安装过程。系统装好后后面我们再手动完整升级体验更可控。安装第三方软件这一项我会勾上。它会把一些闭源驱动装进来包括显卡驱动、无线网卡固件这类。但注意这里装的 NVIDIA 驱动版本相对保守很多时候只是让你能进入图形界面性能并不理想。所以即便勾了这项后面我们还是需要手动装一遍完整驱动。不想勾也没问题不影响后面操作。2.3 第一次进系统后的更新与换源操作系统安装完重启进入桌面后的第一件事不是急着装软件而是把软件源换成国内镜像站。默认源在国外的下载速度比较慢换成国内源后后面所有安装操作都会顺畅得多。可以用图形界面操作打开软件和更新Software Updates在下载自下拉菜单里选其他站点然后从列表里挑一个国内的镜像地址。或者直接改配置文件Ubuntu 24.04 之后的源配置在/etc/apt/sources.list.d/ubuntu.sources我用的是清华源替换文件内容后执行更新sudo sed -i s#//archive.ubuntu.com#//mirrors.tuna.tsinghua.edu.cn#g /etc/apt/sources.list.d/ubuntu.sources sudo apt update sudo apt upgrade -y如果是 22.04 及更早版本源文件路径是/etc/apt/sources.list操作思路一样把archive.ubuntu.com和security.ubuntu.com换成镜像站地址即可。换源和系统升级做完后最好重启一次让系统干干净净进入下一步。另外我可以提前说一句后面装 NVIDIA 驱动前千万别再单独升级内核。我遇到过一个用户驱动装好了一重启又挂结果发现是他先升级了内核新内核和显卡驱动没有重新编译匹配才导致模块加载失败。3. 重头戏NVIDIA驱动安装的三条路线Ubuntu 下装 NVIDIA 驱动网上方法五花八门但核心路线就三条。很多人失败不是因为操作难而是混用了多种方法导致系统状态混乱。我建议你先想清楚自己走哪条别半路换道。3.1 路线一附加驱动里直接选这是最省事的方式适合不想碰命令行的用户。打开软件和更新切到附加驱动Additional Drivers标签页系统会扫描可用的驱动并给出当前推荐项。列表里通常会有一个带有 recommended 标记的专有驱动比如nvidia-driver-550选中、应用、重启就完成了。这个方式的缺点是版本可选项有限而且不一定是最新版。如果你只是日常办公、偶尔看看视频这条路完全够用如果你想跑深度学习、做视频编解码开发需要精确控制 CUDA 和驱动版本那它就不够灵活了。3.2 路线二ubuntu-drivers命令行自动安装这个方式我更常用因为它兼顾了自动化、稳定性和可控性。先看一下当前有哪些可用驱动ubuntu-drivers devices输出里会显示你的 NVIDIA 显卡型号、列出一串驱动包并给出推荐版本。比如推荐的是nvidia-driver-550你就可以直接装sudo apt install nvidia-driver-550如果你想省掉看版本这一环Ubuntu 也提供了一个一键安装推荐驱动的命令sudo ubuntu-drivers autoinstall我会更推荐你手动指定版本号而不是autoinstall。因为在一些机器上自动安装会把推荐驱动和 open-kernel 驱动都装进去反而引入不必要的混乱。手动指定版本你自己清楚装的是什么后面排查问题也有方向。这个方式装完重启后一般nvidia-smi就能正常输出了。它默认会帮你配置好nvidia-persistenced、nvidia-modprobe这些外围组件省了不少事。3.3 路线三官网runfile手动安装适合需要精确控制版本的人官网 runfile 方式是最灵活的也是很多从别处抄来命令然后装挂的重灾区。它的核心优势是你完全掌控装什么版本、装哪些组件特别是做 AI 训练或者需要跟特定 CUDA 版本对齐时这个方式几乎是必须的。但在动手之前我要说清楚这个方式对新手并不友好你要是没有特殊需求走 3.2 就够了。下面详细讲 3.3 的标准操作。第一步把编译环境补齐。很多人的 runfile 安装失败根本原因不是驱动有问题而是系统里缺了编译必需的包sudo apt install gcc make linux-headers-$(uname -r)第二步禁用系统默认的nouveau开源驱动。nouveau 和 NVIDIA 闭源驱动会抢占同一个硬件资源不屏蔽掉驱动加载时大概率冲突。创建黑名单文件sudo nano /etc/modprobe.d/blacklist-nouveau.conf写入以下两行blacklist nouveau options nouveau modeset0然后更新内核引导配置并重启sudo update-initramfs -u sudo reboot第三步从 NVIDIA 官网下载对应型号的驱动 runfile。下载前建议用以下命令确认显卡型号lspci | grep -i nvidia或者用nvidia-smi如果当前系统还能识别到的话。驱动下载页会有一个匹配显卡型号的搜索框选好系列和操作系统版本下载得到类似NVIDIA-Linux-x86_64-550.xx.run的文件。第四步因为 runfile 安装必须在图形界面不占用显卡资源的情况下进行所以需要先切换到文本模式。按Ctrl Alt F3进入 tty 终端登录后执行sudo systemctl isolate multi-user.target这会停掉图形管理服务gdm 或 lightdm回到纯文本命令行状态。在这个状态下把驱动文件执行权限加上然后运行安装chmod x NVIDIA-Linux-x86_64-550.xx.run sudo ./NVIDIA-Linux-x86_64-550.xx.run安装过程中有几步需要选择我给你的建议是如果提示需要注册 DKMS选 Yes。这样以后内核更新时驱动模块能自动重建不用每次手动重装。如果问你Would you like to run the nvidia-xconfig utility?看你用不用 X11 桌面。Ubuntu 默认 Wayland 桌面的话选 No 也没关系后面用nvidia-smi验证即可如果你需要 X11 下的完整配置选 Yes。装完之后重启sudo reboot重启回来运行nvidia-smi看到显存、驱动版本和 CUDA 版本信息就说明这一步走通了。如果没走通别急着重复装去第 4 章按排查链路找原因。3.4 三条路线的对比与选择建议路线操作难度版本控制内核升级后的稳定性适用人群附加驱动 GUI最低受限一般只做日常使用的用户ubuntu-drivers 命令低相对可控好大多数用户兼顾省心和稳定官网 runfile较高完全可控取决于是否注册 DKMS需要特定 CUDA/驱动版本、做开发或研究的人如果你只是一个刚接触 Ubuntu 的新手优先走 3.2如果你装驱动是想跑深度学习框架或者要配合特定版本的 CUDA 编译各种库直接走 3.3并且把每一步记录下来。最怕的就是心里没谱一会儿apt install nvidia-driver-xxx一会儿又跑到官网下 runfile 双击两者残留配置互相覆盖最后谁也起不来。选定一条路走到底这是我在无数次折腾里最深的体会。4. 那些卡住无数人的报错我帮你把排查链路捋一遍这一章全是实打实的报错场景。我并不打算让你背答案而是教你怎么顺着证据一步步缩小范围。排查思路比命令本身值钱。4.1 nvidia-smi has failed because it couldnt communicate的完整排查这是驱动问题中最常见的报错字面意思是nvidia-smi这个工具无法和 NVIDIA 内核驱动通信。注意这个报错不代表驱动完全没装而是说驱动模块没有成功加载或者加载了但被系统踢掉了。排查链路我按顺序来# 先看模块是否加载 lsmod | grep nvidia如果没有任何输出说明内核模块根本没加载。再查系统日志看内核为什么拒绝加载journalctl -b -g nvidia dmesg | grep -i nvidia常见的日志里会出现以下几种情况提示module verification failed或signature多半是 Secure Boot 的问题回到 BIOS 把 Secure Boot 关掉再试。提示No such device或not found驱动版本和显卡型号不匹配或者模块和当前内核版本不匹配。用uname -r确认内核版本再看驱动包的依赖是否一致。日志里完全没有任何 nvidia 相关记录说明模块根本没被加载手动加载一次试试sudo modprobe nvidia如果modprobe正常返回再跑nvidia-smi有输出就说明系统启动时没有自动加载模块这时候可以检查/etc/modules或者 systemd 模块加载配置。我自己遇到过一种很容易被忽略的情况nvidia-smi报这个错是因为机器上有两个不同版本的 NVIDIA 驱动都装了部分文件一个来自 apt一个来自 runfile两个互相覆盖。排查方法是dpkg -l | grep -i nvidia如果列出来一大堆不同版本的驱动包那就先冷静清理掉再重新走一条路线。不要试图在乱局上打补丁那只会更乱。4.2 Secure Boot仍在开启导致模块加载失败有些用户不想关 Secure Boot装驱动时选择注册 MOK注册完重启还要走一套 Enroll 流程如果操作不对进系统后照样报模块加载失败。这台机器的签名验证机制会拦截未被许可的内核模块NVIDIA 闭源驱动没有预装签名就算你把它装上它也无法通过校验。最省心的方案还是那句话装驱动前先把 Secure Boot 关掉。如果你因为某些原因必须保留 Secure Boot比如 Windows 和 Ubuntu 双系统之间有 BitLocker 依赖那就要走 MOK 注册流程在 runfile 安装时选择生成密钥并注册。很多人在这一步装完 runfile 却没有注册 MOK结果重启后驱动完全不工作回看日志就是签名校验不通过。4.3 编译环境缺失导致的runfile安装失败走官网 runfile 方式时一个高频报错是ERROR: Unable to load the kernel module nvidia.ko ERROR: The kernel header file /lib/modules/.../build/include/generated/uapi/linux/version.h does not exist这个报错的根因基本就是linux-headers没装或者内核源码目录不完整。你不需要真的去下载完整内核源码只需要安装跟当前内核版本匹配的 headerssudo apt install linux-headers-$(uname -r)装完再执行 runfile 安装前确认一下/lib/modules/$(uname -r)/build这个软链存在且指向正确的目录。这个目录存在gcc 和 make 才能找到编译内核模块所需的头文件。我见过很多人忽略这一点直接sudo ./NVIDIA-Linux-*.run然后卡在编译环节反复报错。还有一个小细节有些 runfile 安装到后面会问你Would you like to run nvidia-xconfig?如果你选 No但之后又发现 X11 下分辨率不对、驱动没接管显卡那你需要在重启后手动执行一次sudo nvidia-xconfig这会重新生成 X 配置文件。不要重复跑 runfile 安装来试图修复这个问题直接运行nvidia-xconfig就行。4.4 内核升级后驱动失效的复现与对策这个场景太经典了驱动装好运行了几天一切正常某天系统提示内核升级你顺手点了更新重启后桌面黑屏、进入不了图形界面或者nvidia-smi又报模块不存在。原因很简单内核升级后原来为旧内核编译的 NVIDIA 驱动模块不能在新内核上使用必须重新编译。如果你装驱动时注册了 DKMS这个重建过程是自动的系统会在新内核首次启动时自动调用 DKMS 重新编译模块。如果你没注册 DKMS那驱动就直接失效了。遇到这种情况排查和修复分两步dkms status如果输出显示模块的状态不是installed而是没有记录或者多个内核版本状态异常就手动重新安装一次驱动即可。比如用 apt 方式装的话重新执行sudo apt install --reinstall nvidia-driver-550用 runfile 方式的话重新运行一遍 runfile安装时记得选 Yes 注册 DKMS。那我为什么反复强调注册 DKMS就是因为这个决定直接决定了你以后每次内核升级后的体验注册了升级完自动生效不注册升级一次崩一次。5. 驱动装完不等于结束验证和维护才是重点很多人在驱动安装成功后松了一口气直接用电脑了结果过了几天突然发现性能不对或者某个功能用不了。下面这几个验证和维护手段建议每个人都做一遍。5.1 三条验证命令确认驱动真的在工作第一条看整体信息nvidia-smi如果能看到 GPU 型号、显存使用率、驱动版本和 CUDA 版本说明驱动核心功能正常。这里面有一列的 CUDA Version 是指当前驱动支持的最高 CUDA 版本不代表你已经装好了 CUDA 工具包这是很多新手的一个误解。第二条看显卡设置工具能否正常打开nvidia-settings这个命令能打开 NVIDIA 控制面板里面可以调节分辨率、查看 GPU 温度、风扇转速等。如果它报错打不开大概率是 X11 配置没接管好执行sudo nvidia-xconfig重新生成配置。第三条看系统实际使用的渲染设备sudo apt install mesa-utils glxinfo | grep renderer如果输出是 NVIDIA 相关型号说明 OpenGL 渲染已经走 NVIDIA 而不是软件渲染。这一条对想要跑 3D 应用、游戏和图形渲染的人特别重要。5.2 dkms让驱动在内核升级后不失效前面已经提到过 DKMS这里说下日常检查方式dkms status正常状态的输出类似nvidia/550.xx, 6.8.0-xx-generic, x86_64: installed如果你看到dkms里没有 nvidia说明当时驱动没注册进 DKMS以后内核升级大概率会出问题。解决办法也很简单重新安装一次驱动安装时选择开启 DKMS如果是 apt 方式装的驱动重新安装驱动包时系统会自动帮你配置好 DKMS。5.3 笔记本双显卡切换的日常使用配置如果你是笔记本大概率是 Intel/AMD 核显加 NVIDIA 独显的组合。Ubuntu 装上 NVIDIA 驱动后系统会默认利用 PRIME 方案来管理双显卡。查询当前使用状态prime-select query输出可能是nvidia、intel或on-demand。如果你追求续航日常办公切到核显模式sudo prime-select intel如果你要跑训练、渲染或者玩游戏切到独显sudo prime-select nvidia切换完成后需要注销或重启才生效。这里的小建议是笔记本用户日常用 on-demand 模式更灵活让系统在需要的时候才调用独显。但要注意on-demand 模式下跑 CUDA 时有些程序默认拿不到 GPU需要显式指定 CUDA_VISIBLE_DEVICES 或用__NV_PRIME_RENDER_OFFLOAD1环境变量。5.4 关于NVIDIA版ffmpeg和CUDA环境我留个预告驱动装好后NVIDIA 的 NVENC/NVDEC 硬件编解码能力就绪了后面我会单独写一篇怎么基于这套环境编译带 NVIDIA 硬件加速的 ffmpeg以及怎么配置 CUDA 工具链。对做视频处理、流媒体、AI 推理的人来说这是非常值得折腾的一步。另外这个系列也会包含中文输入法、开发环境配置等实际使用层面的内容有需要的可以留意后续更新。最后分享一点我个人的体会装驱动最忌讳的就是同时参考多篇教程一会儿这个命令一会儿那个命令最后系统状态一团糟。建议万事之前先用dpkg -l | grep nvidia和dkms status看清现状再决定下一步。驱动器这种东西讲究的是一个干净和匹配机器状态干净了很多问题会自己消失。
返回列表