☰
从Windows到WSL再到Ubuntu双系统:操作系统认知刷新与开发环境选型
2026/10/28 17:27:09 网站建设 项目流程

1. 从Windows到WSL再到Ubuntu双系统:一次操作系统认知的刷新

1.1 为什么我要折腾这三套系统

最开始我的主力环境就是一台Windows笔记本,日常写代码、跑脚本、做点小项目,凑合能用。但时间一长,问题就冒出来了:Windows下装Python环境,路径里带空格、带中文,pip装包偶尔报错;想跑个Docker,得先装Docker Desktop,吃内存不说,WSL2后端还时不时抽风;更别提有些开源工具链天生就是给Linux写的,在Windows上编译各种缺库。我相信很多人跟我一样,第一次听说WSL的时候觉得“这不就是Windows里塞了个Linux吗,能有多好用”,结果用了一段时间发现,WSL确实方便,但它和真正的Ubuntu双系统之间,差距比想象中大得多。

这篇文章我想把从Windows原生环境,到WSL,再到Ubuntu双系统这条路径完整讲一遍。不是那种“三步安装教程”,而是把每一步背后的取舍、踩过的坑、以及最终为什么我选择保留双系统而不是只用WSL,都说清楚。如果你也在纠结“我到底该用WSL还是装双系统”,或者你刚买了一台二手笔记本想折腾Linux,这篇内容应该能帮你少走弯路。

核心关键词就几个:Windows、WSL、Ubuntu、双系统、操作系统。我会围绕这五个词,把认知刷新过程拆开讲。

1.2 三套环境到底解决什么问题

先把定位说清楚,不然后面容易混。

Windows原生环境:办公、娱乐、日常沟通的主场。Office套件、微信、各类桌面软件,这些在Linux上要么没有,要么替代品体验差一截。所以Windows不能丢,这是基本盘。

WSL:Windows Subsystem for Linux,本质是在Windows内核之上跑了一个轻量级虚拟机,里面跑真正的Linux内核。它的优势是启动快、和Windows文件系统互通、能直接在VS Code里连进去写代码。适合什么场景?跑命令行工具、Python脚本、轻量级服务、Git操作,这些它都能胜任。

Ubuntu双系统:真正的独立Linux环境,独占硬件资源,显卡驱动、CUDA、Docker、系统级调试,全部原生支持。缺点是切换系统要重启,Windows和Ubuntu之间的文件互访需要额外配置。

我一开始的想法很简单:WSL够用就行,何必折腾双系统。但后来跑一个需要GPU加速的模型训练任务时,WSL下的CUDA支持虽然能用,但显存管理和性能损耗始终让我不放心。再加上有些底层调试工具在WSL里行为异常,我才下定决心装双系统。

提示:如果你只是写写Python脚本、做做Web开发,WSL大概率够用。但如果你涉及GPU计算、系统编程、驱动调试,双系统的价值会立刻体现出来。

2. WSL的安装与日常使用:比想象中简单,但细节不少

2.1 WSL2的安装步骤与版本选择

WSL现在有WSL1和WSL2两个版本。WSL1是翻译层,系统调用转译,兼容性好但性能差;WSL2是真正的虚拟机方案,性能接近原生,但跨系统文件访问会慢一些。现在默认推荐WSL2,除非你有特殊兼容需求。

安装命令很简单,以管理员身份打开PowerShell:

wsl --install

这条命令会帮你启用虚拟机平台、安装WSL2内核、下载Ubuntu默认发行版。装完之后重启,系统会让你设置Linux用户名和密码。

如果你想指定安装某个发行版,比如Ubuntu 24.04:

wsl --install -d Ubuntu-24.04

查看已安装的发行版:

wsl --list --verbose

这里有个细节:WSL默认把发行版装在C盘,时间长了C盘会被吃掉几十个G。我建议尽早迁移到其他盘。迁移方法后面会讲。

2.2 WSL路径迁移与磁盘管理

C盘空间紧张是很多人遇到的问题。WSL的虚拟磁盘文件默认在:

C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited...\LocalState\ext4.vhdx

迁移步骤分三步:导出、注销、导入。

wsl --export Ubuntu-24.04 D:\wsl\ubuntu-backup.tar wsl --unregister Ubuntu-24.04 wsl --import Ubuntu-24.04 D:\wsl\Ubuntu-24.04 D:\wsl\ubuntu-backup.tar --version 2

导入之后默认用户会变成root,需要改回来。在WSL里执行:

ubuntu2404 config --default-user 你的用户名

注意:导出文件可能很大,确保目标盘有足够空间。导入完成后原来的tar文件可以删掉,但建议保留一份备份。

2.3 WSL日常使用中的几个关键配置

中文输入法:WSL本身是命令行环境,不需要图形界面输入法。但如果你在WSL里跑GUI程序(通过WSLg),中文输入法需要在Windows侧配置好,WSLg会继承部分输入法支持。实测下来,微软拼音在WSLg里基本可用,但切换偶尔不灵敏。

