ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从WSL到Ubuntu双系统:开发环境搭建与优化实战

从WSL到Ubuntu双系统:开发环境搭建与优化实战 1. 从一台卡顿的笔记本说起为什么我要折腾三种系统环境去年年底我那台用了四年的笔记本开始频繁出现编译卡顿、Docker 启动缓慢的问题。当时我的主力开发环境是 Windows 10日常写 Python 和 Node.js 项目偶尔需要跑一些 Linux 专属的工具链。最开始我的解决方案很粗暴——装个虚拟机凑合用结果每次打开 VirtualBox 都要等两三分钟编译一个中等规模的 C 项目要十几分钟风扇狂转电池续航直接腰斩。后来我开始认真思考一个问题我到底需要什么样的操作系统环境这个问题听起来很基础但真正想清楚的人不多。Windows 的图形界面和办公生态确实舒服Linux 的命令行工具链和包管理机制对开发者又极其友好而 WSL 恰好卡在中间——它让你在 Windows 里直接跑一个近乎原生的 Linux 内核不用重启、不用虚拟机、文件系统还能互通。这篇文章不是一篇“教科书式”的安装教程而是把我从 Windows 单系统到 WSL 日常使用再到最终装上 Ubuntu 双系统的完整认知变化和实操过程记录下来。如果你也在纠结“要不要装双系统”“WSL 够不够用”“Ubuntu 中文输入法怎么搞”这些问题那这篇内容应该能帮你少走不少弯路。我会把每一步的决策逻辑、踩过的坑、以及最终稳定下来的配置方案都讲清楚不管你是刚接触 Linux 的新手还是已经用过一段时间但想重新梳理环境的老手都能从中找到可以直接抄作业的部分。2. WSL 到底解决了什么问题又在哪里卡住了我2.1 WSL 的本质不是虚拟机是翻译层很多人第一次听到 WSL 会以为它是个轻量级虚拟机其实不是。WSL 2 的核心架构是微软在 Windows 内核里内置了一个真正的 Linux 内核通过 Hyper-V 的轻量级虚拟化技术运行然后通过一套系统调用翻译层让 Linux 的 ELF 二进制文件能直接在 Windows 上执行。你可以把它理解成Windows 给 Linux 开了一扇后门Linux 程序以为自己跑在原生环境里实际上底下是 Windows 在托底。这个设计带来的好处非常直接启动速度极快基本秒开不像虚拟机要等系统引导文件系统互通Windows 的 C 盘可以直接在 WSL 里通过/mnt/c访问资源占用低不需要给虚拟机单独分配固定内存支持 GPU 直通跑 CUDA 和 PyTorch 训练完全可行我最初用 WSL 就是为了跑一个 Python 的数据处理脚本Windows 下装 numpy 和 pandas 总是遇到编译问题而在 WSL 里一句sudo apt install python3-numpy python3-pandas就搞定了。那种顺畅感让我一度觉得“WSL 就是终极方案”。2.2 那些让我最终决定装双系统的瞬间但用久了之后WSL 的边界就慢慢暴露出来了。第一个问题是systemd 支持不完整。虽然较新的 WSL 版本已经可以通过配置开启 systemd但我在跑一些需要完整 init 系统的服务时比如某些数据库和容器编排工具总是遇到各种奇怪的权限和启动顺序问题。第二个问题是文件系统性能。跨系统访问文件时尤其是大量小文件读写WSL 的性能衰减非常明显。我曾经在一个 Node.js 项目里跑npm install在 WSL 里花了将近四分钟而在原生 Ubuntu 下只用了不到一分钟。第三个问题更隐蔽硬件访问的完整性。WSL 对 USB 设备的支持一直比较有限虽然可以通过 usbipd 转发但配置繁琐且不稳定。我需要用到一个串口调试工具在 WSL 里折腾了半天也没搞定最后还是在原生 Linux 下插上就能用。还有一个很现实的考量我想真正理解 Linux 的启动流程、磁盘分区、驱动加载这些底层机制。WSL 把这些都封装得太好了好到你根本不需要知道背后发生了什么。但如果你想往更深的方向走比如做嵌入式开发、系统调优、或者单纯想搞明白 GRUB 是怎么引导系统的那双系统就是绕不开的一步。2.3 WSL 和双系统的适用场景对比维度WSL 2Ubuntu 双系统启动速度秒开随 Windows 启动需要重启约 20-40 秒文件系统性能跨系统访问有衰减原生性能无衰减硬件访问有限USB 需转发完整即插即用systemd 支持需手动配置部分受限完整支持图形界面支持 WSLg但体验一般原生桌面流畅磁盘占用动态扩展较小需要独立分区较大适合场景日常开发、脚本运行、轻量编译系统学习、硬件调试、重度编译这张表不是要分出谁好谁坏而是帮你判断自己到底需要什么。如果你只是想在 Windows 上跑个 Python 脚本、用一下 Linux 的命令行工具WSL 完全够用而且体验很好。但如果你需要完整的系统控制权、原生硬件访问、或者想深入学习 Linux 的运作机制那双系统就是更合适的选择。3. 分区、镜像与启动项双系统安装前的关键决策3.1 磁盘分区给 Ubuntu 留多少空间才够用装双系统第一步就是分区。我的笔记本是一块 512GB 的 NVMe 固态硬盘Windows 占了大概 300GB剩下 200GB 左右。我最初的计划是给 Ubuntu 分 100GB但后来实际用下来发现如果你打算在 Ubuntu 下跑 Docker、装 CUDA、存数据集100GB 很快就会捉襟见肘。最终我给了 Ubuntu 150GBWindows 那边压缩到 350GB目前用下来比较从容。具体操作上我是在 Windows 的“磁盘管理”里直接压缩卷。这里有个细节要注意压缩之前最好先做一次磁盘碎片整理否则可压缩的空间会比你预期的小很多。另外如果你有多个分区比如系统恢复分区夹在中间可能会遇到无法压缩的情况这时候需要用第三方分区工具来调整。分区方案我采用的是最简结构EFI 系统分区Windows 已经创建好了Ubuntu 安装时会自动识别并复用不需要额外新建根分区/约 130GBext4 格式挂载点/交换分区swap约 16GB和内存大小一致用于休眠和内存溢出保护家目录/home约 4GB其实可以不用单独分但我习惯把根分区和家目录分开方便以后重装系统时保留个人数据注意分区操作有风险动手前务必把重要数据备份到外部硬盘或云端。我见过太多人因为分区表被破坏导致数据全部丢失的案例。3.2 镜像选择Ubuntu 24.04 LTS 还是 22.04 LTSUbuntu 的版本选择其实没有太多纠结的余地。如果你追求稳定选 LTS 版本如果你需要最新硬件支持选最新的 LTS。我最终选了 Ubuntu 24.04 LTS原因是它对新一代 CPU 和显卡的驱动支持更好而且内核版本更新对 NVMe 固态和 Wi-Fi 6 网卡的兼容性更优。下载镜像的时候务必去 Ubuntu 官网下载不要从第三方站点拿。我见过有人从不明来源下载的镜像被植入了恶意脚本装完系统后门就开了。官网的镜像下载速度可能慢一点但安全第一。下载完成后用 SHA256 校验一下镜像完整性这个步骤花不了两分钟但能避免很多莫名其妙的安装失败。制作启动 U 盘我用的工具是 Rufus在 Windows 下直接运行选择镜像、选择 U 盘、分区类型选 GPT、目标系统选 UEFI然后点开始就行。这里有个坑Rufus 会提示你选择“以 ISO 镜像模式写入”还是“以 DD 镜像模式写入”对于 Ubuntu 来说两种都可以但我实测 ISO 模式兼容性更好尤其是较新的主板。3.3 BIOS 设置关闭 Secure Boot 和 Fast Startup在重启进入安装界面之前需要先进 BIOS 做两件事第一关闭 Secure Boot。虽然 Ubuntu 支持 Secure Boot但在双系统环境下Secure Boot 有时会导致 GRUB 引导项无法正确加载 Windows或者显卡驱动签名验证失败。我建议先关掉等系统装好、驱动都正常之后再考虑要不要重新开启。第二关闭 Windows 的快速启动。这个功能在 Windows 的“电源选项”里作用是让关机变成一种深度休眠以便下次开机更快。但它会导致 Windows 占用磁盘时 Linux 无法安全挂载 NTFS 分区严重时甚至会造成文件系统损坏。关闭方法是在控制面板的电源选项里取消勾选“启用快速启动”。另外如果你用的是较新的笔记本可能还需要在 BIOS 里把SATA 模式从 RAID 改成 AHCI否则 Ubuntu 安装程序可能识别不到硬盘。这个操作有风险改之前最好先确认 Windows 能不能正常启动必要时需要先修改注册表再改 BIOS。4. 安装过程中的分岔路口与中文输入法配置4.1 安装类型选择千万别选“清除整个磁盘”Ubuntu 安装程序走到“安装类型”这一步时会给你几个选项。如果你之前已经分好区了就选“其他选项”然后手动指定每个分区的挂载点。千万不要选“清除整个磁盘并安装 Ubuntu”那个选项会把你的 Windows 一起抹掉。手动分区的时候安装程序会列出你之前压缩出来的空闲空间。你需要依次创建EFI 分区如果 Windows 已经有一个 EFI 分区通常 100-500MB直接选中它挂载点设为/boot/efi不要格式化交换分区选中空闲空间类型选“交换空间”大小设为内存的 1-2 倍根分区剩余空间类型 ext4挂载点/家目录分区可选从剩余空间里再分出一部分挂载点/home安装程序底部有个“安装启动引导器的设备”选项默认会选整个磁盘比如/dev/nvme0n1保持默认即可。这样 GRUB 会被安装到磁盘的 EFI 分区里和 Windows 的引导管理器共存。4.2 中文输入法从 ibus 到 fcitx5 的切换Ubuntu 默认的中文输入法框架是 ibus自带的拼音输入法能用但词库和联想能力比较弱。我用了两天就受不了了换成了 fcitx5 rime 的方案。具体步骤# 安装 fcitx5 和 rime 引擎 sudo apt install fcitx5 fcitx5-rime fcitx5-chinese-addons # 设置环境变量 echo export GTK_IM_MODULEfcitx ~/.profile echo export QT_IM_MODULEfcitx ~/.profile echo export XMODIFIERSimfcitx ~/.profile # 重启后在“区域与语言”设置里把输入法框架切换为 fcitx5重启之后fcitx5 会出现在系统托盘里。右键点击图标选择“配置”在“输入法”标签页里添加 Rime。Rime 的默认词库比较简陋但它的优势在于高度可定制。你可以去 Rime 的官方仓库下载“雾凇拼音”方案词库和联想能力会好很多。提示如果你在 Wayland 会话下使用 fcitx5可能会遇到输入法候选框不跟随光标的问题。解决办法是在登录界面切换到 X11 会话或者安装fcitx5-frontend-gtk4和fcitx5-frontend-qt5来改善兼容性。4.3 显卡驱动NVIDIA 用户的必经之路如果你用的是 NVIDIA 显卡装完系统后第一件事就是装驱动。Ubuntu 24.04 的“附加驱动”工具已经能自动识别并推荐驱动版本直接点安装就行。但如果你需要 CUDA 工具链建议手动安装官方驱动# 先禁用 nouveau 开源驱动 sudo bash -c echo blacklist nouveau /etc/modprobe.d/blacklist-nouveau.conf sudo bash -c echo options nouveau modeset0 /etc/modprobe.d/blacklist-nouveau.conf sudo update-initramfs -u # 重启后安装驱动 sudo apt install nvidia-driver-550装完驱动后用nvidia-smi验证一下。如果能看到显卡型号和驱动版本说明安装成功。接下来再装 CUDA Toolkit 和 cuDNN就可以跑 PyTorch 训练了。5. 双系统日常使用中的那些坑与优化技巧5.1 时间不同步一个经典但容易忽略的问题双系统用户几乎都会遇到这个问题从 Ubuntu 重启到 Windows 后系统时间差了 8 小时。原因是Windows 把硬件时钟当作本地时间而 Linux 把它当作 UTC 时间。解决办法有两种第一种在 Linux 下把硬件时钟改为本地时间timedatectl set-local-rtc 1 --adjust-system-clock第二种在 Windows 下把硬件时钟改为 UTC需要修改注册表reg add HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /d 1 /t REG_DWORD /f我推荐第二种因为 Linux 的 UTC 处理方式更符合标准而且改注册表只需要做一次。5.2 GRUB 引导项让 Windows 和 Ubuntu 和平共处装完双系统后开机默认会进入 GRUB 菜单让你选择启动 Ubuntu 还是 Windows。但有时候 Windows 的引导项会消失或者 GRUB 的默认启动项不是你想要的。这时候可以用os-prober来重新检测sudo apt install os-prober sudo os-prober sudo update-grub如果想让 Windows 成为默认启动项可以修改/etc/default/grub文件把GRUB_DEFAULT设为 Windows 对应的菜单项编号然后运行sudo update-grub。另外如果你觉得 GRUB 菜单等待时间太长可以把GRUB_TIMEOUT从默认的 10 秒改成 3 秒或 5 秒。但不要设成 0否则你连选择系统的机会都没有。5.3 文件共享NTFS 分区的挂载与权限管理双系统下Windows 的 NTFS 分区在 Ubuntu 里是可以直接挂载的。Ubuntu 24.04 默认会自动挂载但挂载后的文件权限可能不太对导致你无法写入文件。解决办法是在/etc/fstab里手动配置挂载参数# 先查看分区的 UUID sudo blkid # 编辑 fstab sudo nano /etc/fstab # 添加一行注意替换 UUID 和挂载点 UUID你的分区UUID /mnt/windows ntfs-3g defaults,uid1000,gid1000,umask022 0 0这里的uid和gid是你的用户 ID 和组 ID可以用id命令查看。umask022表示文件权限为 755目录权限为 755你可以根据自己的需求调整。注意在 Linux 下写入 NTFS 分区时一定要确保 Windows 已经完全关机而不是处于快速启动的休眠状态。否则可能导致文件系统损坏。5.4 性能调优让 Ubuntu 在笔记本上更省电笔记本装 Ubuntu 后续航通常会比 Windows 短一些。我通过以下几个调整把续航从原来的 3 小时提升到了 4.5 小时左右安装tlp电源管理工具sudo apt install tlp tlp-rdw安装thermald温度管理工具sudo apt install thermald在 BIOS 里关闭独立显卡的始终开启模式改为按需切换把屏幕亮度调低到 60% 左右禁用不必要的后台服务比如蓝牙和触摸板在不用时自动关闭这些调整不会影响正常使用但对续航的提升非常明显。6. 从 WSL 到双系统我真正学到的东西回头看这段折腾的经历我最大的收获不是学会了装系统而是对操作系统的工作方式有了更具体的认知。以前用 Windows 的时候我从来不会去想“引导程序是怎么加载的”“分区表是什么结构”“驱动是怎么和内核交互的”。但当你亲手装了一次双系统这些问题就变成了你必须面对的现实。WSL 是一个非常好的工具它让我在 Windows 上也能享受 Linux 的开发体验而且几乎零成本。但它的定位始终是“桥梁”而不是“替代品”。当你需要完整的系统控制权、原生硬件访问、或者想深入理解 Linux 的运作机制时双系统就是更合适的选择。如果你现在还在犹豫要不要装双系统我的建议是先花一周时间用 WSL看看它能不能满足你的日常需求。如果 WSL 能搞定你 90% 的工作那就没必要折腾双系统。但如果 WSL 在某些场景下让你感到“差一口气”那不妨试试双系统它可能会给你带来完全不同的体验。最后分享一个小技巧装完双系统后建议在 Ubuntu 下把常用的开发环境配置脚本保存成一个 shell 文件比如setup-dev.sh里面包含安装 Docker、配置 Git、安装常用工具的命令。这样下次重装系统时只需要运行一次脚本就能把环境恢复到位省去大量重复劳动。我自己就是这么做的现在重装一次系统从原来的半天缩短到了不到一小时。
返回列表