☰
从Windows到WSL再到Ubuntu双系统:开发环境搭建与避坑指南
2026/10/13 20:55:24 网站建设 项目流程

1. 从单系统到多系统:一次认知刷新的起点

1.1 为什么会有这次折腾

事情的起因很简单。我日常主力机是一台Windows笔记本,平时写代码、跑脚本、做点小工具都靠它。但时间一长,问题就冒出来了:Windows下跑某些开发工具链总是差那么点意思,环境配置经常出幺蛾子,尤其是涉及包管理、权限模型、命令行工具的时候,总感觉隔了一层。最开始我的做法是装个虚拟机,但虚拟机吃资源、文件互传麻烦、性能损耗也肉眼可见,用久了实在难受。

后来听人说WSL(Windows Subsystem for Linux)可以解决这个问题,我抱着试试看的心态装了一个。用了一段时间之后,确实比虚拟机舒服很多,但用着用着又发现WSL也有它的边界——某些底层操作、内核模块、系统级调试,WSL还是力不从心。于是我又动了装Ubuntu双系统的念头。这一路从Windows到WSL再到Ubuntu双系统走下来,我对操作系统的理解被彻底刷新了一遍。这篇文章就是把这整个过程拆开揉碎讲清楚,包括每一步为什么这么做、怎么做、踩了哪些坑、最后怎么解决的。

如果你也是一个主要用Windows但需要Linux环境的开发者,或者你正在纠结到底该用WSL还是装双系统,那这篇内容应该能帮你省下不少试错时间。

1.2 三种方案的本质区别

在动手之前,先把三个东西的本质讲清楚,不然后面容易迷糊。

Windows是我们最熟悉的图形化操作系统,它的强项在于桌面生态、办公软件、游戏兼容性,以及硬件驱动的广泛支持。它的文件系统是NTFS,权限模型和Linux完全不同,命令行体系以PowerShell和CMD为主。

WSL是在Windows内核之上做了一层兼容层,让Linux的用户态程序可以直接在Windows上运行。注意,它不是一个完整的虚拟机,早期WSL 1是系统调用翻译,WSL 2则是跑了一个轻量级的虚拟机内核。WSL 2的好处是兼容性大幅提升,几乎可以跑绝大多数Linux程序,而且和Windows的文件系统可以互相访问。

Ubuntu双系统则是把Ubuntu直接装在硬盘的另一个分区上,和Windows平级共存。开机时通过引导程序选择进入哪个系统。这时候Ubuntu是真正跑在裸机上的完整操作系统,拥有自己的内核、驱动、文件系统,性能没有任何中间层损耗。

用一个生活化的类比:Windows是你自己家的客厅,WSL是在客厅里搭了一个隔间,隔间里按Linux的规矩布置,但水电还是从客厅接过来的;Ubuntu双系统则是在隔壁又买了一套房,完全独立,想住哪边就住哪边,但两边不能同时住。

理解了这一点,后面所有的取舍就都好解释了。

1.3 适用人群与场景判断

不是所有人都需要走到双系统这一步。我根据自己的经验给一个简单的判断标准:

使用场景推荐方案理由
偶尔用Linux命令、跑简单脚本WSL轻量、无需重启、文件互通
日常开发以Linux工具链为主WSL 2兼容性好、性能足够、体验流畅
需要内核模块、系统级调试Ubuntu双系统WSL无法触及底层
需要GPU直通、硬件级操作Ubuntu双系统裸机性能、驱动完整
学习操作系统原理Ubuntu双系统完整系统体验
只是好奇想看看Linux长啥样WSL成本最低的入门方式

这张表是我自己走完整个流程之后总结的,不一定适合所有人,但大方向应该没问题。接下来我按顺序把三个阶段都讲一遍。

2. WSL阶段:最省事的Linux入门方式

2.1 WSL的安装与初始化配置

WSL的安装现在比以前简单太多了。早期还需要手动开启Windows功能、下载内核更新包,现在一条命令基本搞定。以管理员身份打开PowerShell,执行:

wsl --install

这条命令会自动完成几件事:启用虚拟机平台功能、启用WSL功能、下载并安装最新的WSL内核、安装默认的Ubuntu发行版。执行完之后重启电脑,系统会提示你设置Linux用户名和密码。

这里有一个细节值得注意:默认安装的Ubuntu版本可能不是你想要的。可以先查看可用发行版列表:

wsl --list --online

