1. 装双系统前的准备工作:想清楚再动手
1.1 为什么选双系统而不是虚拟机
在动手之前,先想清楚一个问题:你为什么要装双系统?很多人一上来就问我"用虚拟机不就行了吗,何必折腾双系统",这个问题我每年都要回答几十遍。
虚拟机的优势是方便、隔离、快照随便打,系统坏了删掉重来,成本几乎为零。但它的短板也很明显:GPU 性能损耗大,如果你要做深度学习训练、跑 ORB-SLAM3 这类实时视觉SLAM,或者玩需要硬件直通的场景,虚拟机的性能损失会让你怀疑人生。另外,USB 设备直通、串口调试(比如连接 CP210x 芯片的串口模块)、多显示器扩展这些场景,虚拟机折腾起来也够喝一壶的。
双系统的逻辑完全不同:Win10 和 Ubuntu 20.04 各自独占一块磁盘空间,开机时通过引导管理器选择进入哪个系统。这种方式的优点是性能绝对无损、硬件访问完全原生,装显卡驱动、跑机器人中间件、做实时控制都跟单系统没有任何区别。缺点是切换系统需要重启,而且两个系统之间共享文件需要单独规划一个数据分区。
所以我的建议很简单:日常办公娱乐用虚拟机,搞科研、做开发、跑重负载任务选双系统。如果你要做 ROS1 Noetic 开发(Ubuntu 20.04 官方支持的 ROS 版本),双系统几乎是标配,因为 Noetic 对硬件访问和实时性的要求在虚拟机里多少会打折扣。
1.2 磁盘规划:给 Ubuntu 留多少空间
这是新手最容易忽略的一步。很多人装到一半发现"哎呀我C盘没空间了"或者"装完了发现 Ubuntu 就剩 20GB 根本不够用",临时调整分区非常痛苦。
先说结论:如果你的磁盘是 512GB SSD,我建议给 Ubuntu 至少留 150GB;如果是 1TB 以上,直接分 200GB。别觉得多,做一次深度学习数据集下载 + 源码编译 + 虚拟环境,100GB 可能几个月就吃完了。你给 Ubuntu 预留一个"冗余区"(不用着急分完,可以先留 30~50GB 未分配空间,以后用 GParted 扩展)是最稳妥的做法。
磁盘类型也要提前确认。现在大多数机器是 UEFI + GPT 模式,老一些的机器可能是 Legacy BIOS + MBR。这个信息决定了后面的安装方式。在 Win10 下按Win+R打开运行框,输入msinfo32,在系统信息里看"BIOS 模式"那一栏:显示"UEFI"就是新型引导,显示"传统"就是 Legacy。新机器基本全是 UEFI,Ubuntu 20.04 默认也优先走 UEFI 安装。
1.3 制作 Ubuntu 20.04 安装 U 盘
安装镜像直接去 Ubuntu 官网下载 20.04.6 LTS 桌面版,这是 20.04 系列的最终维护版本,bug 修得最干净。不建议去第三方站点下载,校验值对不上、镜像被塞进去奇怪的东西这种坑我见得太多了。
U 盘至少 4GB,用 Rufus 写入。Rufus 有一个关键选项需要注意:在"分区类型"那里,如果你的机器是 UEFI 引导,选 GPT;如果是 Legacy,选 MBR。另一个坑是 Rufus 在某些版本上会默认把 U 盘格式化成 NTFS 或者 exFAT,Ubuntu 的 UEFI 引导在部分主板上对 NTFS 支持不算好,建议在 Rufus 的"文件系统"选项里直接选 FAT32,然后在"卷标"里随意起个名字。
写入完成后,把 U 盘插在目标机器上,开机进 BIOS 设置启动顺序。不同品牌快捷键不一样,大多数台式机和笔记本是 F2、F12、Del 这几个,具体看开机画面提示。在 Boot 菜单里,把 U 盘所在项调整到第一位。需要注意,UEFI 模式下启动菜单里可能同时出现两个 U 盘项:一个带 UEFI 前缀,一个不带。选带 UEFI 前缀的那个,保证安装程序以 UEFI 模式启动。
1.4 进 BIOS 前必须检查的三个设置
进 BIOS 不是光调启动顺序就完事,有几个设置项会直接影响安装成败。
第一是 Secure Boot(安全启动)。这个功能本意是防止启动时加载未签名代码,但它经常拦截 Ubuntu 的引导程序(shim 虽然已经签了名,但在某些主板上还是会被绊一脚)。我的处理方式是:如果机器上没有必须依赖 Secure Boot 的场景(比如某些 Windows 加密软件),直接把它 Disable。如果你不想关,Ubuntu 官方说支持 Secure Boot,但实测踩坑率不低,尤其是 NVIDIA 驱动装完之后,经常出现一开 Secure Boot 就启动失败的情况。
第二是 SATA Mode(硬盘模式)。如果 BIOS 里硬盘模式是 Intel RST Premium(也就是 RAID 模式),Ubuntu 安装程序大概率认不出你的硬盘,或者装完引导直接坏掉。把它改成 AHCI 模式再装。有些机器在 Win10 已经装好的情况下切换 AHCI 会导致 Windows 蓝屏,解决办法是先在 Windows 里以管理员身份打开命令提示符,输入bcdedit /set safeboot minimal,重启进 BIOS 改 AHCI,再进 Windows(会自动进入安全模式),然后再执行一次bcdedit /deletevalue safeboot,重启恢复正常。这套操作可以帮你不用重装 Windows 就能切换硬盘模式。
第三是 Wake on LAN、Fast Boot 这类电源管理选项。Fast Boot 在部分主板上会导致 Ubuntu 启动时检测不到键盘或 U 盘,建议先关掉。装完系统之后再开回来问题不大。
2. 安装 Ubuntu 20.04 的完整流程拆解
2.1 分区方案:新手千万别选"清除整个磁盘"
U 盘启动后会先进入 GRUB 菜单,选"Install Ubuntu"或"Try Ubuntu"。我习惯先选 Try Ubuntu,进到桌面后先打开 GParted 确认磁盘分区状态,确认无误再双击桌面上的"Install Ubuntu"图标开始安装。这一步能帮你提前发现分区问题,比装到一半报错强。
安装引导界面有几个关键选项:
- 语言和键盘布局:默认中文,但字体渲染在部分显卡上会发虚,建议直接用 English 装,装完再在系统设置里加中文输入法。
- 安装类型:这里就是分水岭。如果你想偷懒,选"Install Ubuntu alongside Windows Boot Manager",安装程序会自动帮你压缩 Windows 分区腾出空间。这个方式省事,但分区大小不可控,而且它自动压缩出来的布局有时候很反人类(比如把根分区和 swap 挤在一小块空间里)。
- 我推荐的方式是先选"Something else"(其他选项),手动分区。别被这个词吓到,手动分区其实逻辑很简单。
老实说,"Install alongside"在 20.04 版本已经做得比较稳了,但如果你的 Windows 磁盘上有 BitLocker 加密或者有大量坏道隐患,自动压缩会有风险。手动分区能让你完全掌控磁盘布局,后续扩展和修复心里有数。
2.2 手动分区方案:EFI、根分区、Home、Swap
进入"Something else"之后,你会看到磁盘设备列表。这里我需要强调一个关键认知:只要你不动 Windows 的 NTFS 分区,装 Ubuntu 就不会影响 Win10。很多新手在这里就怕了,看到磁盘分区列表直接慌,其实只需要关照几个点:
在空闲空间上依次创建以下分区(以 UEFI + GPT 模式为例):
EFI 系统分区(如果已有则无需新建,安装器会自动识别) 容量 512MB,类型选"EFI System Partition"。如果你的磁盘原本是 Win10 全新安装生成的 EFI 分区(通常 100MB 或 260MB),直接复用,不要新建第二个 EFI 分区。我见过有人新建了一个 512MB 的 EFI,结果两个 EFI 分区并肩存在,GRUB 装到哪个、Windows Boot Manager 在哪个,混乱得一塌糊涂。一个磁盘上只需要一个 EFI 分区,这是一个非常重要的原则。
根分区 / ,ext4,容量 50~80GB 系统本体、软件包全在这里。20.04 的根分区建议至少 50GB,如果你要装 ROS Noetic + 各种依赖,60GB 比较稳。别贪大,根分区留给后面数据的容量要控制好。
Home 分区 /home,ext4,剩余空间 你的个人文件、下载、项目代码、虚拟环境全在 /home 里。后续升级系统只要不动 /home,个人资料完好无损。这是 Linux 的一个核心设计哲学:系统数据和个人数据分离。分一个独立的 /home 是值得的。
Swap 交换分区 如果你要装 NVIDIA 显卡驱动跑 CUDA,或者跑大型编译任务,给 8~16GB 的 swap。如果内存 32GB 以上,swap 可以给 8GB 意思一下就够。老教程里说 swap 要给内存的两倍,那是机械硬盘时代内存只有 1~2GB 的场景了,现在没这个必要。另外解释一下 swap 区能让你用硬盘的一部分来充当内存的"溢出空间"。当物理内存写满时,系统会把不活跃的内存页挪到 swap 里,给活跃进程腾位置。没有 swap,内存爆了就直接 OOM 杀进程,后果很酸爽。
是否单独分 /boot?我的建议是不要 看到某些教程说分一个 1GB 的 /boot 给引导,这是老式 BIOS 引导方式的遗产。UEFI 模式下引导文件在 EFI 分区里,内核镜像放在根分区,不需要独立 /boot。独立 /boot 反而容易把磁盘空间用满,还得定期清老内核。直接用默认布局即可。
分区创建完毕后,在安装器下方"安装启动引导器的设备"下拉框里,一定要选中你放 EFI 分区的那个物理磁盘(通常是 /dev/sda 或 /dev/nvme0n1,不带数字)。很多教程没说这一点,实际上安装器在自动模式下会自动找 EFI 分区,但手动分区模式下有时候会指向奇怪的地方(比如某个 U 盘设备),引导装错了机器,装完拔了 U 盘就进不了系统。
2.3 安装过程中的三个细节
分区确认后,安装器会弹出"将以下内容写入磁盘吗"的确认框。在点击"继续"之前,再检查一遍你选的分区里有没有 Windows 的 C 盘或数据盘,只要有 NTFS 分区出现在列表里还带着"将被格式化"的字样,马上停下来。格式化了 Windows 分区那可真就欲哭无泪了。
然后设置用户名和密码,记住你设置的"电脑名称"(hostname),这关系到后面 ROS 的网络配置。继续等待安装完成,安装结束后选择"立即重启"。重启时会提示你拔掉 U 盘,拔出后进入新的引导菜单。
第一次重启时如果看到紫色界面(GRUB 菜单),说明引导基本成功了。菜单里会有 Ubuntu、Ubuntu 高级选项、Windows Boot Manager(可能显示为 Windows 10)这几个条目。默认进入 Ubuntu,登录后先打开终端测试一下网络,执行:
sudo apt update如果提示连接超时或源不可达,大概率是网络没配好。20.04 的安装器通常用 DHCP 自动获取 IP,家用路由器一般没问题,但校园网或需要认证的网络需要手动配 IP,这里先留个心眼,后面常见问题章节会讲。
3. 引导管理的核心逻辑与实操
3.1 GRUB 引导:开机菜单是谁在控制
装完双系统之后,开机会出现一个紫色的 GRUB 菜单,这个菜单就是 GRUB(GRand Unified Bootloader)在起作用。ESR 和 GNU 项目的产物,用来统一加载 Windows 和 Linux 的引导程序。
GRUB 的核心配置文件是/boot/grub/grub.cfg,平时我们不需要直接改它,而是改/etc/default/grub这个环境配置文件,改完执行sudo update-grub生成新的 grub.cfg。原理很好理解:grub.cfg 是编译产物,/etc/default/grub 是配置源,你改配置源再重新生成产物,脚本会自动探测系统里装了什么内核、有没有其他系统(通过 os-prober 扫描),然后把启动条目拼出来。
3.2 设置默认启动系统:默认进 Windows 还是 Ubuntu
装完 Ubuntu 后,GRUB 默认第一个条目是 Ubuntu,等 10 秒如果键盘没动静就自动进 Ubuntu。如果你想默认启动 Windows(很多人上班要用 Windows,或者家里人不熟悉 Linux),改一个参数就行:
sudo nano /etc/default/grub找到这几行:
GRUB_DEFAULT=0 GRUB_TIMEOUT=10把GRUB_DEFAULT=0改成你想要的条目序号,序号从 0 开始数。在 GRUB 菜单里通常是这样排序的:
- 条目 0:Ubuntu
- 条目 1:Ubuntu 高级选项
- 条目 2:Windows Boot Manager
改GRUB_DEFAULT=2就是默认进 Windows。更推荐的方式是用条目名字而不是序号,因为系统内核升级后条目位置可能会变:
GRUB_DEFAULT="Windows Boot Manager (on /dev/nvme0n1p1)"这个字符串在sudo update-grub执行之后会显示在输出里,你复制那行准确的名字填进去就不会错。
改完后执行:
sudo update-grub如果你想缩短开机等待时间,把GRUB_TIMEOUT调小到 3 或者 5,别调成 0,不然想手动切换系统的时候根本没机会按键。
3.3 Windows 更新后引导丢失:用 Ubuntu Live 盘修复 GRUB
这是双系统用得越久越容易碰到的问题:Windows 搞了次大更新,或者你重装了一次 Windows,开机菜单直接不见了,啪的一下直接进 Windows,连个选择机会都没有。原理很简单,Windows 的安装程序不关心 GRUB 的存在,它会重写 EFI 系统分区里的 Boot Manager 记录,把引导权抢回去。
修复方法很简单,前提是你有一个 Ubuntu 启动 U 盘(做安装盘那个就行):
- 插入 U 盘,开机从 U 盘启动,进入 Try Ubuntu 桌面。
- 打开终端,先挂载你的 Ubuntu 根分区。先用
lsblk -f查看到底哪个分区是根分区,例如是/dev/nvme0n1p7。 - 执行以下命令:
sudo mount /dev/nvme0n1p7 /mnt # 如果单独分了 /boot 分区,需要额外挂载,通常不需要 sudo mount /dev/nvme0n1p1 /mnt/boot/efi # EFI 分区的设备名用 lsblk -f 确认,通常是那个 FAT32 分区- 挂载必要的虚拟文件系统:
sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys sudo mount --bind /run /mnt/run- chroot 进入系统:
sudo chroot /mnt- 重新安装并更新 GRUB:
grub-install /dev/nvme0n1 update-grub这里的/dev/nvme0n1是你的整块磁盘(不带分区号),grub-install 会把引导程序写到磁盘的 UEFI 引导位置。执行完后exit退出 chroot,重启拔掉 U 盘,GRUB 菜单就回来了。
反向情况也存在:你重装了 Ubuntu,后发现 Windows 的启动条目消失了。解决方法是进 Ubuntu 后执行sudo apt install os-prober -y,然后sudo os-prober扫描 Windows Boot Manager 是否存在,再sudo update-grub把 Windows 条目加回来。如果缺了 os-prober(有些精减版系统没装),GRUB 更新时压根不会去扫描其他系统。
3.4 双系统共享文件:加一个数据分区
双系统之间传文件是个常见痛点。最简单的方式是 Ubuntu 直接读 Windows 的 NTFS 分区(安装 ntfs-3g,20.04 默认就带),比如把 Windows 的 D 盘固定挂载到/mnt/windows_d。但反过来 Windows 默认读不了 ext4。更推荐的做法是预留一个 exFAT 格式的数据分区,两个系统原生支持,大文件传输也不受单文件 4GB 限制(FAT32 有这限制)。
这个分区可以在 Ubuntu 安装时预留空间,安装完成后用 GParted 创建,格式选 exFAT 即可。两块系统之间拷贝数据集、虚拟机镜像、模型权重文件都走这个分区,干净利落。
4. 装完必做的三件套:显卡驱动、时间同步与系统源
4.1 NVIDIA 显卡驱动的正确安装姿势
Ubuntu 桌面版安装完成后默认用的是开源驱动 nouveau,这个驱动简单说就是 NVIDIA 不愿提供源码、开源社区靠着逆向工程硬搞出来的驱动,性能一塌糊涂,还经常跟 CUDA 撞车。跑 3D 应用、装 CUDA 做深度学习,必须换成 NVIDIA 官方闭源驱动。
网上很多教程会让你去官网下载.run文件手动装,说实话这个方式最坑。run文件跟内核版本绑得很死,更新内核之后大概率驱动失效,还得重新编译安装。现在的主流方式是直接用 Ubuntu 的官方源安装,方便维护:
sudo apt update sudo apt install ubuntu-drivers-common ubuntu-drivers devicesubuntu-drivers devices会列出当前系统推荐的驱动版本,比如nvidia-driver-470或nvidia-driver-535。选 recommended 标注的版本装上:
sudo apt install nvidia-driver-535装完重启,在终端执行nvidia-smi,能看到显卡型号和驱动版本信息就说明成功了。
有一个坑必须要提醒:如果自学教程让你用sudo apt install nvidia-dirver-535这样的命令,注意这实际上是笔误(dirver 应该是 driver),我自己就吃过这个亏,复制网上命令时把拼写错误也复制了进去,结果 apt 提示找不到包。命令输入时一定要仔细核对。
装 NVIDIA 驱动失败最常见的原因有两个:
一个是 Secure Boot。如果 BIOS 里开着 Secure Boot,安装驱动时系统会提示为驱动签名设置密码(MOK),如果你跳过了这个环节,驱动装完重启后在加载阶段会被拒载。解决方法是启动时进入 MOK 管理器完成驱动签名验证,或者直接到 BIOS 里关掉 Secure Boot。现实中我建议装 NVIDIA 驱动的机器干脆把 Secure Boot 关掉,省得每次更新驱动都要重新签一次。
另一个是内核头文件没装。装驱动前先确认内核头文件存在:
sudo apt install linux-headers-$(uname -r) build-essential如果缺了内核头文件,驱动编译会直接报错,你还得去日志里翻半天才能定位。
4.2 Win10 与 Ubuntu 时间不同步问题
装完双系统后你会发现一个非常普遍的现象:Windows 时间变了,Ubuntu 时间也变了,两个系统来回切换,每次时间都错乱 8 个小时。很多人以为是主板电池没电,其实是两个系统对硬件时钟(RTC)的解读方式不同。
Ubuntu 默认把硬件时钟当作 UTC 时间,再根据时区换算显示本地时间;Windows 则默认把硬件时钟当作本地时间,不换算。所以你在 Windows 里设置好的时间,进 Ubuntu 后 Ubuntu 认为硬件时间是 UTC,换算成北京时间就加了 8 小时;切回 Windows 时硬件时间被 Ubuntu 改成了 UTC,Windows 把它当本地时间显示,就又差了 8 小时。
解决方式有两种,二选一:
方案一(推荐):让 Windows 也把硬件时钟当 UTC。以管理员身份打开注册表编辑器,定位到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation新建一个 DWORD(32 位)值,名称为RealTimeIsUniversal,值设为 1。然后重启,让 Windows 时间与 Ubuntu 对齐。
方案二:让 Ubuntu 把硬件时钟当本地时间:
sudo timedatectl set-local-rtc 1这个命令在 20.04 上实测有效。不过我更推荐方案一,因为 Ubuntu 官方的设计就是 UTC 硬件时钟,后续如果更新了系统或者重装了 Ubuntu,方案一不需要你再多做一次操作。
4.3 换源:国内用户提速的必修课
Ubuntu 20.04 默认的 apt 源在国外服务器,国内网络下执行apt update慢得要命。换源是装完系统的第一件事。操作很简单,备份原源文件后在/etc/apt/sources.list里换成国内镜像源。以清华源为例,20.04 的软件源格式如下:
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse修改后执行sudo apt update && sudo apt upgrade。需要注意,官方源更新和升级是两回事,update 只刷新软件包索引,upgrade 才真正升级软件包。新装系统建议做一次完整升级,把 20.04.6 的累积补丁打上去。
Python 的 pip 源、ROS 的 apt 源也建议一并换掉,后面做开发会省很多等待时间。
5. 常见问题排查与避坑清单
5.1 安装时黑屏或卡死在 Logo 界面
Ubuntu 20.04 对 NVIDIA 显卡的 nouveau 驱动兼容性不太好,安装时经常出现"选择 Try Ubuntu 后直接黑屏"或者"卡在紫色界面不动"。
解决方法是启动时按键进入 GRUB 菜单(在安装界面的第一个画面按方向键选择"Try Ubuntu",然后按e编辑启动项),找到以linux开头的那一行,行尾加上:
nomodeset按Ctrl+X或F10启动。这个参数的意思是在内核加载阶段不初始化显卡模式,只用基本显示输出。装完系统后第一次进 Ubuntu,如果也遇到黑屏,同样在 GRUB 启动项里加nomodeset参数先进系统,然后按上一节的方法装 NVIDIA 官方驱动,问题就解决了。
每次进系统都手动编辑启动项太麻烦,可以把参数永久写进 grub 配置文件:
sudo nano /etc/default/grub # 找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" # 改成 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset" sudo update-grub5.2 开机直接进 Windows,没有 GRUB 菜单
这种情况通常在 Legacy BIOS 模式下发生。安装 Ubuntu 时如果硬盘是 MBR 分区表,而安装器把引导装到了 Ubuntu 所在分区,Windows 引导又占据了磁盘的主引导记录(MBR),开机直接走 Windows 引导,GRUB 根本没机会露面。
修复方式是用 Boot Repair 工具,这是社区里流传度最高的自动修复方案。从 Ubuntu Live U 盘启动,打开终端执行:
sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair boot-repair工具启动后直接点"Recommended repair",它会自动检测 Windows 引导项,重新把 GRUB 装到 MBR。修复完成后重启应该就能看到双系统菜单了。
如果 Boot Repair 也救不回来,手动检查一下 BIOS 里的启动顺序,把 Ubuntu 所在的磁盘项(通常显示为 ubuntu 或 UEFI: 磁盘名)调整到 Windows Boot Manager 之前。
5.3 如何安全卸载 Ubuntu 恢复纯 Windows
有些人装完双系统使用了一阵,发现用不上 Linux 了,想把 Ubuntu 卸载干净。网上很多教程说直接格式化 Ubuntu 分区就行,这是大错特错。格式化分区之后 GRUB 还留在 EFI 分区里,开机还是会先显示 GRUB 菜单,选 Ubuntu 条目报错,选 Windows 还能用。更麻烦的是,如果你只删了分区没删引导条目,后续 Windows 更新还可能出幺蛾子。
正确的卸载姿势分三步:
第一步:在 Windows 下用磁盘管理删除 Ubuntu 的分区(根分区、home、swap),把它们变成未分配空间,或者并入其他分区。
第二步:以管理员身份打开命令提示符,用 Windows 自带的diskpart清理 EFI 分区里的 Ubuntu 引导文件:
diskpart list disk sel disk 0 list partition # 找到类型为 EFI 系统分区(通常 100~500MB)的那个分区编号 sel partition 1 assign letter=Z: exit打开文件资源管理器,进入 Z 盘(EFI 分区),删除EFI\ubuntu目录,然后回到命令提示符执行:
diskpart sel volume Z remove letter=Z exit第三步:修复 Windows 引导。执行bcdboot C:\Windows /s Z:或者直接启动电脑看是否能正常进 Windows。如果你刚才误删了 EFI 里的 Microsoft 目录,Windows 也会进不去,这时候需要用 PE 盘或安装盘修复引导。操作前务必小心,只删ubuntu目录,不要动Microsoft目录。
5.4 Ubuntu 的 Wi-Fi 频繁断连或网卡不识别
笔记本装 Ubuntu 经常遇到无线网卡不识别的问题,尤其是 Realtek 网卡。20.04 对部分 Realtek 驱动的支持要到 5.15 以上的内核版本才完善,如果你的 Ubuntu 内核停留在 5.4,网卡可能根本搜不到 Wi-Fi。
解决的思路很简单:先用手机 USB 共享网络让机器能上网,然后安装网卡驱动。Realtek 网卡通常需要从 GitHub 拉驱动源码编译:
sudo apt install git dkms build-essential git clone https://github.com/xxx/rtl8821ce.git cd rtl8821ce sudo make install sudo modprobe 8821ce具体驱动仓库要根据你的网卡型号来选,在终端里跑lspci -nn | grep -i network拿到网卡型号,然后去 GitHub 搜对应的 Linux 驱动。装完后如果还频繁断连,可以关掉 Wi-Fi 电源管理:
sudo iwconfig # 找到无线网卡名,通常是 wlp2s0 之类 sudo iwconfig wlp2s0 power off顺手把电源管理关掉写进 rc.local 或者 systemd 服务,重启之后就不会每次都要手动关了。
5.5 双系统卸载与重装:如何保留 /home
还有一个场景很有用:你装完双系统用了一段时间,因为乱装软件把系统搞坏了,想重装 Ubuntu,但希望保留 /home 里积累的数据。
这个其实很简单,安装时选择"Something else",然后只格式化根分区 /,把原本的 /home 分区选中并挂载到 /home(挂载时不要勾选格式化),安装器会保留你原有的 home 数据。装完系统后,原来的用户资料、下载文件、项目代码都还在。如果用户名跟原来不一致,登录后用 root 权限把 /home 下老用户的文件拷贝出来就行。
这种"重装不丢数据"的操作也是当初建议单独分 /home 的根本原因。很多图省事把所有空间都给 / 分区的用户,系统一崩,数据也跟着遭殃,得先用 Live U 盘把数据抢救出来才能重装,折腾程度直接翻倍。
5.6 安装完后 Windows 时间总是慢 8 小时,但注册表改了没用
之前说改注册表RealTimeIsUniversal的方案,对绝大多数人有效,但有少数用户反映改了还是不准。这种情况先检查注册表位置是不是写错了,TimeZoneInformation项应该是在SYSTEM\CurrentControlSet\Control下面,别写到CurrentUser。另外,如果机器上装了某些"时间校正"软件(比如某些管家、安全卫士的时间同步工具),它会主动把 Windows 时间改回本地时间模式来"校正",这就会跟注册表设置打架。建议在 Windows 设置里把所有自动同步时间的功能关掉,手动确认注册表生效。
顺带提一句,安全软件(比如 Windows 安全中心)不会因为你装了 Linux 就去干预引导,但如果你的 Win10 开启过设备加密或 BitLocker,Ubuntu 是无法访问那个加密分区的,GRUB 也读不了里面的启动文件。碰到 BitLocker 加密后的双系统问题,先把 BitLocker 暂停再操作引导修复,否则很容易陷入"能进 Ubuntu 但进不了 Windows"的僵局。
6. 我踩过的坑和留给你的经验
双系统这件事,操作难度其实不高,步骤就那么几步,但它的坑不在于"会不会",而在于"有没有意识到"。我从第一次装 Ubuntu 到现在,中间至少重装过十余次双系统,每次出问题几乎都是同一个套路:分区表理解不透彻、Secure Boot 没有提前关、NVIDIA 驱动强行手动装后来内核升级崩掉。这些问题只要理解了背后的逻辑,就完全可预防。
给你几个我个人的实用建议:
第一,装系统之前先在 Windows 里做一个系统还原点或者磁盘备份。别觉得多余,我第一次给同学装双系统,装完发现他的 Windows 进不去了,到最后排查是因为磁盘分区表被某些分区工具改乱了,没有备份的情况下只能重新装 Windows 全家桶,那个下午的经历让我理解了一句话:所有折腾的前提是先确保退路。
第二,Ubuntu 系统和驱动更新要克制。20.04 的 LTS 更新策略很保守,但如果你手动开启了 HWE 内核(Hardware Enablement)或者天天执行完整的apt full-upgrade,就要接受内核更新可能带来驱动失效的风险。我自己维护的机器一般只会打安全补丁,显卡驱动和内核版本尽量保持在一个稳定组合,除非有明确需求,不做大跨步升级。
第三,双系统装好后第一件事,不是装各种软件,而是先学会做引导备份。把 EFI 分区里的EFI\ubuntu整个目录拷贝到 U 盘或者 Windows 数据盘,以后引导坏了直接恢复回去,省去重装系统的麻烦。这个操作没人主动教你,但真的能在关键时候救命。
认真走完一遍双系统安装的流程,你对 UEFI、GPT、MBR、GRUB、分区表、内核驱动这些东西的理解会上升一个台阶。这些概念看着枯燥,但它们是 Linux 系统运维和日常排障最底层的地基。希望这篇教程能帮你少走点弯路,一次装成功。