ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

WSL 2 安装 Rocky Linux 完整实操指南:从导入到开发环境配置

WSL 2 安装 Rocky Linux 完整实操指南:从导入到开发环境配置 1. 方案选型与前置准备1.1 为什么要在WSL里跑Rocky Linux最近在帮朋友处理一个CentOS系统迁移的事需要在Windows笔记本上快速验证一堆配置脚本和依赖包开虚拟机一来资源占用太高二来来回切换窗口实在麻烦。后来直接改用WSL跑Rocky Linux整个过程顺畅得超出预期这才决定把这个流程整理成一篇完整的实操记录。先聊清楚一个基本问题为什么非要选WSL而不是传统虚拟机WSL 2 本质上运行在轻量级虚拟机中但它集成了文件系统互通、Windows路径映射、以及系统资源动态分配这些能力。和VirtualBox或VMware相比你不需要手工规划内存和CPUWSL会按需使用宿主机资源启动也是秒级。如果只是做命令行操作、跑服务、测脚本、弄开发环境WSL的体验和原生Linux没有明显差别。Rocky Linux 也不是随便选的。它是社区维护的企业级Linux发行版设计目标就是成为CentOS的替代品和RHEL保持高度兼容。很多服务器上还在用CentOS 7、8而且短时间迁不到其他发行版这时候本地开发环境用相同生态的Linux发行版就特别重要——至少和线上保持一致的包管理器、一致的版本号、一致的服务配置方式能省掉大量本地能跑线上崩了的麻烦。具体到WSL场景Rocky Linux能做的事其实很多在Windows上写Shell脚本调试、编译Linux下的C/C程序、跑数据库测试、部署容器环境、甚至把整套开发环境通过配置文件复现这些场景WSL都能覆盖到。比起在云服务器上反复试错本地随时开随时关的WSL明显效率更高。1.2 WSL版本选择为什么必须用WSL 2WSL有两个大版本WSL 1和WSL 2两者架构完全不同。WSL 1走的是API翻译层把Linux系统调用翻译成Windows调用兼容性有限一部分Linux软件无法运行。WSL 2则采用了真正的轻量级虚拟机内部跑一个完整的Linux内核兼容性大幅提升Docker、systemd、内核模块这些都能正常使用。Rocky Linux建议直接上WSL 2原因很简单Rocky Linux是完整的RHEL系发行版很多服务安装在WSL 1下会碰到系统调用不兼容的问题尤其数据库、容器这类依赖内核特性的软件几乎不可能在WSL 1下平稳运行。WSL 2的整个环境和虚拟机里体验已经非常接近而且启动速度、内存占用都控制得很好所以这里不做第二种选择。对比项WSL 1WSL 2系统调用实现API翻译层完整Linux内核兼容性有限部分软件不可用接近完整Linux环境IO性能跨文件系统操作快Linux原生文件系统稍好内存占用较低动态分配略高适合场景轻量脚本、目录操作开发环境、容器、服务运行从Windows版本来看Win10 2004及以上、Win11 均支持WSL 2。较老的版本建议先升级系统再继续操作否则后面会遇到一堆莫名其妙的兼容问题。1.3 启用WSL的完整操作不管最终要用哪个发行版先得把WSL本身准备好。以下步骤是Windows侧的配置必须先完成才能进入Rocky Linux的安装环节。如果你使用的是Win10 2004或Win11最简单的方式是使用管理员权限打开PowerShell或Windows Terminal运行如下命令wsl --install这条命令会默认开启WSL所需的Windows功能、下载WSL 2内核并安装默认的Ubuntu发行版。如果你不希望装Ubuntu可以加上参数指定其他发行版或者干脆先只装WSL本身wsl --install --no-distribution命令执行完成后绝大多数情况下需要重启系统。重启后再检查一下WSL版本确认默认版本是2wsl --set-default-version 2 wsl --status在这里我要特别提醒一个容易踩的坑如果运行wsl --install时提示已禁止(403)或者是提示WSL needs updating八成是当前系统的WSL组件没有更新到新版本或者网络策略限制了下载。403那个错误我自己也遇到过后来手动安装了WSL更新包再重新执行命令就正常了。建议先到官方文档或GitHub Releases页面单独下载最新的WSL安装包手动升级完成后再装发行版能绕开很多问题。如果你的系统开启了企业安全策略或组策略限制也会导致WSL安装失败。这会增加排查难度但不代表无解。最简单的做法是确认Windows更新是否完整并开启虚拟机平台和适用于Linux的Windows子系统这两个可选功能dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart两条命令跑完后重启系统再执行wsl --version检查。能正常输出版本号说明WSL本体已经就绪。2. 获取Rocky Linux的根文件系统2.1 官方镜像与第三方镜像的区别WSL的发行版安装方式有两种一种是通过微软商店直接安装另一种是手动导入tar包。Rocky Linux并没有出现在微软商店的应用列表里它官方提供的WSL镜像本身就是一个tar压缩包手动下载导入是唯一官方支持的方式这也意味着整个过程比下一步下一步稍微多一点手动操作但实际并不复杂。需要区分清楚的是Rocky Linux的官方下载渠道有完整的ISO镜像、云镜像、容器镜像和WSL镜像几种。WSL镜像是一个精度裁剪的根文件系统tar包里面包含了基础的Linux目录结构、核心工具链和Rocky Linux的包管理器不包含内核和引导程序。WSL 2内核由Windows侧提供所以这个tar包只需要根文件系统的内容就够了。到Rocky Linux官网下载页面选择对应的版本会看到各种镜像。找名字里带WSL字样的tar.xz包通常就是官方为WSL场景定制的镜像。另外也可以通过命令行直接拉取以9.x版本为例镜像站下的路径一般长这样https://download.rockylinux.org/pub/rocky/9/images/x86_64/注意这里的版本号和架构要按自己需求对应着选。x86_64是主流选择ARM设备需要另外找对应的镜像。2.2 使用镜像站点加速下载国内访问国外镜像站的速度有时候很折磨人尤其下载一个几百MB的tar包经常卡到没有耐心。我的经验是优先用国内镜像源或CDN加速下载比如中科大、清华、阿里的Rocky镜像站速度通常会快很多。以Aliyun镜像站为例同样能找到Rocky Linux所有版本的WSL镜像curl -L -o Rocky-WSL.tar.xz https://mirrors.aliyun.com/rockylinux/9/images/x86_64/Rocky-9-WSL-*.tar.xz写这段命令时版本号里的星号需要替换成实际存在的文件。先访问目录页确认文件名再拼完整地址避免下载一个404页面。如果你始终推荐从官网获取就用官网链接。速度问题可以用断点续传工具解决命令行里用curl -C -可以断点续传多试几次总能拉完。2.3 校验文件完整性的必要性下载完成后强烈建议校验文件完整性。这一步很多人会跳过但WSL镜像损坏的后果是导入后启动时报各种奇怪的错比如tar: Unexpected EOF或者wsl --import 后启动不了。与其到后面排查不如一开始就花十秒钟做校验。校验方法很简单从下载源拿到对应的SHA256校验和然后在本机计算比对sha256sum Rocky-WSL.tar.xz对比输出的哈希值和镜像站提供的校验和是否一致。一致才能保证文件在下载过程中没有损坏。这一步在我的实操流程里从没省过尤其是大文件网络波动导致数据损坏的概率比想象中高得多。3. 导入WSL与基础配置3.1 使用wsl --import导入Rocky Linux文件校验通过之后就可以开始导入。首先为Rocky Linux准备一个安装目录这个目录用来存放WSL虚拟磁盘文件最好不要放在系统盘C盘。WSL的虚拟磁盘会随内容增长长期使用后可能膨胀到几十GB放在C盘容易把系统盘塞满。我一般会在D盘单独建一个目录mkdir D:\WSL\RockyLinux接着执行导入命令wsl --import RockyLinux D:\WSL\RockyLinux .\Rocky-WSL.tar.xz --version 2参数说明如下RockyLinux发行版名称可以自己定后续所有wsl命令都会用到这个名称。D:\WSL\RockyLinux虚拟磁盘存放路径。.\Rocky-WSL.tar.xz刚才下载的rootfs文件路径。--version 2显式指定创建WSL 2发行版。导入过程视文件大小和磁盘性能而定通常几十秒到几分钟不等。看到正在进行转换这可能需要几分钟时间...之类的提示是正常的耐心等即可。导入完成后可以查看当前系统有哪些WSL发行版wsl --list --verbose如果列表中出现了RockyLinux且版本列为2说明导入成功。3.2 创建普通用户并设置默认用户刚导入的Rocky Linux默认直接用root用户登录。长期用root操作有个问题权限太大误操作代价太高。最好创建一个日常使用的普通用户然后把它设为WSL默认登录用户。依次执行以下命令进入系统并创建用户wsl -d RockyLinux进入shell之后useradd -m -G wheel -s /bin/bash rockylinux passwd rockylinux-m参数创建用户主目录-G wheel把用户加入wheel组这样以后需要提权时用sudo即可。设置密码之后把默认用户写入WSL配置文件echo -e [user]\ndefaultrockylinux /etc/wsl.conf退出WSL并让它重启以生效wsl --terminate RockyLinux wsl -d RockyLinux重新进入后终端提示符应该已经变成普通用户了。用id命令确认一下同时验证sudo是否正常sudo whoami输入密码后能输出root说明sudo配置正常。3.3 启用systemd关键的一步WSL默认没有启用systemd这对日常使用有很大影响尤其是想安装Docker、配置开机自启服务、运行需要systemd管理的守护进程时会发现很多服务无法启动报错原因基本都和Systemd has not been booted有关。从WSL 2较新版本开始可以通过/etc/wsl.conf开启systemd支持。若之前没写重新编辑wsl.conf文件sudo vi /etc/wsl.conf内容如下[boot] systemdtrue [user] defaultrockylinux保存退出后还是用wsl --terminate重启发行版。重新进入后执行systemctl is-system-running如果输出running或者degraded有服务失败但systemd本身在运行就说明systemd已生效。这一步直接决定了后面能不能用systemctl enable docker之类的操作务必确认。3.4 配置dnf软件源Rocky Linux默认的软件源指向国外的Rocky镜像在国内使用下载速度不稳定。建议换成国内镜像源速度和稳定性都会有明显提升。先备份原有源配置sudo cp -a /etc/yum.repos.d /etc/yum.repos.d.bak然后替换为国内镜像源。以阿里云为例主要修改Rocky-AppStream、Rocky-BaseOS、Rocky-Extras这几个repo文件将mirrorlist和baseurl中的路径替换为镜像站地址。更省事的方法是直接用sed批量替换sudo sed -i s|^mirrorlist|#mirrorlist|g /etc/yum.repos.d/*.repo sudo sed -i s|^#baseurlhttp://dl.rockylinux.org/$contentdir|baseurlhttps://mirrors.aliyun.com/rockylinux|g /etc/yum.repos.d/*.repo sudo dnf makecache完成替换后跑一次dnf makecache如果输出没有报错说明源配置生效。这一步做完之后后续装任何软件包的体验会顺畅很多。4. 网络、IP与常用工具配置4.1 网络模式选择与静态IP设置WSL 2默认使用NAT网络模式WSL内部有一套独立的IP地址Windows通过虚拟网卡与之通信。这种模式最省心开箱即用Windows访问WSL里的服务可以直接用localhost转发WSL访问Windows网络资源也正常。但如果你需要局域网内的其他设备直接访问WSL里跑的服务比如在一个开发环境里手机或者同事电脑要访问你WSL里启动的Web应用默认NAT模式就费劲了。这时候有两个办法一是Windows端口转发二是把WSL网络模式切换为mirrored模式。端口转发虽然能解决问题但需要手动命令配置而且重启后可能失效。mirrored模式是Windows 11 22H2及以上版本才有的功能它让WSL和Windows共享同一套网络接口局域网内设备可以直接通过Windows的IP访问WSL服务反过来WSL也能直接访问Windows监听的端口配置方式是在.wslconfig文件中写入[wsl2] networkingModemirrored如果你需要给WSL内部设置静态IP可以在WSL里用NetworkManager或ip命令配置但对于大多数场景其实没必要——域名和端口映射已经够用了。真有静态IP需求更建议在mirrored模式下直接用Windows侧的IP访问WSL内部IP只要保持动态分配即可。4.2 安装Docker、LibreOffice等常用软件启用了systemd之后安装Docker就变得特别顺滑。Rocky Linux的默认源里可能没有Docker官方仓库建议手动添加Docker官方源再安装sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install -y docker-ce docker-ce-cli containerd.io sudo systemctl enable --now dockersystemctl enable --now会同时完成开机自启和立即启动。WSL每次启动都会自启systemd所以Docker服务也会跟着起来。验证Docker是否正常sudo docker run --rm hello-world能跑通hello-world说明整套容器环境已经就绪。以后在Windows上写代码在WSL里跑容器这套组合在生产场景中也够用。LibreOffice这类办公软件在WSL里也能装。Rocky Linux官方源带LibreOffice直接sudo dnf install -y libreoffice如果你需要指定某个版本比如热搜里提到的libreoffice_7.4.7.2_linux_x86-64_rpm那就需要去LibreOffice官网下载对应rpm包然后手动安装。下载rpm包后用dnf本地安装sudo dnf install -y ./LibreOffice_7.4.7.2_Linux_x86-64_rpm/RPMS/*.rpm需要注意手动安装的LibreOffice版本和系统源里的版本可能冲突建议先确认要不要卸载旧版本再用dnf install覆盖安装避免依赖冲突。4.3 在VSCode中使用WSL开发WSL最大的优势之一就是和VSCode的深度集成。在Windows侧安装VSCode然后安装微软官方的Remote - WSL扩展之后在WSL里执行code .就能直接拉起VSCode窗口界面顶部会显示WSL: RockyLinux之类的标识表示当前会话运行在WSL内。这种模式下VSCode的终端、调试器、Git操作、代码补全全部在Linux环境内运行但界面和Windows原生一样流畅。文件可以放在WSL内部比如~/project也可以放在Windows侧通过/mnt/c路径访问。我的经验是项目文件尽量放在Linux文件系统内部因为跨文件系统频繁读写IO性能会差一些也容易触发WSL的文件监听问题。4.4 文件互通与虚拟磁盘空间管理WSL和Windows之间相互访问文件的方式有多种。Windows访问WSL内部文件可以在文件资源管理器地址栏输入\\wsl$\RockyLinux直接以网络路径形式打开。WSL访问Windows文件则通过/mnt/c、/mnt/d这类挂载点C盘对应/mnt/cD盘对应/mnt/d和原生Linux访问Windows分区的方式一致。使用一段时间后WSL虚拟磁盘文件ext4.vhdx会只增不减。删除了WSL内部的大文件磁盘空间并不会自动还给Windows这个问题让很多人头疼。解决方法是用diskpart压缩虚拟磁盘首先在Windows侧彻底关闭WSLwsl --shutdown然后以管理员身份打开CMD进入diskpartdiskpart select vdisk fileD:\WSL\RockyLinux\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk exit压缩时磁盘最好预留一定空间压缩过程可能需要几分钟。完成后再启动WSL虚拟磁盘文件会明显变小。这个操作不会影响WSL内部数据可以放心执行。5. 常见问题排查与避坑实录5.1 安装过程中的典型报错与解法实操过程中踩过的坑不少这里把高频问题整理出来方便对照排查。问题现象可能原因解决方法wsl --install提示403WSL组件版本过旧或网络策略限制手动下载最新WSL安装包升级或检查Windows更新wsl --import后启动报error_file_not_found虚拟磁盘文件路径错误或镜像损坏检查目录路径是否存在重新校验文件哈希提示WSL needs updatingWSL内核/用户态组件过旧执行wsl --update或手动下载安装最新WSLwsl --install -d找不到发行版商店组件不可用或网络受限改为手动下载tar包后用wsl --import导入systemd未运行版本过旧或wsl.conf配置错误确认WSL内核版本检查/etc/wsl.conf中systemdtrue磁盘空间未释放vhdx虚拟磁盘不会自动收缩用diskpart执行compact vdisk压缩WSL启动不了错误码0x80370102宿主机未开启虚拟化BIOS中开启Intel VT-x/AMD-V检查虚拟机平台功能tar导入失败提示Invalid argument下载的tar包不完整重新下载并校验SHA256确认格式为tar.xz5.2 通关排查思路先看版本再看配置遇到WSL问题我的排查路径固定且高效第一步看WSL版本第二步看系统功能是否开启第三步看配置文件和目录状态。看版本执行wsl --version和wsl --status确认WSL本体是新版内核版本不是几年前的旧版本。如果执行时提示WSL组件太旧先升级再排查后面的问题。看功能确认适用于Linux的Windows子系统和虚拟机平台两个功能都已启用。有的系统默认只开了前者导致WSL 2无法运行执行dism.exe命令启用后再重启。看配置重点检查/etc/wsl.conf内容是否符合预期比如默认用户是否写对、systemd是否开启。注意wsl.conf的配置在每次WSL启动时读取修改后必须wsl --terminate重启不能只退出再进。5.3 卸载与重装不留下任何残留很多人在WSL里折腾坏了之后想重装却不知道怎么卸载干净。其实卸载WSL发行版的命令很简单但容易踩坑的点在于光在Windows应用和功能里卸载是没用的。正确做法是使用wsl命令卸载特定发行版wsl --unregister RockyLinux这条命令会删除虚拟磁盘文件和全部内部数据相当于彻底清空该发行版。如果需要把所有WSL发行版全部清掉也可以逐个执行unregister。如果还想卸载WSL自身组件需要在PowerShell中执行wsl --uninstall然后手动关闭相关Windows功能。但大多数场景下没必要卸载WSL本身保留WSL环境重新导入一个Rocky Linux就又是一条好汉。我自己重装过好几次最深的体会是一定要把配置沉淀成脚本。比如安装完Rocky Linux后把用户创建、源替换、systemd配置、Docker安装这些步骤写成一个Shell脚本放在代码仓库里下次重装直接执行脚本十分钟就能恢复到之前的开发环境。这也是WSL场景的天然优势——整个系统根文件系统都可以导出为tar包配合配置脚本备份和恢复都极其方便。5.4 一个容易被忽略的细节WSL配置文件层级WSL的配置分两层Windows侧的.wslconfig和Linux侧的wsl.conf很多人会搞混。.wslconfig文件位于Windows用户目录C:\Users\用户名\.wslconfig配置的是WSL整体运行参数比如内存限制、CPU核数、网络模式、交换分区等。修改后需要执行wsl --shutdown让所有发行版完全停止然后重新启动才会生效。wsl.conf文件位于各发行版的/etc/wsl.conf配置的是单个发行版的特性比如默认用户、systemd开关、自动挂载参数等。修改后只要wsl --terminate 发行版名即可。这两个文件的作用域完全不同排查问题时先确认改动写到哪个文件里了能省下不少无用功。5.5 从实际使用中提炼的几条建议最后分享几条用得久了才总结出来的经验。第一WSL里的时间同步偶尔会出问题。Windows从睡眠唤醒后WSL内部时钟可能不准导致make、git commit这类依赖时间戳的操作异常。解决办法是在WSL里设置自动时间同步服务或者唤醒后手动执行sudo hwclock -s强制系统时钟从硬件时钟同步。第二默认文件路径的问题。很多人习惯直接从Windows资源管理器拖文件到WSL里但每次操作最好想清楚文件该放哪一侧。跨文件系统频繁访问会明显感觉卡顿比如在/mnt/c目录下执行大型编译项目非常容易卡死建议把这类项目放到WSL内部文件系统Windows侧只做入口访问。第三如果你需要同时管理多个开发环境不要创建一堆WSL发行版一个发行版里用多用户或者容器隔离就够。发行版一多内存和磁盘占用翻倍管理成本也高。我现在的标准模式是一个Rocky Linux跑所有开发和测试有隔离需求就上Docker容器简单干净。根据个人经验WSL跑Rocky Linux这套组合最让我满意的点是它把企业级Linux的兼容性和Windows的桌面体验粘合得恰到好处。线上服务器是Rocky本地开发也是Rocky同一套命令、同一个包管理、复用同一套配置迁移到生产环境时基本不用改。对于不想开虚拟机、又想获得接近服务器环境的开发者来说这应该是最轻量也最稳妥的一条路。
返回列表