然后指定安装某个版本:

wsl --install -d Ubuntu-22.04

安装完成后,建议第一时间做几件事。第一,更新软件源并升级已有包:

sudo apt update && sudo apt upgrade -y

第二,确认WSL版本是2而不是1:

wsl --list --verbose

如果显示VERSION为1,可以用以下命令转换:

wsl --set-version Ubuntu-22.04 2

WSL 2相比WSL 1在兼容性和性能上有质的提升,强烈建议用WSL 2。

注意:WSL 2底层依赖虚拟化功能,如果你的电脑BIOS里没有开启虚拟化支持(Intel VT-x或AMD-V),WSL 2无法运行。需要在BIOS中手动开启。

2.2 WSL的日常使用体验与边界

WSL用起来确实方便。文件系统互通是最大的亮点:在WSL里可以通过/mnt/c/访问Windows的C盘,在Windows里也可以通过\\wsl$\访问Linux的文件。这意味着你可以在Windows下用VS Code编辑代码,然后在WSL终端里直接运行,两边无缝衔接。

VS Code有一个Remote-WSL插件,装上之后可以直接在WSL环境里开发,终端、调试、插件全部跑在Linux侧,体验非常顺滑。我日常写Python和Node.js的活儿基本都在WSL里完成,没遇到过什么大问题。

但WSL的边界也很明显。第一,它没有自己独立的内核,虽然WSL 2跑了一个轻量级虚拟机,但内核是微软定制编译的,很多内核模块默认没有加载。第二,systemd的支持需要额外配置,早期版本默认不开启。第三,涉及硬件直通、USB设备挂载、网络底层配置的操作,WSL经常力不从心。第四,性能上虽然有提升,但文件IO在跨系统访问时仍然有明显的损耗,尤其是大量小文件读写的时候。

我印象最深的一次是尝试在WSL里跑一个需要特定内核模块的工具,折腾了半天发现根本加载不了,因为WSL的内核不支持。那一刻我就意识到,WSL再好用,它也不是一个完整的Linux系统。这也是我最终决定装双系统的直接原因。

2.3 WSL阶段的避坑经验

用WSL这段时间,我踩过的坑不算少,挑几个典型的说说。

第一个坑:文件路径混淆。在WSL里访问Windows文件用/mnt/c/,但如果你在Windows的C盘里直接操作WSL的文件,可能会遇到权限问题。WSL的文件系统用的是ext4格式,Windows本身不认识这个格式,是通过网络协议映射访问的。所以尽量不要在Windows侧直接修改WSL的文件,容易出问题。

第二个坑:换行符问题。Windows用CRLF,Linux用LF。在跨系统编辑文件的时候经常会出现换行符不一致导致脚本报错。解决办法是在WSL里配置git:

git config --global core.autocrlf input

或者在VS Code里设置默认换行符为LF。

第三个坑:内存占用。WSL 2默认会占用大量内存,因为它跑的是虚拟机。可以在用户目录下创建一个.wslconfig文件来限制:

[wsl2] memory=4GB processors=2 swap=2GB

这个文件放在Windows用户目录下,比如C:\Users\你的用户名\.wslconfig。改完之后执行wsl --shutdown重启WSL生效。

第四个坑:网络代理配置。如果你在公司内网环境,WSL的网络配置可能需要额外调整。WSL 2的网络是通过NAT和Windows主机通信的,某些情况下需要手动配置DNS或代理。这个具体问题具体分析,不展开说了。

3. Ubuntu双系统阶段:真正的裸机Linux体验

3.1 装双系统前的准备工作

决定装双系统之后,第一步不是急着下载镜像,而是做好准备工作。这一步做不好,后面可能把整个硬盘搞崩。

第一件事:备份数据。这是铁律。分区操作有风险,哪怕你觉得自己很小心,也可能出意外。重要文件全部备份到外部硬盘或云端。

第二件事:确认硬盘分区情况。在Windows下打开磁盘管理,看看当前硬盘有几个分区、剩余空间有多少。你需要从现有分区中压缩出一块未分配空间给Ubuntu用。一般来说,给Ubuntu分配50GB到100GB比较合适,如果你要跑大型项目或者存大量数据,可以再多给一些。

第三件事:确认启动模式。现代电脑基本都用UEFI启动,但有些老机器还是Legacy BIOS。这个信息很重要,因为它决定了后面分区方案的选择。在Windows下按Win + R输入msinfo32,查看“BIOS模式”这一项。如果是UEFI,后面分区时需要创建EFI系统分区;如果是Legacy,则需要创建/boot分区。

