WSL2安装Rocky Linux完整指南:从离线导入到生产环境配置

发布时间:2026/9/15 20:02:15
WSL2安装Rocky Linux完整指南:从离线导入到生产环境配置
我一直觉得WSL是个被低估的东西。很多开发者的认知还停留在“WSL就是开个Linux终端跑跑命令”但实际上它已经能承载完整的开发环境、服务端模拟甚至小型生产环境复刻。这篇文章要聊的是一个更具体的组合在WSL里装Rocky Linux。为什么聊这个组合因为WSL官方商店里默认只有Ubuntu系列而真实的生产环境里RHEL系系统用得非常多。Rocky Linux作为RHEL的社区兼容版本在企业运维、容器化部署场景里出场率很高。当我想在Windows笔记本上复刻一套RHEL系服务端环境时WSL Rocky Linux就是那个轻量又顺手的选择。这篇文章直接给你一条我反复试过的完整路径从环境检查、离线导入到用户体系、软件源优化再到静态IP、VSCode联动、磁盘回收这些高频痛点。适合谁来读两类人一是需要在Windows上临时跑RHEL系服务、又不想开虚拟机的开发或运维二是刚到Rocky Linux环境、想用WSL低成本练手的同学。整个流程我会把每个选择背后的原因也讲清楚照着做基本不会卡壳。1. 为什么要在WSL里装Rocky Linux应用场景和方案选型1.1 我遇到的真实需求一张“跑RHEL系服务”的Windows开发机先交代一下我自己的使用背景。我的工作机是Windows日常写文档、用IDE、聊协作软件都在这套系统里。但手头维护的一些服务跑在RHEL系环境比如用到Rocky Linux的服务器、客户现场基于RHEL系的部署包这些环境没法直接在Windows上模拟。以前的做法是开一台VMware虚拟机装一个完整的Rocky Linux桌面版或者Server版需要的时候启动、用完关机。但时间长了发现很别扭虚拟机占内存、启动要等几十秒、文件来回拷贝走SCP或者共享目录体验始终隔了一层。后来把服务端环境迁移到WSL里启动速度从冷启动虚拟机的一分钟降到两三秒内存占用也从2GB起步降了一半不止同时还能直接用Windows的终端、直接通过/mnt/c访问Windows文件整个人都舒服了。WSL里的Linux不是一个完整虚拟机而是跑在轻量虚拟机里的原生Linux内核。它没有完整的硬件虚拟化层但反过来也意味着更少的资源开销和更自然的Windows集成。对“想跑几个Linux服务看看行为”“想练RHEL系命令”“想复刻一套生产环境的软件栈”这类需求WSL是完全够用的。1.2 WSL vs 虚拟机为什么不是VirtualBox或VMware很多人在选择用WSL还是虚拟机这件事上纠结实际用下来两边差别很明显。虚拟机的优势是隔离彻底、内核可定制、网络模拟完整适合需要完整系统环境或内核模块开发的场景。WSL2的优势则集中在三点启动速度wsl -d RockyLinux基本秒进shell虚拟机冷启动至少半分钟起。内存占用WSL2使用动态内存空闲时可以把内存释放回Windows虚拟机固定吃掉一块内存很难吐出来。文件互访WSL可以直接挂载Windows盘符到/mnt/cWindows也能通过网络路径\\wsl$\RockyLinux访问Linux文件这比虚拟机的共享目录体验顺滑太多。代价也有WSL2的I/O性能弱于裸机尤其是大量小文件读写时明显不如原生Linux内核由微软维护不能自己编译加载任意内核模块只能使用WSL2默认内核或微软提供的内核配置。另外WSL2的IP地址默认是动态的迁移前是一个处理起来比较麻烦的痛点这一点后面专门展开。如果你要做内核级开发、要完整虚拟化硬件直通WSL不适合。但日常跑服务、练命令、搞容器、做开发WSL的性价比确实高。1.3 选Rocky Linux而不是CentOS Stream、AlmaLinux的理由RHEL系发行版里现在能选的主要是Rocky Linux、AlmaLinux和CentOS Stream。这三者也都是免费的但定位差异很大。CentOS Stream是RHEL上游的滚动预览版适合想提前看RHEL新特性的场景不适合想要稳定复刻生产环境的用户。AlmaLinux和Rocky Linux都是RHEL的二进制兼容重建版前者由CloudLinux团队主导后者由社区发起。就我个人体验Rocky Linux的社区活跃度、文档丰富度都更让人放心软件仓库和第三方生态对它的适配也更多。你需要一个和RHEL保持一致节奏的服务端系统Rocky Linux是个稳妥选择。选择确认后剩下的问题就是怎么把它装进WSL。这里不是一句wsl --install -d rockylinux就能解决的下面从最基础的检查开始。2. 安装前的检查清单版本、虚拟化和WSL环境状态2.1 Windows版本和虚拟化翻车率最高的前两项在碰Rocky Linux之前先把Windows环境摸清楚否则后面会遇到各种莫名其妙的问题。首先看Windows版本。WSL2需要Windows 10 2004及以上或者Windows 11。如果你的Windows版本比较老建议先做一次完整更新很多WSL相关报错本质上就是系统组件版本太低导致的。可以在“设置-系统-关于”里看版本号或者按WinR输入winver。其次是CPU虚拟化。WSL2依赖Hyper-V底层的虚拟化能力你必须在BIOS/UEFI里开启虚拟化Intel VT-x或AMD-V。检测方法很简单打开任务管理器切到“性能”选项卡看CPU一栏里“虚拟化”是否显示“已启用”。如果显示“已禁用”进BIOS找到Intel Virtualization Technology或SVM Mode开启后重启。很多人在这一步忽略结果后面安装WSL2内核、创建虚拟机时报出各种Error_File_Not_Found或Hcs系列错误排查半天才发现是虚拟化都没开。2.2 开启“适用于Linux的Windows子系统”功能如果之前用过WSL这一步可能已经做过。没有的话用管理员身份打开PowerShell执行两条命令启用两个Windows功能dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart第一条启用“适用于Linux的Windows子系统”第二条启用“虚拟机平台”WSL2需要虚拟机平台才能跑轻量虚拟机。执行完提示重启就重启这一步别偷懒。在不方便开管理员权限的办公电脑上也可以走“控制面板”-“程序”-“启用或关闭Windows功能”勾选“适用于Linux的Windows子系统”和“虚拟机平台”效果一样。装完后检查一下WSL是否可用的最简单方法wsl --status wsl --version如果命令不存在说明功能没启用成功或系统版本太老。如果存在但提示WSL needs updating说明要更新WSL内核组件接着往下看。2.3 升级WSL命令行工具与常见更新失败的处理方式新版WSL已经把内核、命令行工具打包成独立组件可以通过wsl --update直接更新。但这一步也是很多人的第一个坑在部分网络环境下wsl --update下载很慢甚至卡住不动。我的处理方式分两种。一是耐心等待微软服务器访问速度受时段和网络影响很大尝试换个时间段再跑一次二是用独立更新包从微软官方渠道下载WSL的安装包手动装。手动安装完成后wsl --version能看到具体版本号代表更新成功。如果你在安装过程中碰到wsl --install直接返回类似“已禁止(403)”的报错先别慌。这通常代表当前网络或系统策略阻碍了在线安装过程解决办法是跳过wsl --install这条在线链路改用“手动启用功能 手动下载内核包 离线导入系统”这条路径。本文后面安装Rocky Linux的方案本身也不需要依赖在线安装器。3. 离线导入Rocky Linux从官方下载rootfs到wsl --import3.1 为什么不能用wsl --install -d一把装好用过WSL的人都知道wsl --install -d Ubuntu可以一键装好Ubuntu但到Rocky Linux这里行不通。WSL的在线发行版列表里默认没有Rocky Linuxwsl --list --online拉取列表时还可能因为网络问题超时。所以换一条路直接下载Rocky Linux的容器rootfs镜像用wsl --import导入。这也是WSL为“非商店发行版”提供的标准安装方式适用性很强。它把Linux根文件系统打包成tar文件WSL负责创建虚拟机、挂载文件系统、启动进程最终呈现出来的就是一个可以正常登录的Linux发行版。3.2 获取Rocky Linux容器镜像tar包打开Rocky Linux官方仓库的目录结构进入对应版本的images目录。以Rocky 9为例路径通常是https://download.rockylinux.org/pub/rocky/9/images/x86_64/目录下会有多个tar.xz文件文件名里会包含版本号和架构例如rockylinux-9.5-x86_64-minimal.tar.xz。这里我用9.5示意实际以下载时目录里存在的文件名版本为准。注意区分架构一般PC选x86_64ARM机器选aarch64。如果你还在用Rocky 8去/pub/rocky/8/images/下找对应文件下载时会看到8.10等小版本整体操作逻辑一样。下载方式看你习惯浏览器直接另存或者用PowerShell里的curlcurl -LO https://download.rockylinux.org/pub/rocky/9/images/x86_64/rockylinux-9.5-x86_64-minimal.tar.xzRHEL系常用minimal变体做容器底子它比base更精简装完系统只有最基础的包组后面再按需用dnf补齐适合当WSL的起点镜像。如果你不想装东西太费劲也可以直接选base变体体积大一些但自带更多常用工具。3.3 wsl --import导入与验证下载完成后在Windows上找一个专门放WSL发行版数据的目录。我习惯把所有WSL发行版集中放在一个盘符下比如D:\WSL\RockyLinux这样既方便管理也避免系统盘被撑爆。打开PowerShell依次执行创建目录和导入命令mkdir D:\WSL\RockyLinux wsl --import RockyLinux D:\WSL\RockyLinux D:\Downloads\rockylinux-9.5-x86_64-minimal.tar.xz --version 2解释一下参数第一个RockyLinux是你给这个发行版起的名wsl -d RockyLinux会用到第二个目录是发行版数据的存放位置导入后WSL会把虚拟磁盘文件写在这里第三个参数是tar包路径--version 2表示使用WSL2架构。导入过程没有进度条耐心等几十秒到几分钟命令结束后没有报错就是成功了。然后启动wsl -d RockyLinux看到提示符变成root机器名说明已经进入系统。先验证一下版本cat /etc/os-release dnf repolist能正常输出Rocky Linux版本号和软件仓库列表你的Rocky Linux就算在WSL里跑起来了。注意此时登录的是root用户因为容器镜像是从头解包的还没有建立普通用户体系这就要进入下一步初始化。4. 首次启动到完全可用用户体系、systemd和软件源配置4.1 默认root登录后的第一件事创建普通用户容器镜像默认只给root用户日常操作全用root不是好习惯尤其以后要在环境里跑数据库、Web服务尽量先建一个普通用户。WSL导入的系统默认没有帮你创建用户所以进入系统后第一时间执行dnf install -y sudo useradd -m -G wheel rocky passwd rocky第一行装sudominimal镜像里不一定会带。第二行创建用户rocky-m给家目录-G wheel把用户加入wheel组。RHEL系默认配置里wheel组成员可以用sudo如果没有生效执行visudo检查%wheel ALL(ALL) ALL这行是否被注释掉了。第三行设置密码按提示输入两次即可。之后用su - rocky切到普通用户或者重启WSL后再登录就不再是root了。这里要注意WSL内部和常规发行版一样所有用户管理命令都有效你完全可以按服务器标准来搞。4.2 让WSL记住你的默认用户刚导入的发行版每次启动都是root为了避免以后每次手动su需要告诉WSL默认登录用户是谁。最方便的方法是在系统的/etc/wsl.conf里配置[user]段vi /etc/wsl.conf写入[user] defaultrocky保存后回到Windows PowerShell执行wsl --shutdown再重新wsl -d RockyLinux应该就直接以rocky用户登录了。如果你用的是老版本WSL对wsl.conf的[user]支持不完善也可以改注册表方式打开注册表编辑器定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss找到Rocky Linux对应的GUID子项把DefaultUid从0改成普通用户的UID十进制值比如rocky用户的UID一般是1000。改完一样要wsl --shutdown再重启。两种方式任选新版本WSL用wsl.conf更省事。4.3 开启systemd并用wsl.conf固定网络和挂载设置如果只是敲命令systemd有没有都无所谓。但你想在WSL里跑systemctl start nginx、要托管Docker守护进程就必须开systemd。WSL2从较新版本开始支持systemd开启方法同样在/etc/wsl.conf[boot] systemdtrue保存后wsl --shutdown重新进入执行systemctl list-units --typeservice --staterunning能看到一堆systemd管理的服务说明开启成功。还有几个常见配置值得顺手做掉。默认情况下WSL会自动挂载Windows盘符到/mnt/c如果你不需要自动挂载或者想加一些挂载参数可以在/etc/wsl.conf里加[automount] enabledtrue optionsmetadata,umask22metadata参数尤其重要它让Linux可以在挂载的Windows文件系统上记录Linux权限信息对git仓库、文件权限敏感的项目帮助很大。umask22则让新创建的文件有合适的默认权限。4.4 软件源调整与系统更新Rocky Linux默认的软件源指向官方仓库在部分网络环境下速度可能不理想。RHEL系的源配置集中在/etc/yum.repos.d/目录最稳妥的做法是操作前先备份cp -a /etc/yum.repos.d /etc/yum.repos.d.bak然后编辑rocky.repo或Rocky-*.repo文件把其中baseurl里的download.rockylinux.org换成你所在网络环境下能稳定访问的镜像站域名mirrorlist行如果干扰了替换可以直接注释掉。改完执行dnf makecache dnf update -y系统更新过程中可能耗时较长取决于网络和包数量。更新完建议再补一些基础工具dnf install -y vim wget curl tree tar unzip sudo git到这一步一个可以日常使用的Rocky Linux已经成型。但用WSL的人接下来还会碰到三个绕不开的硬骨头IP地址一直变、VSCode怎么连、磁盘空间越用越大。下面逐个解决。5. 装完之后必须解决的三个硬骨头静态IP、VSCode和磁盘回收5.1 WSL2的IP为什么会变NAT原理与固定方案WSL2默认网络模式是NAT由Hyper-V创建的虚拟NAT网络给每个WSL发行版分配动态IP。也就是说你每次wsl --shutdown再启动拿到的新IP可能和上次不一样。这对日常敲命令没影响但如果你在WSL里启动了一个Web服务想从Windows浏览器访问或者想从局域网其他设备访问这个服务IP变化就很折腾。最推荐的办法是Windows 11 22H2以上版本开启mirrored网络模式。它让WSL2和Windows共用同一个网络接口WSL里服务监听什么端口Windows上对应端口就能直接访问不再有NAT转发问题。配置方式是在Windows用户目录下编辑.wslconfig文件[experimental] networkingModemirrored dnsTunnelingtrue firewallfalse autoProxytrue保存后执行wsl --shutdown重新进入Rocky Linux用ip addr看一下网卡如果网络接口地址和Windows主机是同一个网段甚至同一IP说明mirrored模式生效。之后在WSL里启动nginx或者开发服务器直接在Windows浏览器访问localhost:端口就行体验接近原生。如果用的Windows 10不支持mirrored模式就只能在Windows侧做端口转发脚本。思路是把WSL的动态IP映射到Windows某个固定端口命令示例netsh interface portproxy add v4tov4 listenport8080 listenaddress0.0.0.0 connectport8080 connectaddressWSL的IP netsh advfirewall firewall add rule nameWSLPort8080 dirin actionallow protocolTCP localport8080这里WSL的IP每次重启会变得配合开机脚本去动态更新稍显麻烦。所以我个人还是建议能用新版本Windows就尽快升级用mirrored模式一劳永逸。5.2 VSCode Remote-WSL的正确打开姿势在WSL里写代码最顺手的编辑器组合是VSCode加Remote-WSL扩展。先在Windows侧VSCode里安装扩展Remote - WSL扩展ID是ms-vscode-remote.remote-wsl不用在Linux里面装任何东西。然后启动Rocky Linux的WSL窗口在shell里直接执行code .VSCode会检测到当前正在WSL发行版里自动在Windows侧启动一个“套着Linux上下文”的VSCode窗口左下角能看到类似“WSL: RockyLinux”的标识。这个模式下终端、调试器、扩展插件全部运行在Linux环境中但界面和操作习惯和Windows VSCode完全一致。对非商店安装的发行版Remote-WSL插件同样能识别因为VSCode是通过wsl -d 发行版名来连接指定发行版的。如果你在一个已经打开的Windows侧VSCode里也可以按CtrlShiftP输入“WSL: Connect to WSL”然后选择RockyLinux。第一次连接时VSCode会在WSL环境里下载一个vscode-server组件这个下载过程偶尔因网络原因卡顿。如果卡住可以手动从VSCode的下载地址拿到对应版本的server压缩包解压到~/.vscode-server/bin目录再重启VSCode连接。文件传输的思路很简单在Windows下载后用cp拷贝到/mnt/c的临时目录再从WSL里移动到目标位置。5.3 ext4.vhdx空间不释放的回收流程用WSL时间长了你会发现自己也没装什么大东西但C盘或者存放WSL虚拟磁盘的磁盘空间一直在缩水。这是因为WSL2的虚拟磁盘文件ext4.vhdx只会膨胀不太会自动收缩你在Linux里删除文件磁盘文件的大小并不会立刻变小空闲空间依然握在虚拟磁盘手里。我在一次清理了约20GB的构建缓存之后实际磁盘占用一点没少才意识到这个问题。解决办法是用Windows自带的diskpart压缩VHDX。完整流程在Windows PowerShell里彻底停止WSLwsl --shutdown打开diskpartdiskpart依次执行select vdisk fileD:\WSL\RockyLinux\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk exit注意file路径换成你存放WSL发行版数据的实际路径在D:\WSL\RockyLinux目录下磁盘文件默认叫ext4.vhdx。如果Windows Explorer没有显示扩展名先在资源管理器里打开“文件扩展名显示”。compact执行时间取决于文件内容和磁盘速度可能从几秒到几分钟。处理完回到资源管理器看那个vhdx文件压缩前和压缩后的体积对比通常非常直观。这个压缩操作建议隔一段时间做一次尤其是你在WSL里频繁安装卸载软件、编译大型项目之后。6. 在这套环境里落地常用服务Docker与日常开发工具6.1 在WSL的Rocky Linux里安装Docker的两种路径装好系统总得干点实事Docker应该是很多人的第一站。在WSL环境里装Docker有两条路按需选择。第一条是最省事的Windows侧安装Docker Desktop然后在它的Settings里勾选“Use the WSL 2 based engine”在Resources的WSL Integration里把RockyLinux发行版打开。之后直接在Rocky Linux终端里执行docker version就能用Docker命令服务和Windows侧Docker Desktop一起管理升级也方便。适合不折腾、就想快速用容器的人。第二条是纯Linux原生方式适合想完全在WSL内部署Docker服务的场景。按RHEL系标准流程走sudo dnf install -y dnf-plugins-core 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仓库地址用的是CentOS的官方Docker仓库Rocky Linux和CentOS同属RHEL系仓库配置可以直接复用。安装完成后因为已经开启了systemd所以可以直接sudo systemctl enable --now docker验证一下sudo docker run hello-world能正常跑出hello-worldDocker就在WSL的Rocky Linux里正式落户了。日常使用建议当前用户加入docker组省得每次敲sudosudo usermod -aG docker rocky重新登录后生效。这两条路唯一要提醒的是别同时往里怼同一个容器端口免得端口冲突。6.2 dnf安装LibreOffice等其他软件很多人装Rocky Linux除了跑服务还想要一个稳定的RHEL系桌面应用环境。虽然WSL本身没有图形界面但配合WSLgWindows 11和更新版本Windows 10自带Linux图形程序可以直接弹出到Windows桌面显示。安装LibreOffice并不复杂sudo dnf install -y libreoffice完整版LibreOffice体积不小依赖较多如果只是想打开、转换文档可以只装核心组件sudo dnf install -y libreoffice-core libreoffice-writer安装完成后在WSL终端执行libreoffice窗口会直接显示在Windows桌面上。用起来和原生Linux里没太大区别启动速度比完整虚拟机里的还要快。这套方案适合需要RHEL系环境处理文档、核对Office文件兼容性的场景。6.3 从Windows访问WSL文件和反向互访WSL里处理Linux项目文件又想在Windows侧用图形工具查看有一个非常方便的方法在Windows资源管理器地址栏输入\\wsl$\RockyLinux回车就能看到整个Linux文件系统。这个路径相当于把WSL发行版的根目录暴露给Windows网络邻居你可以像访问网络共享一样操作。反过来在WSL里要访问Windows文件传统路径是/mnt/c进入后就是Windows的C盘。如果你在Linux侧拿到一个Windows路径需要转换可以用wslpathwslpath -w /home/rocky/project会输出对应的Windows路径方便粘贴到需要Windows路径的程序里。这套互访机制是我觉得WSL在生产效率上明显优于虚拟机的地方文件来回倒腾基本零成本。7. 高频报错速查与个人经验总结7.1 报错对照表我把前后折腾过程中碰到的高频报错整理成表方便你按图索骥报错或现象常见原因处理思路wsl --install返回 403在线安装请求被网络策略或服务器拒绝跳过在线安装手动启用功能并用独立安装包不依赖在线安装器wsl --list --online连接超时在线发行版列表拉取受阻不影响离线导入直接用rootfs tar包导入wsl --update下载很慢官方下载链路波动换时段重试或从微软官方渠道下载独立更新包Wsl/Service/CreateInstance/CreateVm/Hcs/Error_File_Not_Found系统版本较低、虚拟化未开启或WSL2内核组件缺失检查Windows版本、开启CPU虚拟化、安装内核组件导入后启动闪退或卡住tar包不是合法rootfs、磁盘空间不足重新下载对应架构的容器镜像检查安装目录剩余空间systemctl命令不存在或无法使用未开启systemd或WSL版本过旧升级WSL在/etc/wsl.conf配置[boot] systemdtrue删除文件后空间没释放WSL虚拟磁盘不会自动收缩wsl --shutdown后用diskpart压缩vhdx这些报错里最容易误导人的是Error_File_Not_Found。看名字像文件缺失实际往往是Hyper-V底层的虚拟化组件没就绪解决方向反而是检查系统版本和虚拟化开关。遇到报错先别急着重装对照表里的根因排查往往更快。7.2 卸载和重装时机wsl --unregister的正确用法WSL里的发行版是可以随意折腾的折腾坏了重置成本很低。删除一个发行版用wsl --unregister RockyLinux注意这个命令会把该发行版所有的文件系统数据、配置、虚拟磁盘全部删除操作前做好心理准备因为它没有回收站。如果你只是觉得环境乱了不需要删掉整个发行版也可以考虑导出备份再还原wsl --export RockyLinux D:\backup\rocky-backup.tar wsl --import RockyLinux-new D:\WSL\RockyLinux-new D:\backup\rocky-backup.tar我建议把wsl --export当成“系统快照”用。每次搭好一套顺手的开发环境、装完一批基础工具后导出一份tar备份保存到移动硬盘下次新机器上几分钟就能还原整个环境比从头配环境节省大量时间。7.3 我个人在实际使用中的一些建议最后聊几点使用体会。第一WSL2的磁盘I/O性能只算“够用型”编译大型项目时如果项目文件在/mnt/c下你会明显感受到文件读写速度不如在Linux原生文件系统里。所以大项目尽量放在WSL自己的home目录下也就是/home/rocky/里把Windows盘符当成数据交换区而不是工作区。第二不要同时装太多WSL发行版。WSL2每个发行版都有自己的虚拟磁盘和后台进程同时在跑的发行版多了内存占用会线性增长。需要的发行版保留两三个就够剩下的wsl --unregister删掉保持系统干净。第三mirrored网络模式是改善体验的分水岭。没有它之前从Windows访问WSL服务要配端口转发、记动态IP麻烦且容易出错。开启之后基本感觉不到WSL是一台独立的“远程机器”日常用起来无限接近直接在Linux下开发。就我个人而言到目前为止这已经是我在Windows上使用RHEL系环境最顺手的一套方案WSL负责轻量启动Rocky Linux负责兼容生产环境VSCode负责打通编辑体验。希望这篇内容能让你少走一点我走过的弯路。