VS Code连接WSL:装一个Remote - WSL扩展,然后在WSL终端里输入code .,VS Code会自动连进来。这个体验非常顺滑,几乎感觉不到是在跨系统操作。

CUDA支持:WSL2支持CUDA,但需要Windows侧装好NVIDIA驱动,WSL里不要再装驱动,只装CUDA Toolkit即可。装完之后nvidia-smi能正常输出。

sudo apt update sudo apt install nvidia-cuda-toolkit

binwalk等工具:WSL里用binwalk做固件分析完全没问题,安装方式和普通Ubuntu一样:

sudo apt install binwalk

2.4 WSL的局限性:什么时候该考虑双系统

WSL用了大半年,整体满意,但有几个场景让我最终决定装双系统:

第一,GPU性能损耗。WSL2的GPU直通虽然能用,但在跑大规模训练时,显存回收和CUDA上下文切换有明显开销。同样的模型,双系统下训练速度快了大概8%到12%。

第二,系统级调试。有些工具需要直接访问硬件、修改内核参数、加载自定义模块,WSL里做不了。

第三,Docker性能。WSL2下的Docker虽然方便,但文件I/O性能在跨系统挂载时下降明显。双系统下Docker直接用overlay2存储驱动,速度快很多。

第四,稳定性。WSL偶尔会遇到网络配置异常、内存占用不释放的问题,重启WSL能解决,但频繁遇到也烦。

所以我的结论是:WSL适合日常开发,双系统适合重负载和专业场景。两者不冲突,可以共存。

3. Ubuntu双系统安装:从分区到引导的完整实操

3.1 安装前的准备工作

装双系统最怕的就是把Windows搞没了。所以第一步永远是备份。重要数据备份到移动硬盘或云盘,Windows的恢复分区也建议用工具备份一份。

然后准备一个Ubuntu启动U盘。去Ubuntu官网下载镜像,推荐24.04 LTS或22.04 LTS。用Rufus或balenaEtcher写入U盘,注意分区类型选GPT,目标系统选UEFI。

# 验证下载的镜像完整性 sha256sum ubuntu-24.04-desktop-amd64.iso

对比官网公布的SHA256值,确保镜像没损坏。

接下来在Windows里腾出空间。打开磁盘管理,找一个空间充裕的分区,压缩出至少80GB给Ubuntu。我建议120GB以上,因为后面装CUDA、Docker、各种工具链,空间消耗很快。

注意:压缩分区前先做磁盘碎片整理(如果是机械硬盘),SSD不需要。压缩过程中不要强制中断。

3.2 BIOS设置与启动顺序调整

重启电脑,进入BIOS。不同品牌按键不同,联想一般是F2或Fn+F2,戴尔是F2,惠普是F10。进去之后做三件事:

第一,关闭Secure Boot。Ubuntu虽然支持Secure Boot,但装第三方驱动(比如NVIDIA)时会麻烦,建议先关掉。

第二,确认启动模式是UEFI,不是Legacy。

第三,把U盘调到启动顺序第一位。

保存退出,从U盘启动,进入Ubuntu安装界面。

3.3 分区方案与安装类型选择

这是最关键的一步。安装类型选“其他选项”,手动分区。不要选“与Windows共存”,那个自动分区方案有时候会把引导搞乱。

手动分区方案(假设腾出了120GB未分配空间):

挂载点大小类型说明
/boot/efi512MBEFI系统分区如果已有Windows的EFI分区,直接复用,不要新建
/40GBext4系统根目录
/home60GBext4用户数据
swap16GBswap交换分区,内存的1到2倍
/opt剩余空间ext4可选,放大型软件

如果Windows已经有EFI分区(通常200MB到500MB),直接挂载到/boot/efi,不要格式化。这一点非常重要,格式化会导致Windows无法启动。

安装引导器的位置选整个磁盘,比如/dev/nvme0n1,不要选某个分区。

3.4 安装后的引导修复与系统切换

安装完成后重启,正常情况下会出现GRUB菜单,让你选Ubuntu还是Windows。如果直接进了Windows,说明GRUB没装上或者引导顺序不对。

修复方法:用Ubuntu启动U盘进入Live环境,执行:

sudo apt install boot-repair sudo boot-repair

选“推荐修复”,它会自动检测并修复GRUB。

如果GRUB菜单里没有Windows选项,在Ubuntu里执行:

sudo update-grub

这个命令会扫描所有磁盘上的操作系统,把Windows加到菜单里。

切换系统就是重启,在GRUB菜单里选。默认等待10秒,可以修改/etc/default/grub里的GRUB_TIMEOUT来调整。

4. 双系统下的开发环境搭建:从驱动到工具链

4.1 显卡驱动与CUDA环境配置

Ubuntu下装NVIDIA驱动,最省事的方式是用系统自带的“附加驱动”工具。打开“软件和更新”,切到“附加驱动”标签,选最新的专有驱动,应用更改。

命令行方式:

