拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

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

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

如果你正打算在一台新机器或双系统环境里装 Ubuntu,或者在虚拟机里折腾过几次后想转到实体机跑通全流程,这篇内容值得完整看一遍。这个系列第一篇,我从镜像下载、启动盘制作、系统安装、分区方案,一路讲到 NVIDIA 驱动安装的三种方式和各种高频报错排查,把整条链路串起来讲。之所以这么安排,是因为我见过太多人卡在最后一步:系统装好了,桌面进来了,然后 NVIDIA 驱动一装就黑屏、循环登录、nvidia-smi报错,最后心态崩掉。你会发现,大部分问题的根源其实在安装前和安装中就已经埋下了。

1. 装系统前先解决"镜像、U盘、BIOS"三个基础问题

很多人一上手就急着下载镜像、写U盘,结果系统都进不了安装界面,或者在驱动阶段踩大坑。花十分钟把下面三件事确认好,后面能省几个小时。

1.1 机器是UEFI还是Legacy,Secure 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 SHA256

1.3 制作启动U盘的三种方法,我推荐哪种

镜像下载好之后,需要一个至少 8GB 的U盘来制作启动盘。注意:制作启动盘会把U盘里的所有数据清空,操作前确认U盘里没有要紧东西。

三种方式,我按推荐度排序:

  1. Rufus(Windows):我个人最推荐。打开后会自动识别设备和镜像,分区类型选 GPT,目标系统选 UEFI,其他默认就行。它速度快、成功率也高。
  2. balenaEtcher(跨平台):界面非常简洁,Windows、macOS、Linux 都有,选镜像、选U盘、点 Flash 三步搞定。缺点是偶尔会碰到写入完成后U盘没法被主板识别的情况,我就遇到过两次。
  3. dd 命令(Linux / macOS):如果你手边只有命令行,可以直接用 dd。先确认U盘设备名,比如/dev/sdb,然后执行:
sudo dd if=ubuntu-24.04-desktop-amd64.iso of=/dev/sdb bs=4M status=progress conv=fsync

这里特别提醒: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 modeset=0

然后更新内核引导配置并重启:

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 couldn't 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没装,或者内核源码目录不完整。你不需要真的去下载完整内核源码,只需要安装跟当前内核版本匹配的 headers:

sudo 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_OFFLOAD=1环境变量。

5.4 关于NVIDIA版ffmpeg和CUDA环境,我留个预告

驱动装好后,NVIDIA 的 NVENC/NVDEC 硬件编解码能力就绪了,后面我会单独写一篇怎么基于这套环境编译带 NVIDIA 硬件加速的 ffmpeg,以及怎么配置 CUDA 工具链。对做视频处理、流媒体、AI 推理的人来说,这是非常值得折腾的一步。另外这个系列也会包含中文输入法、开发环境配置等实际使用层面的内容,有需要的可以留意后续更新。

最后,分享一点我个人的体会:装驱动最忌讳的就是同时参考多篇教程,一会儿这个命令一会儿那个命令,最后系统状态一团糟。建议万事之前先用dpkg -l | grep nvidia和dkms status看清现状,再决定下一步。驱动器这种东西,讲究的是一个干净和匹配,机器状态干净了,很多问题会自己消失。

返回列表