
WSL 上跑 Rocky Linux 这件事我前前后后折腾过好几轮。最开始图省事直接用 Windows 自带的商店装 Ubuntu后来服务器环境切到了 Rocky Linux本地开发要是跟线上不一致调试起来特别别扭于是就想在 WSL 里也搞一套 Rocky 环境。网上搜了一圈大部分教程都停留在 Ubuntu 上Rocky Linux 在 WSL 里的安装资料又少又碎尤其是离线导入这块很多人压根不知道还能这么干。这篇就把我踩过的坑、试通的路径一起捋清楚从在线安装到离线导入都有适合需要在 Windows 上复刻 RHEL 系开发环境的同学参考。先说结论WSL 上跑 Rocky Linux 完全可行而且比装双系统省心太多。你不需要单独分磁盘、不用重启切换系统直接在 Windows 终端里敲命令就能进到一套完整的 Linux 环境还能跟 Windows 文件系统互通。Rocky Linux 作为 RHEL 的社区重建版兼容性很稳用来做开发、跑脚本、编译代码都没问题。下面从安装方式到后期配置我一步步拆开讲。1. 内容整体设计与思路拆解1.1 为什么偏偏选 Rocky Linux很多人不理解WSL 官方商店里明明有 Ubuntu为什么还要费劲装 Rocky。Ubuntu 和 Rocky 都是 Linux但生态偏向不同。Ubuntu 用的是 apt 包管理器Rocky 用的是 dnfUbuntu 面向桌面和通用服务器Rocky 则更贴近企业级服务器的使用习惯。如果你日常打交道的服务器跑的是 CentOS、RHEL 或者 Rocky那本地开发环境最好也用同一套体系否则yum install还是apt install这种小差异会不断打断思路。Rocky Linux 本身是 CentOS 停止维护后接棒的社区发行版目标就是做 RHEL 的 1:1 兼容替代。它的软件包、内核参数、目录结构都和 RHEL 高度一致迁移成本极低。在 WSL 里装一个 Rocky本质上就相当于在你 Windows 电脑里塞了一台和线上服务器同源的虚拟机写 Ansible 脚本、调 systemd 服务、编译 RPM 包都能在本地提前验证。1.2 WSL 1 和 WSL 2 该怎么选WSL 有两个大版本1 和 2。WSL 1 是个翻译层把 Linux 系统调用转成 Windows 调用启动快但内核兼容性差很多依赖内核模块的东西跑不了。WSL 2 则是跑在一个轻量级虚拟机上有完整 Linux 内核兼容性更好Docker 也能直接跑。装 Rocky Linux 强烈建议用 WSL 2因为 Rocky 本身更贴近服务器场景你可能要跑 systemd、要用 docker、要加载内核模块这些在 WSL 1 下都有各种各样的问题。WSL 2 的启动速度虽然比 WSL 1 略慢一点但换来的是几乎完整的 Linux 体验值。1.3 整体安装思路梳理WSL 装发行版常规路径就两条一条是走在线商店直接wsl --install -d 发行版名最简单但受限于微软商店的发行版列表另一条是手动导入先拿到一个发行版的 rootfs 镜像或 tar 包再用wsl --import把它塞进 WSL 里这种方式更自由Rocky Linux 属于商店列表之外的发行版所以离线导入这条路径反而是常规操作。后面章节我就按这两条线展开。在线方式省事离线方式通用两条路我都走通了你按自己的网络环境和需求挑一条就行。2. 安装前的准备与环境检查2.1 确认系统版本和 WSL 可用性安装 Rocky Linux 之前先确认你的 Windows 版本。WSL 2 需要 Windows 10 版本 2004 及以上或者 Windows 11。如果你还在用老版本建议先把系统更新到最新省得后面功能怎么开都报错。检查方式很简单在 Windows PowerShell 或 CMD 里输入wsl --status如果提示“未安装”说明还没启用 WSL。如果提示“默认版本: 2”之类说明 WSL 已就绪。这里我遇到过不少人是系统里装了旧版 WSL功能没开完全导致后面各种报错直接统一走一遍启用流程最稳妥。2.2 启用 WSL 相关 Windows 功能需要启用两个 Windows 功能虚拟机平台和适用于 Linux 的 Windows 子系统。管理员身份打开 PowerShell执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完重启系统。这里顺带强调一下VirtualMachinePlatform是 WSL 2 跑虚拟机的基础缺了它装完也只能用 WSL 1。有些精简版系统默认把这两个功能关了所以哪怕你之前装过 WSL也建议跑一遍确认开启。2.3 安装并更新 WSL 内核如果是从零开始最简单的办法是直接安装最新版 WSLwsl --install这个命令会自动启用所需功能并安装默认的 Ubuntu 发行版。但你只是想装 Rocky而且这个命令默认装的是 Ubuntu所以很多人不喜欢它。想只要 WSL 本身不要默认发行版可以先装回头删掉 Ubuntu 再导 Rocky。另外WSL 内核推荐升级到最新。旧版内核有时候和 Windows 版本不匹配启动会报wsl needs updating之类的错。执行wsl --update如果更新速度很慢或者卡住别慌后面问题排查部分我会专门讲。2.4 准备 Rocky Linux 的镜像文件因为 Rocky 不在微软商店默认列表里落地到实际操作多数人需要手动准备镜像。官方提供了 rootfs tar 包也有完整的容器镜像和虚拟机镜像。去 Rocky Linux 官网的 Downloads 页面找到 “Container Images” 或 “Cloud/OCI” 相关链接通常有 Docker Hub 或 Quay.io 上的镜像仓库。但 WSL 导入需要的是 rootfs 的 tar 包最简单的获取方式是从 Docker Hub 拉取。如果你本机已经装了 Docker Desktop可以这样操作docker pull rockylinux:9 docker export $(docker create rockylinux:9) --output rockylinux9-rootfs.tar如果没装 Docker也可以直接下载官方提供的 rootfs 压缩包。有人会在 releases 页面找到Rocky-9-container-base.tar.xz之类的文件下载后解压得到 tar。这里注意WSL 导入的格式要么是 tar要么是 tar.gz要么是 tar.xzwsl --import能直接识别 xz 压缩不用提前解压。但如果是 zip 就得先解压成 tar。我用的是 Rocky Linux 9版本号不是重点其他版本照方抓药就行。3. 在线安装 Rocky Linux 的完整流程3.1 使用 wsl --install 在线安装的限制先泼盆冷水wsl --install -d rockylinux这种命令在大多数版本的 WSL 上是行不通的因为微软商店列表里并没有 Rocky Linux。执行wsl --list --online看看就知道列表基本就是 Ubuntu、Debian、kali-linux、openSUSE、SUSE Linux Enterprise 等几个。所以在线安装 Rocky 通常要借助“先在商店里装某个发行版再手动换成 Rocky”这种曲线路径说实话并没什么必要。不过WSL 本身也是持续更新的未来有可能把 Rocky 加进官方列表所以保留一种可能如果你的 WSL 版本支持wsl --install -d rocky那直接执行就行。不支持的话请看下面的离线方案。3.2 通过商店安装然后再替换的变通方案这个方案我不想推荐给新手因为太绕还容易把系统搞乱。思路大概是先安装一个 Ubuntu然后在 Ubuntu 里下载 Rocky rootfs再导入为新实例。这本质上还是离线导入那为什么不一上来就直接导入所以真正想要的 Rocky 环境离线导入才是正路。3.3 在线方式适合谁在线方式只适合那种“WSL 官方商店恰好提供了 Rocky”的特定环境目前来看概率很低。我在这里写出来是想告诉你别浪费时间搜wsl --install -d rocky为什么报错了它不是你的问题是官方根本还没收录。干脆放弃在线路径走离线导入。如果你想装的是 CentOS 或 AlmaLinux思路也一样下载对应 rootfs然后导入。4. 离线安装 Rocky Linux实际上的主力方案4.1 获取 Rocky Linux 的 rootfs tar 包离线导入的核心是拿到一个合适的 rootfs 文件。我尝试过的路径里最可靠的是从 Docker Hub 拉取官方镜像再导出。步骤如下本机安装完 Docker Desktop 后打开 PowerShell执行docker pull rockylinux:9 docker create --name rocky-temp rockylinux:9 docker export rocky-temp -o rockylinux9.tar docker rm rocky-temp命令里docker create只创建容器但不启动docker export会把容器文件系统打成 tar。用这种方式拿到的 tar 包就是你 WSL 的 rootfs。如果你不想用 Docker也可以在网上找第三方的 Rocky rootfs 包但建议认准官方或知名仓库。rootfs 这个东西如果来路不明里面被人塞点奇怪的东西你根本察觉不到毕竟这是你本地开发环境安全第一。拿到rockylinux9.tar之后放到一个你记得住的目录比如D:\wsl\rockylinux9.tar。4.2 使用 wsl --import 导入实例导入命令格式是wsl --import 发行版名 安装目录 rootfs.tar的路径 --version 2发行版名随便起建议叫RockyLinux9安装目录是你要把这个发行版文件存放的地方比如D:\WSL\RockyLinux9rootfs 路径就是刚才的 tar--version 2指定用 WSL 2。我实际执行的完整命令wsl --import RockyLinux9 D:\WSL\RockyLinux9 D:\wsl\rockylinux9.tar --version 2导入过程根据 tar 包大小和磁盘速度大概几十秒到几分钟。完成后没有任何输出是正常的直接执行wsl -l -v能看到RockyLinux9的版本信息状态是Stopped。然后启动它wsl -d RockyLinux9此时你会看到root机器名:/#的提示符因为导入的 rootfs 默认是 root 用户而且没设密码。这里有个关键坑第一次启动后Rocky 里没有文本编辑器而且dnf可能因为软件源没初始化而报错。别慌后面我会说怎么处理。4.3 设置默认登录用户和密码直接用 root 开发风险很大建议创建一个普通用户。在 Rocky 的 root shell 里执行dnf install -y passwd sudo useradd -m -G wheel dev passwd dev接着在 Windows 侧设置默认用户让以后wsl -d RockyLinux9直接以 dev 身份登录。用管理员 PowerShell 执行RockyLinux9.exe config --default-user devWindows 对 WSL 发行版的可执行文件命名规则是发行版名.exe在系统 PATH 里能找到它所以直接调就行。执行完毕后关掉当前 WSL 会话重新wsl -d RockyLinux9应该就进入 dev 用户的 shell 了。4.4 初始化 dnf 和软件源刚导入的 Rocky rootfs 往往没有配置好的 yum 源或者源指向了国外速度感人。先看看有没有dnf repolist如果是空的就要手动创建一个源文件。Rocky 9 的源文件默认在/etc/yum.repos.d/下。最简单的方式是直接下载官方 repo 文件。如果网络通执行curl -o /etc/yum.repos.d/rocky.repo https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/rocky.repo如果网络不通也可以手动写一个极简源。后面章节我会放一个能用的配置。配置好后记得执行dnf clean all dnf makecache看到缓存完成就说明 dnf 已经能用可以dnf install vim sudo bash-completion之类的基础包了。4.5 启用 systemd可选但推荐Rocky 是服务器系统很多服务依赖 systemd。WSL 2 默认没有完整启用 systemd需要手动开启。方法是在/etc/wsl.conf里加[boot] systemdtrue然后退出 WSL在 PowerShell 里执行wsl --shutdown重启 WSLwsl -d RockyLinux9进去后验证systemctl is-system-running如果输出running或degraded就代表 systemd 已经可用。之后你就可以systemctl start nginx之类了。这一步对跑服务来说很关键建议一上来就配好。5. 安装后的核心配置与使用建议5.1 手动配置软件源让 dnf 飞起来我导入 Rocky 后第一次dnf install卡在原地半天不动然后超时。原因很简单rootfs 里没有合适的源或者用的默认源是海外地址。WSL 环境网络有时候也受墙影响但是咱们这里不讨论网络问题直接说怎么配一个可用的源。Rocky 9 官方源配置通常是这样的。创建/etc/yum.repos.d/rocky.repo内容参考[baseos] nameRocky Linux $releasever - BaseOS baseurlhttps://download.rockylinux.org/pub/rocky/$releasever/BaseOS/$basearch/os/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9 [appstream] nameRocky Linux $releasever - AppStream baseurlhttps://download.rockylinux.org/pub/rocky/$releasever/AppStream/$basearch/os/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9 [extras] nameRocky Linux $releasever - Extras baseurlhttps://download.rockylinux.org/pub/rocky/$releasever/extras/$basearch/os/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9写之前先确认/etc/pki/rpm-gpg/下有没有 GPG 密钥文件。如果导入的 rootfs 没带密钥可以先临时把gpgcheck0设为 0等能装包了再装rocky-repos这个包来恢复密钥。执行dnf install -y rocky-repos这个包本身来自 baseurl如果 baseurl 都没通就有点鸡生蛋的问题了。所以稳妥做法是先临时写一个带gpgcheck0的源等dnf makecache成功并且能装rocky-repos之后再改回gpgcheck1。5.2 配置静态 IP 与 Windows 互访WSL 2 天然支持 Windows 和 Linux 互相访问。从 WSL 里访问 Windows 主机可以用特殊主机名host.docker.internal或者用默认网关 IP。从 Windows 访问 WSL 里的服务直接用 localhost 就能通这是 WSL 2 的端口转发特性。如果你想让 Rocky 的 IP 固定下来可以在 WSL 2 里配置/etc/wsl.conf加入[network] generateResolvConf false然后手动设置 IP。但说实话WSL 2 的虚拟网卡 IP 在 Windows 重启后会变静态 IP 的配置比较麻烦而且官方没有提供很好的原生方案。如果你想给 Rocky 设置一个内网固定 IP可以写一个脚本在启动时用ip addr add添加。不过对于大多数开发场景WSL 的 IP 变化其实不影响使用因为你进出都是靠 localhost 或域名。所以除非有特殊需求否则可以忽略静态 IP 的问题。如果你一定要静态 IP可以这样在 Rocky 启动时用 ip 命令绑定一个新的 IP 到 eth0sudo ip addr add 192.168.50.2/24 dev eth0然后在 Windows 侧把对应的子网 IP 加给 vEthernet (WSL) 网卡。但是每次重启都要执行建议把命令写到/etc/rc.local或者 systemd 服务里。实测下来能用但和 Docker Desktop 等工具偶尔冲突所以不建议新手折腾。5.3 文件互通与编辑器字体体验WSL 根目录在 Windows 里的路径是\\wsl$\RockyLinux9从 Windows 资源管理器可以访问 Rocky 里的文件。反过来Rocky 里可以通过/mnt/c/访问 Windows 的 C 盘。开发时建议把项目文件放在 Windows 文件系统里然后从 WSL 里操作/mnt/c/xxx这样两边都能直接访问。注意跨文件系统的 IO 性能会差一些大量小文件操作尽量放在 WSL 自己的文件系统里。还有一个很多人在意的点在 WSL 里写代码时终端字体。微软的 Windows Terminal 默认等宽字体是 Cascadia Code我个人用下来觉得挺舒服但有人喜欢更接近 macOS 的体验会去装 JetBrains Mono 或 MesloLGS NF。WSL 终端字体是 Windows Terminal 客户端控制的和发行版关系不大。你只要下载一款 Powerline 字体然后到 Windows Terminal 设置里把终端字体改掉就行。我个人推荐 JetBrains Mono从 GitHub 下载后右键安装然后在 Windows Terminal 的配置文件里设置fontFace: JetBrainsMono Nerd Font。如果你想要那种 macOS 的圆润感还可以试试 IBM Plex Mono。但说实话字体这东西纯看个人喜好没必要神化某个方案。5.4 释放虚拟磁盘空间WSL 的一大坑是在 WSL 里删除文件Windows 侧虚拟磁盘文件.vhdx不会自动变小。wsl --shutdown之后在 PowerShell 里执行wsl --shutdown diskpart然后在 diskpart 里选择虚拟磁盘select vdisk fileD:\WSL\RockyLinux9\ext4.vhdx compact vdisk detach vdisk exit这个操作需要以管理员身份运行 PowerShell执行后可以回收未使用的空间。如果不处理虚拟磁盘会一直膨胀有时候能占掉几十 GB。这是 WSL 的通病但也不需要频繁做磁盘不够了再压缩一次。6. 常见问题与排查技巧实录6.1 wsl --update 太慢或卡住WSL 更新文件托管在微软服务器上偶尔会因为网络延迟导致下载很慢。如果你遇到wsl --update长时间不动可以先试wsl --update --web-download--web-download会从 GitHub 上直接下载最新的安装包而不是走 Microsoft Store 的更新通道。这个参数实测有时候比默认通道快很多。如果还是慢就去 GitHub 的 microsoft/WSL release 页面手动下载.msi包然后双击安装。安装后执行wsl --version确认版本号。6.2 wsl --list --online 显示连接超时有些精简版 Windows 或者内网环境访问微软在线列表会超时提示“操作超时”或“无法从线上源获取发行版列表”。其实这个列表只有在你想wsl --install -d 发行版名的时候才有意义。如果你已经决定走离线导入方案完全不用关心这个列表跳过即可。不用死磕它因为 Rocky 本来就不在这个列表里。6.3 wsl --install 提示已禁止 (403)这个错误很常见有个群里的人发截图wsl --install 已禁止(403)。原因一般是 Windows 商店服务没启动或者组策略限制了商店访问。解决方案是先打开 Microsoft Store 并登录然后再试试wsl --install。如果还不行可以用dism.exe手动启用功能然后下载 WSL 的 MSI 包安装彻底绕开商店。注意安装 WSL 功能本身不需要商店商店只是分发渠道而已。6.4 启动 Rocky 时报 “wsl needs updating” 或 “error_file_not_found”这两种报错通常是 WSL 内核版本太旧或 WSL 服务异常导致。先执行wsl --update wsl --shutdown然后重启 Rocky。如果还报error_file_not_found检查安装目录是不是被移动了或者杀毒软件把ext4.vhdx文件误删了。重新导入一次最干脆。6.5 dnf 安装包报 GPG 密钥错误前面提过rootfs 可能没带官方 GPG 密钥。解决办法rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9如果没有密钥文件先去源里拿。实在不行临时把 repo 文件的gpgcheck改为 0装完rocky-repos再改回来。6.6 systemd 启动失败或 cgroup 冲突在 WSL 里启用 systemd 之后偶尔会遇到服务启动失败日志里提示 cgroup 相关错误。这种问题大多和 WSL 版本有关先确保wsl --version是最新的。其次如果你同时运行着 Docker Desktop可能会抢占 cgroup 控制权导致 WSL 里 systemd 管理服务受限。解决办法是关闭 Docker Desktop 的 WSL 集成或者给 Rocky 单独保留命名空间。但这类问题不影响日常学习普通 dnf 操作和 shell 命令完全不依赖 systemd。6.7 从 WSL 里访问 Windows 目录权限不足默认情况下WSL 访问/mnt/c/时普通用户可能没有写入权限尤其是 C 盘根目录或系统目录。有两种解决办法一是修改 Windows 目录的权限二是在/etc/wsl.conf里加[automount] options metadata,umask22,fmask11然后重启 WSL。这样能让挂载的 Windows 目录带上 Linux 权限位普通用户对自己创建的目录就有完整权限。6.8 如何卸载 Rocky Linux 实例如果你哪天不想用了卸载命令异常简单wsl --unregister RockyLinux9这个命令会删掉整块虚拟磁盘包括里面所有文件不可恢复。删除前确认没有重要数据。另外吐槽一句网上有人花式“卸载干净 WSL”其实就是卸载 Windows 功能 删除用户目录下的.wslconfig 删除%LOCALAPPDATA%\Packages\下相关包目录但如果你只是不要 Rocky 实例--unregister就够了不用折腾系统。6.9 vscode 远程开发体验在 VSCode 里连接 WSL 的 Rocky 环境体验非常好。VSCode 官方有 “WSL” 扩展安装后左下角有个绿色的图标点击后选择 “Connect to WSL”再选 RockyLinux9就会启动一个新的 VSCode 窗口直接操作 Rocky 里的文件。代码提示、终端、调试器都默认跑在 Linux 环境里跟在真机上开发几乎没区别。有一点需要注意VSCode Server 会在 WSL 用户目录下自动下载安装如果你的 WSL 里网络不佳可能失败。这个时候可以考虑在 WSL 里手动下载 vscode-server 的 tar 包解压到指定目录不过现在新版本 VSCode 的兼容性好多了一般不折腾也能用。7. 一些我踩过之后才明白的细节装完 Rocky on WSL有几个小体会值得记下来。第一不要把 rootfs 文件放在 C 盘WSL 实例磁盘文件最好都丢到 D 盘这类容量大的分区否则 C 盘很容易爆。第二导入后第一件事不是装软件而是检查/etc/yum.repos.d/把源先弄好否则后面每一步都在等网络超时。第三wsl --shutdown你是 Windows 系统里的万能药WSL 里不管卡了什么关掉重启总能解决大部分初级问题。另外如果你打算长期用 Rocky 做主力开发建议把 Windows Terminal 的默认配置文件里加上 RockyLinux9 这个 profile这样每次打开终端就能一键进入 Rocky shell。具体做法是打开 Windows Terminal 设置添加新配置文件命令行填wsl.exe -d RockyLinux9图标可以指向 Rocky 的 logo平时用起来会顺手很多。最后再分享一个小技巧如果你想在 WSL 里测试 systemd 服务又怕搞挂系统可以复制一份 Rocky 实例也就是把原实例的目录复制一份再重新导入导入时叫RockyLinux9-test两个独立环境互不影响。我就是用这个办法测坏了就丢永不心疼。WSL 的玩法其实很多Rocky 只是其中一个选择但只要你把它跑通了后面在 Windows 上做 Linux 开发就能彻底安心了。