单台物理机双系统(Windows + Ubuntu)是运维、开发测试甚至个人极客非常经典的需求。作为在云计算和服务器领域摸爬滚打多年的人,我见过太多因为分区不当导致数据丢失或引导崩溃的案例。
这里的核心逻辑只有一条:先装 Windows,后装 Linux。这是由两者的引导机制决定的,后面我会详细解释为什么。
以下是基于生产环境稳定性和数据安全性的实操指南,分为规划、安装、修复三个核心阶段。
一、 核心原则与前置准备
- 顺序铁律:必须先在 BIOS/UEFI 中设置为 UEFI 模式(现在绝大多数新硬件默认如此),然后先安装 Windows,最后安装 Ubuntu。
- 原因:Windows 安装程序会强制覆盖 EFI 分区,并接管 GRUB 引导管理器。如果先装 Ubuntu,Windows 安装完后会把 GRUB 冲掉,导致你无法直接启动 Ubuntu,需要手动修复引导。
- 磁盘类型:强烈建议使用 NVMe SSD。机械硬盘的双系统体验极差,且容易因读写冲突导致卡顿。
- 数据备份:操作前,务必将重要数据备份到外部存储或云端。分区操作本质上是“删减”原有空间,一旦失误,数据恢复成本极高。
- 关闭快速启动:在 Windows 中,进入“控制面板” -> “电源选项” -> “选择电源按钮的功能” -> “更改当前不可用的设置”,取消勾选“启用快速启动”。
- 原因:快速启动会让 Windows 休眠而非彻底关机,这会导致 Linux 挂载 NTFS 分区时只能以只读方式访问,甚至损坏文件系统。
二、 分区策略规划(关键步骤)
假设你有一块 1TB 的 NVMe SSD,建议采用以下分区结构。注意,现代 UEFI 主板通常有一个小的 FAT32 EFI 分区,不要动它,让两个系统共用。
| 分区 | 大小 | 格式 | 用途 | 说明 |
|---|---|---|---|---|
| ESP (EFI System Partition) | 512MB – 1GB | FAT32 | 引导文件 | Windows 安装时会自动创建,Ubuntu 安装时会复用此分区,写入自己的引导文件。切勿格式化或删除。 |
| Windows 系统盘 (C:) | 100GB – 200GB | NTFS | Windows OS | 留给 Windows 系统和常用软件。建议至少 100GB,否则后期更新和缓存会爆满。 |
| Windows 数据盘 (D:) | 剩余空间的大部分 | NTFS | 数据存储 | 存放文档、视频、代码仓库等。这个分区对两个系统都友好,Linux 可以通过 ntfs-3g 轻松读写。 |
| Ubuntu Root (/) | 50GB – 100GB | ext4 | Linux 系统 | 根目录,存放 Linux 系统文件。 |
| Ubuntu Home (/home) | 剩余空间 | ext4 | 用户数据 | 存放 Linux 下的个人文件、配置、Docker 容器数据等。独立出来方便重装 Linux 时保留数据。 |
| Swap (交换空间) | 8GB – 16GB | swap | 虚拟内存 | 如果内存 >= 16GB,可设 8GB;如果内存较小,建议设为物理内存的 1.5-2 倍。或者直接使用 Swap File(文件交换),更灵活。 |
重点提示:
- 不要使用 LVM:对于新手或单一物理机的双系统,标准分区比 LVM 更直观,出错概率更低。
- 预留空间:在安装 Windows 时,不要一次性把整个磁盘分完。建议在安装 Windows 后,从 C 盘或 D 盘中压缩卷出未分配空间,用于后续安装 Ubuntu。
三、 安装步骤详解
第一阶段:安装 Windows
- 制作 Windows 安装 U 盘(官方媒体创建工具)。
- 插入 U 盘,重启电脑,进入 BIOS 设置 U 盘启动。
- 进入安装界面后,选择“自定义:仅安装 Windows”。
- 关键操作:
- 你会看到磁盘 0 的几个分区。
- 删除所有分区,直到只剩下一个“未分配的空间”。
- 点击“下一步”,Windows 会自动创建必要的引导分区(ESP)和主分区。
- 注意:此时不要尝试手动划分 Ubuntu 的空间,让 Windows 占它该占的份额即可。如果 Windows 自动划分了过多空间,可以在 Windows 内部使用“磁盘管理”工具进行“压缩卷”,释放出足够的未分配空间给 Linux。
第二阶段:安装 Ubuntu
- 制作 Ubuntu Live USB(推荐使用 Rufus 或 Etcher,写入模式选 DD 模式兼容性更好)。
- 插入 U 盘,重启,进入 BIOS 设置 U 盘启动。
- 进入 Ubuntu 安装界面,选择“Try or Install Ubuntu”。
- 连接网络(可选,但建议连接以便下载更新)。
- 选择“Install Ubuntu”。
- 键盘布局:按默认或偏好设置。
- 安装类型:选择“Something else”(高级选项/其他选项)。不要选“Erase disk and install Ubuntu”,否则会清空 Windows!
- 手动分区:
- 找到你的 NVMe 磁盘(通常是
/dev/nvme0n1)。 - ESP 分区:找到之前 Windows 创建的 FAT32 分区(约 100-500MB),标记为“EFI System Partition”,不格式化,挂载点留空。
- 新建 Ext4 分区:在未分配空间中,创建一个 50-100GB 的 ext4 分区,挂载点
/,用于系统。 - 新建 Ext4 分区:再创建一个较大的 ext4 分区,挂载点
/home,用于用户数据。 - 新建 Swap 分区:创建 8-16GB 的 swap 区域,用途选择“swap”。
- 设备引导加载器:确保下拉菜单中选择的是 ESP 分区所在的磁盘(如
/dev/nvme0n1),而不是某个具体分区。GRUB 会自动识别现有的 Windows 引导项并追加进去。
- 找到你的 NVMe 磁盘(通常是
- 点击“现在安装”,确认分区表变更。
- 设置用户名、密码、时区等,等待安装完成。
四、 引导修复与优化(避坑指南)
虽然按照上述步骤操作,大多数情况下 GRUB 能正确识别 Windows Boot Manager,但偶尔会出现问题。
情况 1:开机只有 Ubuntu,没有 Windows 选项
这是因为 GRUB 配置文件没包含 Windows 条目。
- 解决方法:
- 进入 Ubuntu 系统。
- 打开终端,安装
os-prober(新版 Ubuntu 可能默认禁用,需手动启用):sudo apt update sudo apt install os-prober - 修改 GRUB 配置允许检测其他系统:
sudo nano /etc/default/grub添加一行:
GRUB_DISABLE_OS_PROBER=false - 更新 GRUB:
sudo update-grub - 重启,应该就能看到 Windows Boot Manager 了。
情况 2:Windows 更新后,Ubuntu 进不去
Windows 大版本更新有时会重置 EFI 分区权限或覆盖引导记录。
- 解决方法:
- 使用 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”(推荐修复),按照提示操作即可。
五、 跨系统共享数据的最佳实践
很多用户希望 Windows 下也能访问 Ubuntu 的文件,或者反过来。
-
Windows 访问 Ubuntu 文件:
- 原生不支持。Windows 内核无法直接读取 ext4 文件系统。
- 解决方案:
- 方案 A(推荐):使用 WSL2。在 Windows 上安装 WSL2,可以直接通过
\wsl$路径访问 Linux 文件系统,性能极佳,无缝集成。 - 方案 B:使用第三方驱动(如 Paragon ExtFS for Windows),但存在稳定性风险,不推荐用于生产环境。
- 方案 C:在 Ubuntu 中搭建 Samba/NFS 服务,Windows 通过网络访问。适合大文件传输。
- 方案 A(推荐):使用 WSL2。在 Windows 上安装 WSL2,可以直接通过
-
Ubuntu 访问 Windows 文件:
- 原生支持。Linux 内核自带
ntfs-3g驱动。 - 操作方法:
- 安装必要包:
sudo apt install ntfs-3g - 查看 Windows 分区 UUID:
lsblk -f或sudo blkid - 创建挂载点:
sudo mkdir /mnt/windows_data - 编辑 fstab 实现开机自动挂载:
sudo nano /etc/fstab添加行:
UUID=你的Windows分区UUID /mnt/windows_data ntfs-3g defaults,uid=1000,gid=1000,windows_names 0 0uid/gid替换为你的 Ubuntu 用户 ID(用id命令查看)。windows_names参数确保文件名兼容 Windows 规则。
- 安装必要包:
- 注意:务必确保 Windows 已关闭“快速启动”,否则 Linux 挂载 NTFS 分区时会报错或只读。
- 原生支持。Linux 内核自带
六、 总结与建议
- 对于开发者:强烈建议直接在 Windows 上使用 WSL2 运行 Ubuntu 环境,而不是双系统。WSL2 提供了接近原生的 Linux 内核体验,资源占用更少,切换更便捷,且避免了分区管理的麻烦。只有在需要完整图形界面、GPU 直通或特定内核模块调试时,才考虑真正的双系统。
- 对于运维/测试:如果必须双系统,请严格遵守“先 Win 后 Liunx”、“关闭快速启动”、“独立 Home 分区”这三条原则。
- 关于云服务器:如果你是在阿里云、腾讯云等厂商的 ECS/CVM 上操作,请注意:云服务器的系统盘通常是整块映射的镜像,不支持本地双系统。云环境下的多系统需求,应通过虚拟机(KVM/QEMU)或容器(Docker/K8s)来实现,这才是云原生思维。
希望这份指南能帮你顺利搞定双系统。如果有具体的报错信息,欢迎继续提问。
云技术博客