第四件事:关闭Windows的快速启动和BitLocker。快速启动会让Windows在关机时不完全释放硬盘,可能导致Ubuntu安装时无法识别分区。BitLocker加密则可能导致安装后无法访问Windows分区。在控制面板的电源选项里关闭快速启动,在BitLocker设置里暂停或关闭加密。

第五件事:下载Ubuntu镜像并制作启动U盘。去Ubuntu官网下载最新的LTS版本镜像,然后用Rufus或balenaEtcher写入U盘。U盘容量至少8GB。

注意:制作启动U盘会清空U盘上的所有数据,提前把U盘里的东西转移走。

3.2 分区方案的设计与实操

分区是双系统安装中最关键也最容易出问题的一步。我先讲清楚分区的逻辑,再给具体的操作方案。

Ubuntu在UEFI模式下通常需要以下几个分区:

分区挂载点建议大小文件系统说明
EFI系统分区/boot/efi512MBFAT32如果Windows已有EFI分区,直接复用
根分区/30-50GBext4系统和软件安装位置
交换分区swap内存大小的1-2倍swap休眠和内存不足时使用
家目录分区/home剩余空间ext4个人文件,重装系统时可保留

如果你的硬盘空间有限,可以简化成两个分区:EFI分区(复用Windows的)加上一个根分区(包含/home)。但分开/home的好处是以后重装系统时个人文件不会丢,我个人推荐分开。

具体操作流程:在Windows磁盘管理中压缩出一个未分配空间,然后重启从U盘启动,进入Ubuntu安装界面。选择“其他选项”进行手动分区,按照上面的表格逐个创建分区。注意EFI分区不要格式化,直接挂载到/boot/efi即可,否则可能影响Windows启动。

安装引导程序的位置选择整个硬盘的设备名(比如/dev/nvme0n1或/dev/sda),不要选到某个具体分区。

3.3 安装后的系统配置与优化

安装完成重启后,应该会看到GRUB引导菜单,可以选择进入Ubuntu或Windows。进入Ubuntu后,有几件事需要第一时间做。

更新系统:

sudo apt update && sudo apt upgrade -y

安装常用工具:

sudo apt install -y build-essential git curl wget vim htop net-tools

配置国内软件源(如果网络慢的话):编辑/etc/apt/sources.list,替换为国内镜像源地址。这个具体地址各高校和企业都有提供,选一个延迟低的就行。

安装显卡驱动:如果是NVIDIA显卡,建议通过“附加驱动”工具安装专有驱动,性能比开源驱动好很多。在终端执行:

sudo ubuntu-drivers autoinstall

配置中文输入法:Ubuntu默认的输入法框架是IBus,可以安装拼音输入法:

sudo apt install ibus-libpinyin

然后在设置里添加中文输入源。

调整GRUB引导顺序:如果默认启动项是Ubuntu但你更常用Windows,可以修改/etc/default/grub文件中的GRUB_DEFAULT值,然后执行sudo update-grub生效。

3.4 双系统使用中的常见问题

双系统用起来最大的问题就是切换麻烦——每次换系统都要重启。但除此之外,还有一些细节问题需要注意。

时间不同步问题:Windows和Linux对硬件时钟的解读方式不同,Windows认为硬件时钟是本地时间,Linux认为硬件时钟是UTC。这会导致切换系统后时间差8小时。解决办法是在Linux下执行:

timedatectl set-local-rtc 1 --adjust-system-clock

或者在Windows注册表中添加一个DWORD值,让Windows也把硬件时钟当作UTC。两种方法选一种即可。

磁盘空间不足:用久了可能会发现某个分区空间不够。如果当初/home是独立分区,扩容相对容易;如果所有东西都在根分区,扩容就比较麻烦。建议一开始就规划好空间。

Windows更新影响引导:偶尔Windows大版本更新会覆盖GRUB引导,导致开机直接进Windows。这时候需要用Ubuntu启动U盘修复GRUB,或者用Windows的bcdedit命令添加Ubuntu引导项。

NTFS分区挂载:在Ubuntu下访问Windows的NTFS分区需要安装ntfs-3g:

sudo apt install ntfs-3g

