装机这事,聊到双系统,永远绕不开两个痛点:一是怕把自己的数据搞没,二是怕把引导搞坏开机进不了系统。我这些年帮人装过几十次双系统,踩过的坑比很多人见过的教程都多,所以这篇不说废话,直接讲双硬盘下 Ubuntu 16.04 与 Win10 双系统安装的完整流程、底层逻辑和避坑细节。
先说明一点,虽然标题写的是 16.04,但我必须说句实在话:16.04 已经停止维护很久了,如果今天你打算装新机器,我建议直接用 22.04 或 24.04 LTS,安装步骤几乎一模一样。这篇文章以 16.04 时代传承下来的经典流程为主线,同时把所有新旧版本可能有差异的地方都标出来,你照着操作完,不管是哪个 LTS 版本都能顺利跑起来。
这篇文章适合谁?适合想在一台电脑上同时保留 Windows 和 Linux 开发环境的人,尤其是手里正好有两块硬盘、打算把两个系统物理隔离的同学。如果你只有一块硬盘但想装双系统,核心思路也通用,只需要把分区那一步改成在一块盘上切分区即可。
1. 双硬盘双系统的整体设计思路
1.1 为什么选择双硬盘方案
先聊聊"双硬盘"这个前提。很多人觉得双系统不就是装两个系统嘛,一块硬盘分两个区不就行了?说实话,能装,但我强烈不推荐单硬盘分区的方案。
单硬盘双系统的最大问题是:Windows 更新、Linux 内核升级、日志频繁写入,这些都会让系统盘产生大量读写。两块系统挤在一块盘上,引导分区、恢复分区、EFI 分区互相干扰,一旦 Windows 更新把 EFI 引导分区搞坏了,Linux 大概率也跟着起不来。我见过太多次这种"一损俱损"的局面,最后只能拿 Live USB 进去手工修引导。
双硬盘方案就清爽得多。一块硬盘装 Windows,另一块硬盘装 Linux,两个系统在物理层面就是隔离的。哪怕 Windows 整个瘫了重装,Linux 硬盘上的数据和引导完全不受影响;反过来也一样。这也是我为什么在帮人规划双系统时,只要对方有第二块硬盘(哪怕是块老的机械盘),都会优先推荐这个方案。
双硬盘还有一个隐藏优势:可以避免两个系统的引导程序互相覆盖。Windows 的引导器非常霸道,安装时会直接接管主引导记录,Linux 的 GRUB 虽然能识别 Windows 引导,但反过来 Windows 不懂 Linux 的文件系统。两块硬盘分开后,你可以在 BIOS 里通过启动顺序自由切换系统,也可以让 GRUB 统一管理两块盘的引导,灵活度高出不少。
1.2 安装方案选型与关键决策点
双硬盘双系统的主流安装方式有两种,各有适用场景,我帮你拆开讲清楚。
第一种是"两块盘各自独立引导"。Windows 装在第一块硬盘,Ubuntu 装在第二块硬盘,Ubuntu 的引导程序(GRUB)也装在自己的硬盘上。开机时按 BIOS 的启动菜单键(通常是 F12 或 F11)手动选择从哪块硬盘启动。这个方案最大的好处是引导隔离,两个系统彻底互不干扰,适合那些不想折腾引导、追求稳定的朋友。缺点是每次切换系统都要手动进 BIOS 选一次启动顺序,稍微麻烦一点。
第二种是"GRUB 统一引导"——这也是我会重点推荐的省心方案。Windows 装在硬盘 A,Ubuntu 装硬盘 B,但把 GRUB 装在 Ubuntu 所在硬盘 B 上,然后通过主板 BIOS 让硬盘 B 优先启动。这样开机后直接进入 GRUB 界面,里面能看到 Ubuntu 和 Windows Boot Manager 两个选项,用键盘上下选、回车进入,体验和单硬盘双系统一模一样,但稳定性是物理隔离级别的。
我在实际帮人装机时,90% 的情况都推荐第二种。原因很简单:日常使用谁也不想每次开机都狂按 F12。GRUB 的统一引导菜单非常成熟,只要配置好,长期使用几乎不会出问题。
另外还有一个版本选择的决策点,我顺手一起说了。如果你有条件,建议把 Ubuntu 直接装成 20.04 或 22.04 以上的版本,尤其是 NVIDIA 显卡用户,新版本的内核和驱动兼容性好太多。16.04 在老旧设备上装装还行,新硬件上大概率会碰到网卡不识别、显卡驱动装不上这类问题,没必要跟自己过不去。
2. 安装前的软硬件准备
2.1 硬件检查与 BIOS/UEFI 设置
先检查硬件兼容性。市面上绝大多数近十年内的电脑都能顺利跑 Ubuntu,但有几个点容易出问题,提前确认能省不少事。
第一是内存,建议至少 8GB。不是 Ubuntu 本身要吃多少内存,而是你装完系统后跑项目、开浏览器、挂 IDE,8GB 是起步水平。第二是磁盘空间,Ubuntu 所在硬盘建议至少 120GB,如果你还要在 Ubuntu 里做深度学习模型训练或者大数据处理,空间当然是多多益善。第三是显卡,NVIDIA 用户要注意,Ubuntu 安装时可以顺便勾选"安装第三方软件",这会把 NVIDIA 闭源驱动一并装好,不用装完系统再费劲去命令行里配。
BIOS 设置是重头戏,我按重要性排个序:
关闭 Secure Boot。这个一定要关,否则 Ubuntu 的第三方内核模块(比如 NVIDIA 驱动)加载时会直接被拒。虽然 16.04 之后的新版本开始逐步支持 Secure Boot,但为了不给自己找麻烦,装机阶段直接关掉最省心。
把 SATA 模式设为 AHCI。如果你原来的 Windows 是装在 IDE 模式下的(老机器常见),改成 AHCI 后 Windows 可能直接蓝屏,所以这个操作要在装 Windows 之前就设好。新机器默认就是 AHCI,不需要动。
确认启动模式用的是 UEFI。2012 年之后的电脑基本都是 UEFI 引导了,但也有部分机型默认开了 CSM(传统 BIOS 兼容模式)。既然要从零开始装双系统,我建议统一用 UEFI 模式 + GPT 分区表,这是现代操作系统的标准组合,引导恢复起来也方便。
2.2 系统镜像下载与启动盘制作
镜像下载这块,我直接给你最稳的渠道。
Windows 10 的 ISO 从微软官网下载就行,不用去第三方站点碰运气。打开官网的"下载 Windows 10"页面,选择"下载工具",用 Media Creation Tool 直接生成 U 盘启动盘,或者选"下载 ISO 文件"再自己用工具写盘,都行。我个人习惯下载 ISO,因为这样还能顺便保存一份镜像,以后重装或者做虚拟机都用得上。
Ubuntu 的镜像去官网下载,中文官网和 ubuntu.com 都行。注意下载的是桌面版(Desktop),不是服务器版。16.04 时代的文件名是 ubuntu-16.04.7-desktop-amd64.iso 这种格式,如果是 22.04 就是 ubuntu-22.04.x-desktop-amd64.iso,认准 amd64 架构就没问题。
写盘工具,Windows 下我用 Rufus,简单可靠。U 盘大小建议 8GB 以上,因为新版 Ubuntu 的镜像本身就 4GB 多。在 Rufus 里,分区类型选 GPT,目标系统类型选 UEFI(非 CSM),文件系统保持默认的 FAT32 就行。还有一点容易被忽略:Rufus 在写 Ubuntu 镜像时可能会弹出提示,问你是以 ISO 模式还是 DD 模式写入,选 DD 模式。ISO 模式在 Windows 镜像上是标准做法,但 Ubuntu 镜像必须用 DD 模式,否则 U 盘启动时会报 boot 设备找不到。
如果你本来就在 Linux 环境里,直接用 dd 命令写 U 盘更利索:
sudo dd if=ubuntu-16.04.7-desktop-amd64.iso of=/dev/sdX bs=4M status=progress注意:of=/dev/sdX 这里 X 是 U 盘对应的盘符,千万别写错。用 lsblk 先确认一下哪个是你的 U 盘。
2.3 磁盘规划与数据备份
动手之前,数据备份永远是第一优先级,这不是例行公事,是真的会撞上意外。
先列个表格说清楚我的经典双硬盘规划方案:
| 硬盘 | 系统 | 分区方案 | 数据存放 |
|---|---|---|---|
| 硬盘 A | Windows 10 | 系统盘 C: + 数据盘 D: | 日常办公、游戏、Windows 专属软件 |
| 硬盘 B | Ubuntu | /boot, /, /home, swap | 开发项目、服务端脚本、Docker 容器 |
Windows 和 Ubuntu 完全独立,各自拥有完整的系统和用户数据分区。这样做的核心好处是:两个系统互不依赖,任何一个系统坏了重装都不会影响另一个。我见过太多人把 /home 和 Windows 数据混放在一个 NTFS 分区,最后 Linux 下误删了 Windows 里的文件,欲哭无泪。
如果你手头只有一块硬盘,也可以退而求其次:把这一个硬盘先切成两个主分区,一半给 Windows 装系统,一半留给 Ubuntu。Ubuntu 安装时的分区选择在"其他选项"里手动指定那个空分区,需要注意不要在 Windows 的数据盘上装系统,不然 Windows 会直接不认盘。
备份方面,Windows 用户建议做一个系统镜像备份:控制面板 - 备份和还原 - 创建系统映像,把整个 C 盘备份到外部硬盘。Ubuntu 用户如果原来已经跑过 Linux,建议直接 rsync 关键目录到外部存储:
rsync -avz /home/用户名/ /media/用户名/移动硬盘路径/这个命令会把你的家目录完整镜像到移动硬盘,包括隐藏文件。装机这种事,多花十分钟备份,能给你省一整天的后悔药。
3. Windows 10 与 Ubuntu 双系统的安装流程
3.1 Windows 10 安装实操要点
双系统的安装顺序有一个铁律:先装 Windows,再装 Ubuntu。这个顺序几乎不可打破,原因在于 Windows 的引导器安装时会覆盖掉主引导记录,并不识别 Linux 的存在;而 Ubuntu 的 GRUB 安装时却能自动探测到 Windows 的引导入口。你先装好 Windows,Ubuntu 装完后 GRUB 能自动把 Windows 加进启动菜单。反过来,先装 Ubuntu 再装 Windows,Windows 会把 Ubuntu 的引导抹掉,你还得手动修复一次。
装 Windows 的时候,有几件事要顺手做掉,后面能省不少麻烦。
首先,Windows 安装分区用手动。安装程序进入"你想将 Windows 安装在哪里"时,选择硬盘 A,如果上面有旧分区全部删掉,然后直接新建一个主分区给系统。这时候安装程序会自动生成系统保留分区(ESP/MSR),不用管它,让 Windows 自己管理。
其次,装完 Windows 后先进系统,把网卡驱动、芯片组驱动、显卡驱动全部装好,并完成一次完整的系统更新。这一步很关键,因为如果你装完 Ubuntu 才发现 Windows 某个驱动有问题,切回 Windows 时又是一轮折腾。
最后,在 Windows 的电源设置里把"快速启动"关掉。这个功能默认是开启的,它的机制是关机时把内核会话写入休眠文件,下次开机直接从休眠恢复。听起来很方便,但它会导致 Ubuntu 挂载 Windows 的 NTFS 分区时出现文件锁死,甚至数据损坏。控制面板 - 电源选项 - 选择电源按钮的功能,取消勾选"启用快速启动"。
3.2 Ubuntu 安装与分区实战
Ubuntu 那块硬盘,建议先把整块盘清空(如果有旧数据先备份),然后在安装时选择"清除整个磁盘并安装 Ubuntu"或者手动分区都行。如果你打算以后在 Ubuntu 下做大量数据读写,我建议手动分区,虽然多几个步骤,但可以让分区边界更合理。
进入 Ubuntu 安装器后,语言选中文(或者 English,都行)。安装类型选择"其他选项",这时候连你两块硬盘的分区表都会列出来。
我的推荐手动分区方案如下:
| 分区目录 | 大小 | 类型 | 用途说明 |
|---|---|---|---|
| /boot | 500MB ~ 1GB | ext4 | 存放内核和引导文件 |
| / | 50GB ~ 80GB | ext4 | 系统根目录,软件都装这里 |
| swap | 和内存大小一致 | swap | 虚拟内存,建议与内存等大 |
| /home | 剩余全部空间 | ext4 | 用户数据、项目、缓存 |
我对着这个表逐个讲下理由。
/boot 独立分出来,是为了防止系统根分区写满(尤其是日志和包缓存膨胀时)导致开机引导失效。500MB 完全够,内核升级会同时保留几个旧版本,这个空间足够放十来个内核镜像,别贪多,给根分区多留点更实在。
/ 根分区 50GB 起步,日常开发、装软件、跑 Docker 都够了。如果你计划在 Ubuntu 里安装大型数据集、深度学习的模型权重,或者用 Android Studio 这类吃磁盘的工具,建议直接给 100GB。
swap 分区讨论的人比较多。旧观念是内存的两倍,那是机械硬盘时代的经验。现代电脑内存普遍 16GB 起步,swap 和内存等大已经非常宽裕;如果你内存只有 8GB,swap 可以给 8GB,防止偶尔内存爆掉卡死。如果你打算启用休眠(suspend-to-disk),swap 需要大于等于内存大小。16.04 之后系统也能用 swap 文件代替 swap 分区,但为了兼容性,分区方案还是 swapon 更稳妥。
/home 独立分区是很多人用 Linux 多年的良好习惯。以后重装系统时,只需要重新挂载 /home 分区,不勾选格式化,你的文件和配置全部还在。这一点和 Windows 里 D 盘数据不随系统重装消失是同一个道理。
有一个细节容易踩坑:引导程序安装位置。在分区界面的底部,会有一个本引导程序安装到哪个设备的选项,默认可能是 /dev/sda。这里要仔细看,必须选择 Ubuntu 所在的那块硬盘,比如 /dev/sdb。如果你默认选了 /dev/sda(Windows 所在盘),GRUB 装上去虽然也能用,但一旦 Windows 更新或你重装 Windows,整个引导又会变成一团乱麻。物理隔离从一开始就做好,选中你自己的 Ubuntu 硬盘。
分区完成后,点"现在安装"。安装过程中会让你设置用户名、主机名和密码,这里建议都用简单的纯英文,避免某些软件或终端路径下出现中文乱码问题。
安装完成后,重启时按 F12(或 F2 进 BIOS)选择从 Ubuntu 所在硬盘启动。这时看到的 GRUB 界面应该有 Ubuntu 的启动项;Windows 的启动项通常在后面几个版本里会自动探测到,如果没有,等进系统后执行一次 sudo update-grub 即可。
4. 引导管理、默认系统切换与系统时间配置
4.1 GRUB 引导修复与双系统识别
绝大多数双硬盘装完 Ubuntu 后,第一次开机就都能正常显示 GRUB 菜单。但有两个高概率场景需要你手动处理引导:
场景一:GRUB 界面只显示 Ubuntu,看不到 Windows。这个问题基本就是 GRUB 没有自动探测到 Windows 引导。进 Ubuntu 终端,执行:
sudo update-grub这个命令会重新扫描所有磁盘上的可引导系统,并把 Windows Boot Manager 加进启动菜单。执行完再重启,GRUB 菜单上就会出现 Windows 的选项。如果执行后仍然看不到,大概率是没有安装 os-prober 组件,装一下再重新更新一次:
sudo apt install os-prober sudo update-grub场景二:开机连 GRUB 都进不去,直接黑屏或者卡在某个 boot 错误。这通常说明引导坏了,也不要慌,用 Ubuntu 的 Live USB 重启进入试用模式,在终端里执行 boot-repair 工具:
sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair boot-repair打开后选"Recommended repair",它会自动修复 GRUB 并重建引导菜单。这个工具我实际用过很多次,修复成功率非常高,堪称装机救命稻草。
4.2 修改默认启动顺序
装好双系统后有一个非常常见的需求:想把默认启动项改成 Windows,或者改成 Ubuntu。默认启动项目前由 /etc/default/grub 文件里的 GRUB_DEFAULT 控制。
先看一下当前的行:
sudo cat /etc/default/grub | grep GRUB_DEFAULT默认一般是 0,表示 GRUB 菜单的第一个条目(通常是 Ubuntu)。如果你想默认启动 Windows,先要知道 Windows 在菜单里的位置。执行:
sudo grep menuentry /boot/grub/grub.cfg把 Windows 那行的菜单标题抄出来。然后编辑 /etc/default/grub:
sudo nano /etc/default/grub把 GRUB_DEFAULT=0 改成:
GRUB_DEFAULT="Windows Boot Manager (on /dev/sda1)"注意引号里的文字要和你 grub.cfg 里显示的一模一样,或者也可以用菜单序号,比如 GRUB_DEFAULT=2 表示第三个菜单项。改完保存,执行更新:
sudo update-grub重启生效。如果你只是临时想切一次系统,直接在 GRUB 菜单里选中并按回车就行,不修改配置文件。
4.3 双系统时间错乱问题
这是我被问得最多的问题:为什么装完 Ubuntu 后,回到 Windows 发现时间差了 8 小时?
原因很简单:Windows 把硬件时钟(RTC)当作本地时间,Linux 把硬件时钟当作 UTC 时间。你在中国(UTC+8),Windows 开机时把硬件时间直接当成本地时间显示;Ubuntu 开机时把硬件时间当成 UTC,再换算成北京时间,于是两块系统之间永远差 8 个小时。
最省事的解决办法:让 Ubuntu 也把硬件时钟当本地时间。执行:
sudo timedatectl set-local-rtc 1执行完重启一遍,两个系统的时间就一致了。这个命令在 16.04 之后的版本中都有效,属于双系统装机后的必配项。
4.4 双系统间的数据共享与开发环境优化
两个系统装归装好了,日常使用时你肯定会遇到两个系统里的数据怎么互通的问题。
最简单直接的方式是共享一个 NTFS 数据分区。Windows 原生的 NTFS 格式,Ubuntu 下开箱即支持读写,不需要额外软件。我的建议是,在两块硬盘之外,如果你还有第三块数据盘,把它格式化成 NTFS,Windows 里当 E 盘用,Ubuntu 里挂载到 /mnt/data,两边都能访问。如果没有第三块盘,也可以把 Windows 的数据分区直接挂载到 Linux:
sudo mount -t ntfs-3g /dev/sda3 /mnt/windata在 /etc/fstab 里加一行实现开机自动挂载,省得每次重启手动敲。
还要提醒一句:访问 Windows 分区里的文件时,不要去动系统文件(C 盘的 Windows 目录、Users 下的配置文件),只读取你自己的文档、下载、项目就好。跨系统修改系统文件,最容易把 Windows 弄崩。
开发环境的字体也顺手推荐一下。如果你用 Ubuntu 写代码,默认的 Ubuntu Mono 字体虽然清晰但总感觉少了点味道。想接近 macOS 那种优雅的代码字体体验,可以试试 JetBrains Mono 或者 Fira Code:
sudo apt install fonts-jetbrains-mono装完在编辑器(VS Code、JetBrains 家的 IDE 都支持)里把字体设置为 JetBrains Mono,连字效果和圆润度几乎就是 macOS 观感。这是我在 Windows 和 Ubuntu 双系统间切换开发时最满意的细节之一。
5. 常见问题与排查技巧实录
5.1 引导相关故障速查表
| 现象 | 原因 | 解决方案 |
|---|---|---|
| 开机直接进 Windows,没有 GRUB | BIOS 启动顺序仍是 Windows 硬盘优先 | 进 BIOS 将 Ubuntu 硬盘设为第一启动项 |
| GRUB 里没有 Windows 选项 | os-prober 未识别 | sudo update-grub 确认 os-prober 安装 |
| 进 Ubuntu 后 Windows 的盘看不到 | NTFS 分区未挂载或处于休眠状态 | 先正常重启进一次 Windows,关闭快速启动再试 |
| 装完 Ubuntu 后 Windows 引导丢失 | GRUB 安装位置或引导修复干扰 | 用 boot-repair 修复,或 Windows 安装盘启动修复引导 |
| 开机黑屏卡在竖线 | 显卡驱动问题或内核参数不对 | 在 GRUB 里按 e 修改启动参数,加 nomodeset 试试 |
5.2 Ubuntu 安装时无法识别 Windows
个别电脑装 Ubuntu 时,安装器看不到 Windows 的引导分区,或者 GRUB 无法探测到 Windows。这种情况常见于两块硬盘各自的 ESP 分区都处于激活状态,Windows 的 EFI 分区和 Ubuntu 的 EFI 分区互相干扰。
解决办法有两步。第一步,进 BIOS,把 CSM 模式关闭,只用 UEFI 模式启动。很多主板在 CSM 开启时,UEFI 的引导探测会有兼容性混乱。第二步,如果 UEFI 模式下还是认不到 Windows,直接在 Ubuntu 的 GRUB 菜单里手动增加一个链式引导条目。
在 /etc/grub.d/40_custom 文件末尾追加:
menuentry "Windows 10" { search --set=root --fs-uuid <Windows_EFI分区的UUID> chainloader /EFI/Microsoft/Boot/bootmgfw.efi }UUID 可以通过 sudo blkid 查到,找到那个 vfat 类型、label 通常是 ESP 或 SYSTEM 的分区即可。追加后执行 sudo update-grub,重启后 GRUB 菜单里就会出现 Windows 10 手动入口。
5.3 Windows 更新后 Ubuntu 启动项消失
这是单硬盘双系统最经典的惨剧,双硬盘方案虽然概率低,但也不是完全碰不到。Windows 大版本更新时,会把所有其他系统的引导信息从主板 NVRAM 里清掉,导致开机直接进 Windows,看不到 GRUB。
在双硬盘方案里修复思路很简单:进 BIOS 把 Ubuntu 的硬盘启动优先级拉回第一,如果 BIOS 里还能看到 Ubuntu 硬盘的引导项,一切照旧。如果 BIOS 里直接连 Ubuntu 硬盘都识别不到,用 Live USB 启动,进系统后执行两次命令:
sudo mount /dev/sdb2 /mnt sudo grub-install --boot-directory=/mnt/boot /dev/sdb sudo umount /mnt这里 /dev/sdb2 要替换成你 Ubuntu 根分区所在的实际分区号,/dev/sdb 替换成 Ubuntu 所在的实际硬盘。执行完重启,GRUB 就回来了。
5.4 关于双系统日常使用的一些建议
最后说几个我用过很久后总结出来的心得。
Windows 里关闭快速启动这个事,真的很重要,我前面已经提过一次,但值得再强调一遍。开快速启动时,Windows 关机其实不是完整关机,而是把系统内核会话写进休眠文件。此时 NTFS 分区处于"锁定"状态,Ubuntu 挂载这个分区时会直接报错,因为文件系统是脏状态。如果你不想关快速启动,那就每次在 Windows 里点"重启"而不是"关机"再切到 Ubuntu,也能绕开这个问题。
Windows 推送大更新之前,建议手动进 BIOS 临时把 Ubuntu 的硬盘设为第一启动,有时候 Windows 更新过程会触发一次重启,如果恰好从 GRUB 菜单进入了 Ubuntu,你可能还觉得一切都好,实际上系统更新并没有完成。这个情况我遇到过几次。
Ubuntu 的内核更新也是双系统出问题的来源之一。每次更新内核后,GRUB 会自动重新生成菜单,正常情况下没问题。但如果你反反复复更新内核、又经常手工改 grub.cfg,时间久了容易留下冗余的旧内核占用启动时间。可以用这个命令清理旧内核:
sudo apt autoremove它会自动移除不再使用的旧内核镜像,保持 /boot 目录干净。
对于打算用这台机器长期开发的用户,我强烈建议把 Ubuntu 的 /home 独立分区这件事认真考虑进去。以后系统升级、重装、折腾坏了想恢复到出厂状态,只要不动 /home,你的代码、配置、SSH 密钥、Docker 数据全都完好在原地。这是双系统时代最值钱的一条经验。
还有一个小细节,第一次进 Ubuntu 后,记得安装一下 ssh 服务,方便你用终端从别的设备连过来操作:
sudo apt install openssh-server万一 Ubuntu 界面卡死或者你想远程处理问题,SSH 是救命通道。
装双系统这件事,本质上是一次磁盘规划和引导理解的实战。只要你理解了 Windows 引导器和 GRUB 的差别、理解了磁盘分区和 EFI 分区的作用,绝大多数问题都能靠逻辑推出来。我实际操作中最深的体会是:不要图快跳过备份和分区规划,真正让你崩溃的往往不是装系统本身,而是装到一半发现该留的没留、该分的没分。你在这套双硬盘方案上多花半小时做规划,后续用一年都不会出幺蛾子。