ubuntu-drivers devices sudo ubuntu-drivers autoinstall

装完重启,nvidia-smi能输出就说明驱动正常。

CUDA Toolkit建议从NVIDIA官网下载runfile安装,或者用apt装:

sudo apt install nvidia-cuda-toolkit

但apt版本的CUDA通常比较旧。如果要装最新版,去官网下载对应Ubuntu版本的runfile,安装时注意不要勾选驱动,因为驱动已经装过了。

cuDNN需要注册NVIDIA开发者账号下载,解压后拷贝到CUDA目录:

sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include sudo cp cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

4.2 中文输入法与常用软件安装

Ubuntu中文输入法推荐Fcitx5加Rime方案,或者直接用搜狗输入法Linux版。Fcitx5配置稍微复杂但更稳定:

sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3

然后在“语言支持”里把键盘输入法系统改成Fcitx5,重启后配置。

常用软件:VS Code、Chrome、Docker、Git、Python环境,这些都有官方deb包或apt源。Docker安装:

sudo apt install docker.io sudo systemctl enable docker sudo usermod -aG docker $USER

最后一条命令把当前用户加入docker组,避免每次都要sudo。

4.3 Windows与Ubuntu文件互访

双系统下访问Windows文件,Ubuntu可以挂载NTFS分区。先查看分区:

lsblk -f

找到Windows分区,比如/dev/nvme0n1p3,然后挂载:

sudo mkdir /mnt/windows sudo mount /dev/nvme0n1p3 /mnt/windows

开机自动挂载需要改/etc/fstab,加上:

/dev/nvme0n1p3 /mnt/windows ntfs-3g defaults,uid=1000,gid=1000 0 0

Windows访问Ubuntu分区比较麻烦,需要第三方工具,比如Ext2Fsd或DiskGenius。但我不建议在Windows下写Linux分区,容易出问题。需要传文件就用U盘或者网络共享。

4.4 常见问题排查速查表

问题可能原因解决方法
开机直接进Windows,没有GRUB引导顺序不对BIOS里把Ubuntu调到第一位,或用boot-repair修复
GRUB里没有Windows选项os-prober未启用在/etc/default/grub加GRUB_DISABLE_OS_PROBER=false,然后update-grub
Ubuntu下无法识别无线网卡驱动缺失用有线网连上,装对应驱动,或换内核版本
NVIDIA驱动装完黑屏驱动冲突进恢复模式卸载驱动,重装
时间不对Windows和Ubuntu时间标准不同Ubuntu执行timedatectl set-local-rtc 1
WSL里CUDA不可用Windows驱动版本太旧更新Windows侧NVIDIA驱动

提示:装双系统前一定要确认Windows的BitLocker已关闭,否则分区操作可能导致数据锁死。

5. 操作系统认知的刷新:我到底学到了什么

5.1 从“用系统”到“理解系统”

以前我用Windows就是点点点,装软件、写代码,从来没想过操作系统底层在干什么。折腾WSL和双系统的过程,逼着我去了解分区表、引导流程、文件系统、驱动模型这些东西。

比如GRUB的工作原理:它先加载一个小的引导程序,然后读取配置文件,显示菜单,最后把控制权交给内核。这个过程以前我完全无感,现在至少知道出问题了该看哪里。

再比如WSL2的网络模型:它其实是一个NAT网络,Windows和WSL之间通过虚拟网卡通信。理解了这一点,就能解释为什么WSL里的服务有时候Windows访问不到,需要端口转发。

5.2 工具选型的思考框架

经过这一轮折腾,我总结了一个简单的选型框架:

  • 日常办公、沟通、娱乐:Windows原生
  • 命令行开发、脚本、轻量服务:WSL
  • GPU计算、系统调试、重负载服务:Ubuntu双系统

这个框架不是绝对的,但能帮我在不同场景下快速决定用哪个环境。关键是不要为了折腾而折腾,工具是拿来用的,不是拿来供的。

5.3 给后来者的几条实用建议

第一,先试WSL,再考虑双系统。WSL的安装成本极低,用一周就知道自己需不需要更重的方案。

第二,装双系统前一定备份。我见过太多人分区操作失误导致数据丢失的案例,备份花不了多少时间,但能救命。

第三,不要频繁重装系统。每次重装都要重新配环境,时间成本很高。装之前想清楚分区方案,一次到位。

第四,保留Windows的恢复分区。有些品牌机有专门的恢复分区,删了之后想恢复出厂设置就麻烦了。

第五,学会看日志。Ubuntu下dmesg、journalctl、/var/log/里的信息能解决大部分问题,比到处搜教程快得多。

最后再分享一个小技巧:如果你在WSL里跑Docker,把项目文件放在WSL的文件系统里(比如~/projects),不要放在/mnt/c/下,性能差距非常明显。我实测同一个项目,WSL原生路径下构建镜像比跨系统挂载快了三倍以上。这个细节很多教程不会提,但实际用起来感受很直接。

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

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

立即咨询