然后可以用mount命令手动挂载,或者配置/etc/fstab实现开机自动挂载。但注意,如果Windows处于快速启动或休眠状态,NTFS分区可能无法正常挂载,会提示“ unclean”状态。所以前面说的关闭快速启动很重要。

4. 三套环境的协同与取舍

4.1 什么场景用什么系统

走完这一整趟之后,我现在的工作流是这样的:

日常办公、写文档、看视频、打游戏——Windows。这个没什么好说的,桌面生态摆在那里。

写代码、跑脚本、做开发——优先WSL。因为不用重启,文件互通方便,VS Code的Remote-WSL体验也很好。大部分开发任务WSL都能胜任。

需要底层操作、内核调试、硬件相关——Ubuntu双系统。比如编译内核模块、做网络实验、跑需要特定驱动的程序。

学习操作系统、做系统级实验——Ubuntu双系统。WSL虽然方便,但它毕竟是一个兼容层,很多系统行为被抽象掉了,不利于理解真正的操作系统原理。

这个分工不是一成不变的,随着你对每个系统的熟悉程度提高,自然会找到最适合自己的组合方式。

4.2 数据同步与文件管理

三套环境之间的数据同步是一个实际问题。我的做法是:

代码和项目文件放在Git仓库里,通过远程仓库同步。这样不管在哪个系统里,clone下来就能用。

个人文档和资料放在Windows的NTFS分区上,WSL和Ubuntu都通过挂载访问。这样数据只有一份,不会出现版本混乱。

配置文件(比如.bashrc、.gitconfig、VS Code的settings.json)用Git管理,每个系统里clone一份,通过符号链接放到对应位置。

需要跨系统共享的临时文件放在一个专门的共享目录里,三个系统都能访问。

这套方案不一定最优,但对我来说够用了。核心原则就是:数据只有一份权威来源,其他都是访问入口。

4.3 性能对比与实测感受

我在这三套环境里分别跑了一些常见的开发任务,简单说一下感受。

编译一个中等规模的C++项目,Ubuntu双系统最快,WSL 2次之,差距大概在10%-20%左右。WSL 2的性能损耗主要来自文件IO和虚拟化层。

跑Python数据处理脚本,WSL 2和Ubuntu的差距很小,基本感觉不出来。因为Python本身是解释型语言,计算密集型的部分通常由底层库(NumPy等)处理,这些库在WSL里也能正常调用。

文件读写方面,WSL访问Windows文件(/mnt/c/)的速度明显慢于访问Linux原生文件系统。所以如果项目文件很多,建议放在WSL的Linux文件系统里,而不是Windows分区上。

GPU相关任务,Ubuntu双系统优势明显。WSL 2虽然支持GPU直通,但配置起来比较麻烦,而且性能有损耗。如果你要做深度学习训练,双系统是更好的选择。

4.4 我个人的选择建议

如果你还在纠结要不要装双系统,我的建议是:先用WSL,用一段时间之后如果发现确实有WSL搞不定的需求,再考虑双系统。不要一上来就装双系统,因为分区操作有风险,而且双系统切换确实麻烦。

WSL已经能满足80%以上的日常开发需求。剩下20%的需求,如果你不是经常遇到,那可能不值得为此装双系统。但如果你确实经常需要底层操作,那双系统带来的体验提升是值得的。

另外,如果你的电脑硬盘够大(比如1TB以上),装双系统的心理负担会小很多,因为不用太担心空间不够。如果硬盘只有256GB,那就要慎重考虑了,分完区之后两边都可能捉襟见肘。

5. 常见问题与排查技巧实录

5.1 安装阶段的高频问题

问题一:U盘启动后看不到Ubuntu安装选项。

这个通常是因为UEFI安全启动(Secure Boot)没有关闭。进入BIOS设置,找到Secure Boot选项,设为Disabled。有些品牌电脑还需要设置一个管理员密码才能修改这个选项。

问题二:安装程序找不到硬盘。

可能是硬盘模式设置问题。有些电脑默认用RAID模式,Ubuntu安装程序识别不了。需要在BIOS里把硬盘模式改成AHCI。注意,改这个设置可能导致Windows无法启动,需要先在Windows下用安全模式切换驱动,或者用命令bcdedit /set safeboot minimal进入安全模式后再改。

问题三:分区时提示“没有定义根文件系统”。

这是因为没有正确设置挂载点。在手动分区界面,每个分区都要指定挂载点。根分区挂载到/,EFI分区挂载到/boot/efi,swap分区不用设挂载点。

