尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Ubuntu20.04/Win10双系统Secure Boot与Nvidia避坑

Ubuntu20.04/Win10双系统Secure Boot与Nvidia避坑 1. 装双系统前那些没人替你拍板的决定Ubuntu 20.04 和 Win10 双系统这件事说难不难说简单也真不简单。我从第一次把笔记本的分区表搞乱、到后来能一边刷着文档一边十几分钟装完一套干净的双系统中间踩的坑基本能写一本小册子。这篇记录主要面向两类人一类是手上只有一台电脑、既想保留 Win10 办公又想在 Ubuntu 20.04 上跑深度学习或者做开发的另一类是已经装过一次、结果卡在 Secure Boot 或者 Nvidia 驱动上系统能进但桌面黑屏、nvidia-smi报错的。核心关键词就几个Ubuntu 20.04、Win10、双系统、Secure Boot、Nvidia。我不会只给你一串命令而是把每个动作背后的原因讲清楚这样你下次遇到类似问题能自己判断而不是全网乱搜。双系统最容易出事的三个阶段其实很集中装之前的分区规划、安装时的引导器落点、装完之后的显卡驱动。很多人把注意力全放在“怎么刻盘、怎么点下一步”结果真正决定成败的 BIOS 设置和分区细节反而被忽略。我见过太多案例Ubuntu 装完了进系统发现 Win10 启动项消失了或者 Secure Boot 开着第三方驱动根本加载不了再或者 Nvidia 驱动一装重启直接卡在登录界面转圈。这些问题的根子八成在前面就埋下了所以第一部分我想先把那些“看似可选项、实际必答题”的东西讲透。1.1 为什么是 Ubuntu 20.04 而不是更新版本先说版本选择。Ubuntu 20.04 是 LTS 长期支持版本官方维护到 2025 年生态适配非常成熟。虽然现在 22.04、24.04 也很流行但如果你要跑的是一套已经固定下来的深度学习环境比如特定版本的 CUDA、特定版本的 PyTorch那么 20.04 反而是最省心的因为绝大多数教程、驱动包、依赖脚本都是围绕它写的。我自己有一台机器到现在还留着 20.04就是因为某个推理框架只在 CUDA 11.x 上验证过升级系统反而要重配一遍。这里有个判断逻辑系统版本要跟着你的软件栈走而不是跟着“最新”走。如果你只是日常办公、写代码、上网那 22.04 也完全可以但如果你要复现某个论文的代码或者公司项目锁定了 20.04那就别折腾老老实实用 20.04。下载镜像的时候记得去官方渠道别用来路不明的第三方修改版校验一下 SHA256避免安装过程中出现莫名其妙的文件损坏报错。1.2 分区怎么切才不留遗憾分区是双系统的地基。我建议在 Win10 里先用自带的“磁盘管理”压缩出一块未分配空间不要在安装 Ubuntu 的时候才临时去缩 Windows 分区那样一旦出错Windows 那边可能直接进不去。压缩多少合适看你用途纯开发、不存大文件给 80 到 100 GB 够用要跑数据集、装一堆 CUDA 相关的东西建议 200 GB 起步。务必留出未分配空间不要提前格式化成 NTFSUbuntu 安装器认不出来。具体分区方案我一般这样切以 200 GB 为例EFI 分区沿用 Windows 已有的那个就行千万别新建第二个 EFI这是导致引导混乱的头号原因根分区/给 60 GB用 ext4家目录/home给剩下的大部分方便以后重装系统保留数据交换分区 swap 看内存16 GB 内存以上其实可以只给 8 GB 或者干脆用 swapfile。这套方案的好处是重装 Ubuntu 时只动/分区/home里的配置和文件都能保住省下大量重新配置的时间。提示Windows 的 EFI 分区一般只有 100 MB装完 Ubuntu 后可能不够用。如果你发现安装器提示 EFI 空间不足可以在 Windows 下用分区工具把 EFI 扩到 300 到 500 MB但操作前一定要备份分区表这一步风险不低。1.3 备份与磁盘模式这些前置动作备份这件事听起来像废话但我还是要说因为它真的救过我。装双系统前把你 Win10 里的重要文件拷到移动硬盘或者云盘别嫌麻烦。分区操作一旦手滑数据恢复的成本远高于备份十分钟。另外有条件的话用系统自带的备份功能做一次系统镜像出问题能整体还原。磁盘模式这块进 BIOS 确认 SATA 模式是 AHCI 还是 RAID。很多新笔记本出厂默认 RAID这种模式下 Ubuntu 安装器可能识别不到硬盘。如果原本就是 RAID 且 Windows 也是这么装的直接改 AHCI 会导致 Windows 蓝屏进不去。正确的做法是先在 Windows 里用安全模式切换到 AHCI 再重启或者干脆保持 RAID 但安装前加载相应驱动。这一步不搞清楚后面安装器“找不到磁盘”的报错会让你怀疑人生。2. 启动盘、BIOS 与 Secure Boot 的正确打开方式这一部分是我认为最值得花时间的地方因为 Secure Boot安全启动和 BIOS 设置直接决定了后面显卡驱动能不能加载、系统能不能顺利引导。很多人装完 Ubuntu 发现 Nvidia 驱动死活装不上报一堆模块加载失败最后查半天问题就出在 Secure Boot 没处理对。所以别急着插U盘点下一步先把 BIOS 这一屏设置理顺。2.1 镜像校验与启动盘制作下载完 Ubuntu 20.04 的 ISO 后先做校验。Windows 下可以用 PowerShell 跑Get-FileHash对比官网给的 SHA256Mac 或者 Linux 用sha256sum。这一步花不了两分钟但能排除掉因为下载中断导致的镜像损坏避免你装到一半出现“文件读取错误”。启动盘工具我用得最多的是 Rufus写盘时分区类型选 GPT目标系统选 UEFI文件系统 FAT32。如果你的机器是纯 UEFI 引导现在基本都是这个配置最稳。写完盘后别急着拔先确认盘里有没有EFI目录这是 UEFI 能识别启动的前提。有些老工具会做成 MBR 启动盘插上去 BIOS 里根本看不到 U盘那就是格式选错了。我第一次装的时候就吃过这个亏以为是U盘坏了其实是写盘模式不对。2.2 Secure Boot 到底关不关这是全文的核心争议点。Secure Boot 是主板固件的一层校验机制它会拒绝加载没有签名或者签名不被信任的引导程序和驱动。Ubuntu 官方是支持 Secure Boot 的它的内核和引导器都有签名所以你开着 Secure Boot 也能装、也能进系统。但问题出在第三方驱动上尤其是 Nvidia 的显卡驱动。如果你用官方仓库装的驱动配合 Secure Boot 会走 MOKMachine Owner Key注册流程装驱动时会让你设一个密码重启后进蓝屏界面手动注册密钥如果你用 Nvidia 官网下载的.run包手动安装Secure Boot 开着基本装不上会直接报签名相关的错误。我的建议分两种情况如果你只用官方仓库的驱动、不折腾第三方内核模块Secure Boot 可以保持开启安全性更好如果你要手动编译内核模块、装特定版本的 CUDA 驱动那干脆在 BIOS 里把 Secure Boot 关掉省去 MOK 注册那套流程。关掉之后有个注意点某些 Windows 游戏的反作弊系统会检测 Secure Boot 状态如果你也在这台机器上玩这类游戏需要在装完驱动后把 Secure Boot 再打开或者权衡一下这台机器到底以哪个系统为主。注意关闭 Secure Boot 不会影响 Windows 正常使用它只是降低了固件层的一层防护。真正要注意的是那些对 Secure Boot 有硬性要求的场景装之前先确认清楚。2.3 快速启动、BitLocker 与 SATA 模式Fast Boot快速启动建议关掉它会让主板跳过一些设备初始化导致安装U盘有时候识别不到。BIOS 里的快速启动和 Win10 系统设置里的“快速启动”是两个东西后者也要关因为 Windows 的快速启动本质是一种混合休眠它锁住的分区会让 Ubuntu 无法安全挂载严重的会导致 NTFS 分区损坏。BitLocker 这块如果你的 Win10 开了设备加密或者 BitLocker装双系统前一定要先暂停或者解密。因为改引导、动分区会触发恢复密钥验证一旦你手边没有那串 48 位恢复密钥Windows 那边就可能被锁住数据取不出来。暂停 BitLocker 很简单在控制面板里点一下“暂停保护”就行装完双系统确认稳定了再决定要不要重新开启。SATA 模式前面提过这里再强调一次BIOS 里看到的模式和 Windows 实际使用的模式必须一致。如果你打算从 RAID 改成 AHCI务必先在 Windows 里用msconfig引导到安全模式、在设备管理器里改驱动再进 BIOS 切换否则 Windows 直接蓝屏。这个顺序不能反。3. 安装过程中的分区与引导陷阱到这一步U盘插好、BIOS 设置调完剩下的就是安装器里的操作。很多人觉得安装器是傻瓜式的一路下一步就行恰恰是这种心态最容易出事。安装器里有几个选项一旦点错轻则 Windows 启动项丢失重则整块盘被格式化。这一章我把关键决策点拆开讲。3.1 安装类型别手滑选“清除整个磁盘”Ubuntu 安装器会问你怎么装通常有几个选项“与 Windows 共存”“清除整个磁盘并安装”“其他选项”。如果你前面已经压缩出了未分配空间选“其他选项”手动分区最稳。“与 Windows 共存”理论上会自动处理但它对 EFI 分区的判断有时候不靠谱特别是在你已经有多块盘的情况下容易装错盘。“清除整个磁盘”这个选项除非你确定这台机器不要任何已有数据否则碰都别碰。我有个朋友就是图省事点了这个结果整块硬盘的数据全没了事后只能去数据恢复。这不是危言耸听安装器不会反复跟你确认点下去就执行。3.2 手动分区实操EFI 千万别格式化进入手动分区后你会看到一堆已有的分区包括 Windows 的保留分区、C 盘、以及那个 EFI 分区。关键操作来了把 EFI 分区挂载到/boot/efi但绝对不要勾选“格式化”。一旦格式化Windows 的引导文件就被清空了之后你得进修复模式重建麻烦得很。EFI 分区是用来放引导程序的Windows 和 Ubuntu 的引导文件可以共存只要不是重新格式化就行。新建分区时/和/home用 ext4 格式swap 分区类型选“交换空间”。如果你不想单独分/home直接给/挂个大分区也行只是重装系统时数据要手动搬。挂载点别选错我见过有人把/和/home挂反的虽然能用但后续管理会很别扭。提示如果你用的机器是 NVMe 固态分区的时候确认一下设备名通常是/dev/nvme0n1别和U盘/dev/sda搞混。安装器界面会显示每个设备的容量认准容量再操作。3.3 引导器安装位置的选择引导器GRUB装在哪里这个问题很关键。在 UEFI 模式下GRUB 会装到 EFI 分区里安装器下面会有一个“引导器安装位置”的下拉框选那个 EFI 分区对应的设备比如/dev/nvme0n1。不要选成某个单独的分区也不要选U盘。装对了的话重启后会出现 GRUB 菜单里面既有 Ubuntu 也有 Windows Boot Manager。如果装完重启直接进了 Windows没有 GRUB 菜单大概率是引导顺序问题进 BIOS 把 Ubuntu 调到第一位就行如果 BIOS 里根本没有 Ubuntu 这一项那说明引导器没写进 EFI 分区需要进 Live 环境用boot-repair或者手动重建 GRUB。这个排查思路我在第五章还会细讲。4. Nvidia 显卡驱动双系统里最容易翻车的一环装完系统、能进桌面之后真正的考验才刚开始。Nvidia 驱动这一关几乎是每个双系统玩家的必经之路。我自己遇到过三种典型故障一种是装完驱动重启黑屏只剩鼠标指针一种是能进系统但nvidia-smi报错说“failed to communicate with the nvidia driver”还有一种是用.run包装完后和系统自带的驱动冲突互相覆盖。这一章把驱动安装的完整逻辑讲清楚。4.1 装驱动之前必须先做的事第一件事确认你的显卡型号和支持的驱动版本。用lspci | grep -i vga看显卡然后去 Nvidia 官网查对应的驱动分支。别一股脑装最新版某些老卡在新驱动上反而有问题。第二件事处理 nouveau。nouveau 是 Linux 自带的开源 Nvidia 驱动它和官方驱动冲突装官方驱动前要先禁用它。官方仓库安装方式会自动处理这一步但如果你用.run包就得手动在/etc/modprobe.d/下加黑名单文件把 nouveau 拉黑然后更新 initramfs 并重启。不做这一步.run安装程序会直接拒绝安装提示你 nouveau 正在使用。第三件事确认 Secure Boot 状态和前面说的一致。如果你用.run包Secure Boot 必须关如果开着走官方仓库的 MOK 流程也行但要准备好设密码和重启注册。4.2 三种安装方式的取舍Nvidia 驱动在 Ubuntu 上主要有三条路系统设置里的“附加驱动”、apt的 PPA 源、Nvidia 官网的.run包。这三者各有适用场景我做个对比方便你按需选。安装方式优点缺点适用场景附加驱动图形界面最简单自动处理依赖和 nouveau可选版本少偶尔列不出推荐驱动新手、只要显卡能用apt PPA 源版本全命令可复现好卸载需要联网源偶尔抽风开发者、需要特定版本官网.run包版本最全可精确控制和系统包冲突升级内核后要重装需要特定 CUDA 组合、离线环境我的常规选择是 apt PPA 源命令干净、可复现、卸载方便。装之前先ubuntu-drivers devices看一下系统推荐哪个版本再决定装哪个。GPU 计算场景下我会先确定 CUDA 版本反过来推驱动版本因为 CUDA 对驱动版本有最低要求装反了nvidia-smi和nvcc的版本对不上跑代码会各种报错。4.3nvidia-smi报错逐层排查“NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver”这个报错几乎人人见过它的意思是用户态工具连不上内核态的驱动模块。排查要一层层来别一上来就重装。先看驱动模块有没有加载lsmod | grep nvidia如果什么都没有说明模块没加载。再看内核日志dmesg | grep -i nvidia常见的有两种情况一种是 nouveau 没禁干净和 nvidia 模块抢设备另一种是内核升级了但驱动没跟着重编模块版本不匹配。前者回去把 nouveau 黑名单做干净后者重新装一遍驱动或者用 DKMS 自动重编。还有一种隐蔽情况Secure Boot 开着但驱动模块没签名内核直接拒绝加载。这时dmesg里会有关于 module verification failed 的提示。解决办法要么关 Secure Boot要么做 MOK 注册。我一般建议装驱动的机器直接关掉省心。注意卸载驱动时如果用的是.run包要用自带的卸载参数如果用的 apt用apt purge把相关包清干净别两种方式混着用残留文件会导致后续安装各种诡异问题。4.4 CUDA 与 ffmpeg 硬件加速的版本匹配如果你装驱动是为了深度学习或者视频处理那还得考虑 CUDA 和 ffmpeg。CUDA 版本要和驱动版本匹配驱动版本太低新版 CUDA 跑不起来太高某些老框架又不认。经验做法是先确定你要用的框架需要哪个 CUDA再查这个 CUDA 要求的最低驱动版本然后装驱动。ffmpeg 这块如果要启用 Nvidia 硬件编解码编译的时候得带上--enable-nonfree --enable-cuda-nvcc --enable-libnvidia-encode这些参数运行时的 ffmpeg 版本、驱动版本、CUDA 版本三者要对齐。我试过用系统源里的 ffmpeg很多时候不带硬件加速支持最后还是自己编译了一份。编译前先确认nvcc --version和nvidia-smi显示的驱动版本两者错位的话编出来的 ffmpeg 一调用硬件加速就崩。5. 装完之后那些反复出现的小毛病系统装好了、驱动也跑通了别以为就万事大吉日常使用里还有几个高频小问题会反复找上门。这一章把经验和排查办法整理出来遇到问题直接对着查。5.1 GRUB 菜单与默认启动项设置GRUB 菜单默认只显示几秒手慢就自动进了默认系统。想改等待时间和默认项编辑/etc/default/grub把GRUB_TIMEOUT改大一点比如 10 秒GRUB_DEFAULT可以设成某个系统的序号或者“上次启动的系统”。改完记得跑sudo update-grub才生效。如果 GRUB 菜单里 Windows 项消失了常见原因是 Windows 更新后重写了引导。解决办法是进 Ubuntu 跑sudo os-prober看能不能探到 Windows能探到就update-grub加回来探不到的话检查/etc/default/grub里GRUB_DISABLE_OS_PROBER是不是设成了 true改成 false 再更新。反过来如果 Ubuntu 引导坏了只能进 Windows那就用 Ubuntu 的 Live U盘进去用修复工具重建思路和第一章讲的引导器安装是一致的。5.2 时间不一致Win10 和 Ubuntu 差 8 小时这个问题的根源是 Windows 把主板时间当本地时间Linux 默认当 UTC两边差一个时区。解决办法有两种要么让 Windows 认 UTC改注册表要么让 Linux 认本地时间跑一条命令把硬件时钟设成 local。我一般选后者一条命令搞定不用碰 Windows 注册表。改完之后重启两边时间就一致了。这个小问题不影响系统但每次切换系统都看到时间乱掉确实烦人。5.3 常见问题速查表把前面和日常遇到的问题整理成表方便你快速定位现象可能原因排查方向装完重启直接进 Win10无 GRUB引导顺序或 GRUB 未写入进 BIOS 调顺序或用 Live 环境重建引导装驱动后重启黑屏nouveau 未禁干净或驱动与内核不匹配进 Recovery 模式卸载驱动重查 dmesgnvidia-smi连不上驱动模块未加载、Secure Boot 拦截lsmod、dmesg逐层看必要时关 Secure BootUbuntu 时间少 8 小时硬件时钟时区不一致把系统时钟设为本地时间Windows 启动项消失Windows 更新重写引导os-prober加update-grub安装器找不到硬盘SATA 模式为 RAID切 AHCI 或加载驱动5.4 卸载 Ubuntu 恢复单系统如果你哪天决定不用双系统了卸载顺序不能乱。先在 Windows 里用分区工具删除 Ubuntu 那几个分区然后修复 Windows 引导让它重新接管启动。最稳妥的方式是用 Windows 安装U盘进修复模式跑引导修复命令重建 Windows 的 EFI 条目再进 BIOS 把 Windows Boot Manager 调到第一位。直接删分区不修引导容易出现开机黑屏找不到系统的情况。删完分区后那块未分配空间可以在 Windows 磁盘管理里合并回 C 盘或者新建分区。最后分享一个我个人用了很多次的小经验在系统稳定、驱动跑通之后用磁盘工具对 Ubuntu 分区做一次镜像备份。下次系统被折腾坏了直接还原镜像比一步步重装快得多也省去了重配驱动的麻烦。我现在的流程就是装好后先稳定用两天确认没问题再备份这样后面怎么折腾心里都有底。
返回列表