问题四:安装完成后重启直接进Windows,没有GRUB菜单。

可能是引导程序安装位置不对,或者Windows的快速启动干扰了。检查BIOS的启动顺序,确保Ubuntu所在硬盘排在前面。如果还是不行,用Ubuntu启动U盘进入Live环境,用boot-repair工具修复引导。

5.2 使用阶段的典型故障

故障一:WSL启动报错“参考的对象类型不支持尝试的操作”。

这个通常是网络配置问题,可能和某些网络工具冲突。可以尝试重置WSL网络:

wsl --shutdown netsh winsock reset netsh int ip reset

然后重启电脑。

故障二:Ubuntu下无法挂载NTFS分区,提示“The disk contains an unclean file system”。

这是因为Windows没有正常关机(快速启动或休眠导致的)。解决办法是在Windows下执行一次完整关机(按住Shift再点关机),或者用ntfsfix命令修复:

sudo ntfsfix /dev/sdXn

其中/dev/sdXn是具体的分区设备名。

故障三:双系统切换后时间不对。

前面已经讲过,用timedatectl set-local-rtc 1解决。

故障四:GRUB菜单消失,开机直接进Windows。

Windows更新有时会覆盖引导记录。用Ubuntu启动U盘进入Live环境,执行:

sudo mount /dev/sdXn /mnt sudo grub-install --root-directory=/mnt /dev/sdX sudo update-grub

其中/dev/sdXn是根分区,/dev/sdX是硬盘设备名。

5.3 独家避坑技巧汇总

最后整理几条我自己踩坑之后总结出来的经验,都是文档里不会写的:

技巧一:装双系统之前,先用虚拟机模拟一遍。在VirtualBox或VMware里走一遍安装流程,熟悉每个步骤,这样在真机上操作时心里有底。虚拟机里搞砸了删掉重来就行,真机上搞砸了可能数据就没了。

技巧二:分区时多留一点空间给EFI分区。虽然512MB够用,但如果你以后可能装多个Linux发行版,建议给1GB。EFI分区太小的话,以后添加引导项可能会失败。

技巧三:WSL的.wslconfig文件可以动态调整。改完配置后不需要重启电脑,执行wsl --shutdown再重新打开WSL就生效了。这个技巧在内存紧张的时候特别有用。

技巧四:Ubuntu下用timeshift做系统快照。这个工具可以像Windows的系统还原一样,在出问题的时候快速回滚。装好系统后第一时间配置好,以后折腾出问题了一键恢复。

技巧五:保留一个Ubuntu启动U盘。不要装完系统就把U盘格式化掉。以后遇到引导问题、系统崩溃,这个U盘就是救命稻草。我习惯把常用工具和配置脚本也放在U盘里,随时可用。

技巧六:WSL和Ubuntu的配置文件用Git管理。把.bashrc、.vimrc、.gitconfig这些文件放在一个Git仓库里,每个环境clone一份,通过符号链接使用。这样换系统或者重装的时候,配置一键恢复,不用重新折腾。

技巧七:双系统的硬盘分区表做好记录。把分区方案(哪个分区多大、什么文件系统、挂载点是什么)记在一个文本文件里,存在手机或云端。以后需要调整分区的时候,不用凭记忆去猜。

技巧八:Windows的BitLocker一定要提前处理。如果Windows开启了BitLocker,装完Ubuntu后可能无法访问Windows分区,甚至可能导致Windows无法启动。装之前一定要暂停或关闭BitLocker,装完之后再重新开启。

技巧九:WSL里不要跑需要长时间运行的重负载任务。WSL 2虽然性能不错,但毕竟是虚拟机,长时间高负载运行可能导致内存泄漏或性能下降。重负载任务建议放到Ubuntu双系统里跑。

技巧十:学会看日志。不管是WSL还是Ubuntu,出问题的时候第一件事是看日志。WSL的日志可以用dmesg查看,Ubuntu的系统日志在/var/log/目录下。大部分问题的原因都能在日志里找到线索。

这一路从Windows到WSL再到Ubuntu双系统走下来,最大的收获不是学会了装系统,而是对操作系统本身的理解上了一个台阶。以前觉得操作系统就是一个黑盒,现在至少知道里面大概是怎么回事了。如果你也在考虑类似的事情,希望这篇内容能帮你少走点弯路。有什么问题欢迎交流,我尽量回复。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询