ARTICLE DETAIL

资讯详情

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

WSL安装Rocky Linux完整指南:从rootfs导入到systemd配置

WSL安装Rocky Linux完整指南:从rootfs导入到systemd配置 我一直觉得Windows 上最被低估的开发环境不是虚拟机而是 WSL。特别是当你同时要接触 Windows 桌面的日常工具、又要切到 Linux 命令行时WSL 能省掉一大半来回折腾的时间。这篇博文要聊的是在 WSL 里安装 Rocky Linux 的完整流程我会把三种可用的安装方法都拆开讲包括全程不依赖在线商店的离线导入方式以及安装完成后必须做的 systemd、账号、网络和日常使用配置。这事适合谁适合这几类人服务器运维想从 CentOS 平滑迁移到 Rocky Linux又不想为了测试就把本机系统重装的开发人员需要在 Red Hat 系环境里做编译、跑服务、验证脚本的还有学生党或技术爱好者想在 Windows 笔记本上快速搭一个 RHEL 系试验场。即使你之前完全没用过 WSL只要跟着前面几步把 WSL 基础环境搭好后面 Rocky Linux 的安装也不会有太多门槛。我不会一开始就丢出几十条命令让你复制。我会先解释为什么推荐用某个方案、它避免了什么坑再给可直接照抄的步骤。因为下载慢、403、导入失败这类问题绝大多数都是方案选错或没理解 WSL 的机制造成的。1. 为什么要把 Rocky Linux 装进 WSL1.1 三类最适合用这套组合的人群先说说我自己的场景我手上既有 Ubuntu 的日常开发机也有一批使用 Rocky Linux 的服务器。平时写好的 systemd 服务、Ansible 脚本、Nginx 配置在 Ubuntu 里测完之后经常到了服务器上还要重新调一遍。在本地 WSL 里装一个 Rocky Linux 后RHEL 系特有的dnf包管理、firewalld、SELinux 这些都能提前在 Windows 上验证省下的不只是时间还有到生产环境才发现问题的尴尬。第二个常见场景是 CentOS 用户做技术迁移测试。CentOS 调整维护策略后很多团队把生产环境转向 Rocky Linux。迁移本身不复杂但配置总是要人先试一遍。WSL 里的 Rocky Linux 最适合当这个“试验田”环境干净、快照方便、删了重来几乎零成本不用专门准备一台虚拟机。第三个场景是我比较看重的学习 Red Hat 系列认证和做实验。Rocky Linux 完全兼容 RHEL 生态考 RHCSA、RHCE 的同学经常需要练习 SELinux、firewalld、dnf 源管理。在 WSL 里跑一个 Rocky Linux既能用 Windows 做笔记、录屏又能直接用 Linux 终端操作学习效率比双系统高很多。1.2 WSL 和虚拟机、双系统到底差在哪有人会问为什么不用 VirtualBox 或者 VMware虚拟机当然是正规方案但它的代价是“整个操作系统都在虚拟化层里跑”内存占用高、启动慢、文件交互还要配置共享文件夹。双系统就更不用说了切换一次要重启机器日常工作流直接中断。WSL 2 用的是轻量级虚拟机加原生内核但它不像传统虚拟机那样需要完整模拟硬件。它让 Linux 发行版跑在一个由 Windows 管理的虚拟磁盘VHD里通过 9P 协议与 Windows 文件系统交互启动速度接近原生命令Windows 和 Linux 的文件可以在同一路径下互相访问。对我来说写代码、跑服务这种高频轻量操作WSL 的体验已经足够好。另外 WSL 2 的发行版可以做到几分钟内删除和重建这对反复测试环境非常有价值。虚拟机一般几十甚至上百 GB而 WSL 的 VHD 默认是动态增长初始占用可能只有几百 MB对一个实验系统来说资源成本低得多。1.3 WSL 1 和 WSL 2 怎么选千万别选错这里必须先把 WSL 1 和 WSL 2 的区别说清楚因为后果在后面能看到。WSL 1 是通过系统调用映射模拟 Linux 接口文件 IO 反而快但很多完整内核功能不支持比如 Docker 容器、systemd早期版本、FUSE 文件系统等。WSL 2 是真正的轻量级虚拟机内核完整兼容性好是目前唯一值得推荐的选择。判断当前用的是 WSL 1 还是 WSL 2 很简单在 PowerShell 里执行wsl -l -v输出里有一列“VERSION”如果是 1可以执行wsl --set-version 发行版名 2升级前提是 Windows 功能里的“虚拟机平台”已经开启。后面安装 Rocky Linux 时我们也默认使用--version 2参数确保用上完整内核。2. 装 Rocky Linux 前的准备工作2.1 先确认 Windows 版本和支持状态网上很多教程直接教命令但很多人第一步就卡住了因为版本不对。WSL 2 对 Windows 版本是有要求的Windows 10 2004 及以上或者 Windows 11 任意版本。更准确地说虚拟机平台功能只在 64 位 Windows 10 1903 后的版本里稳定提供所以如果你还在用很老的 Windows 10建议先升级到 22H2 再继续。我建议你在 PowerShell 里先看下系统版本winver弹窗里会显示完整的 Windows 版本号。如果是 Windows 10 2004 以上或 Windows 11就可以放心往下走。老版本的系统装 WSL 也不是完全不行但会遇到更多奇怪问题比如内核组件缺失、启动报错没有特殊理由就不要挑战了。2.2 启用 Windows 功能模块这一步是很多“安装失败”问题的根源。WSL 依赖两个 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第一条命令开启 WSL 功能第二条开启虚拟机平台WSL 2 必须依赖后者。执行完以后一般需要重启电脑。如果你用的是较新的 Windows 11也可以直接执行wsl --install这条命令默认会把需要的功能、内核、WSL 组件全部装好省去手动开功能的麻烦。需要提醒的是有些机器在开启“虚拟机平台”时需要 BIOS 里开启虚拟化Intel VT-x 或 AMD-V否则后面启动 WSL 会直接报错。你要是第一次装先去任务管理器-性能-CPU看一下“虚拟化”状态是否是“已启用”。2.3 初始化 WSL先让一个基础发行版能正常跑起来很多 WSL 新手会卡在一个问题上wsl --install之后不知道装了什么、从哪里进去。我的建议是第一步先不要面向 Rocky Linux而是先装一个最常见的 Ubuntu 发行版把 WSL 的可用性验证一遍再装 Rocky Linux排查难度会低很多。在管理员 PowerShell 里执行wsl --install -d Ubuntu-24.04如果想看系统还有哪些发行版用wsl --list --online装完后按提示设置 Unix 用户名和密码然后执行wsl进入系统。确认 Ubuntu 能正常启动后说明 WSL 的核心机制没问题。接下来无论用哪种方式安装 Rocky Linux基础环境都是可靠的。2.4 把 WSL 更新到最新版本WSL 本身也在频繁更新老版本可能连wsl --install的参数都不完整或者不支持.wslconfig里的高级设置。我在 Win11 上遇到过 WSL 版本过旧的提示后面没有选择在线更新而是直接到微软官方商店更新“Windows Subsystem for Linux”应用或者用wsl --updatewsl --update原则上是自动下载最新版但有时候会卡在“正在检查更新”或者下载极慢。这时可以强制指定版本重新安装去微软商店里搜索 WSL 并更新或者手动下载 WSL 的 MSI 安装包因为商店和 MSI 是两个分发渠道哪个快就用哪个。绝大多数 WSL 版本过旧问题在更新后立刻消失。3. 安装 Rocky Linux 的详细步骤3.1 方案 A在线安装最省事但看运气先给一个最理想的路径如果你的wsl --list --online列表里能看到 Rocky Linux 条目安装就跟 Ubuntu 一样简单wsl --install -d RockyLinux不同时期微软在线商店收录的发行版有变化我这边有一段时间列表里没有 RockyLinux所以这个方法不是每次都成立。如果执行后提示找不到发行版或者列表里根本没有就老老实实往下走方案 B那个办法不受在线商店限制。在线安装的最大优势是会帮你处理发行版的默认用户、WSL 初始化流程之后直接进系统就能创建普通用户。缺点是依赖网络和微软商店的可用性一旦遇到 403 或连接超时你就会想摔键盘。3.2 方案 B从容器镜像导出 rootfs 再导入最推荐这是我最推荐的方式因为不依赖微软在线商店只要你能下载一个 rootfs 的 tar 包就行。Rocky Linux 官方没有发布面向 WSL 的包但我们可以通过容器镜像来拿到一个干净的根文件系统这本质上就是 WSL 发行版需要的东西。先准备 DockerWindows 上装 Docker Desktop 即可。如果你手头没有任何 Docker 环境也可以在任意一台 Linux 机器上完成下面的导出然后把 tar 文件拷到 Windows 上再导入。第一步拉取镜像。Rocky Linux 官方镜像在 Docker Hub 上有两个常用仓库rockylinux和rockylinux/rockylinux我用的是后者docker pull rockylinux/rockylinux:9.5第二步创建一个临时容器但不启动它然后导出 rootfsdocker create --name rocky-tmp rockylinux/rockylinux:9.5 docker export rocky-tmp -o rocky9-rootfs.tar docker rm rocky-tmpdocker export导出的是容器文件系统快照相比docker save的镜像层结构前者更适合 WSL 这种需要完整根文件系统目录的场景。第三步在 Windows 上建一个专门放发行版数据的目录然后执行导入。比如我在 D 盘建了D:\WSL\Rocky9mkdir D:\WSL\Rocky9 wsl --import Rocky9 D:\WSL\Rocky9 D:\rocky9-rootfs.tar --version 2这里的Rocky9是你在 WSL 里给这个发行版起的名字后续所有命令都会用到。D:\WSL\Rocky9是发行版文件存放位置建议放在空间充足的盘不要在 C 盘系统盘上堆太多。导入完成后启动wsl -d Rocky9默认进入的是 root 用户因为容器镜像是 root 身份。要创建一个日常使用的普通用户可以在 WSL 里执行useradd -m -G wheel rocky passwd rocky然后编辑/etc/wsl.conf加入默认用户配置[user] defaultrocky改完后在 PowerShell 执行wsl --shutdown再重新进入默认用户就会变成 rocky。3.3 方案 C从 ISO 提取 rootfs留给爱折腾的人从 ISO 提取也是一种可行的离线方案但我必须先说一句不推荐新手折腾。ISO 里包含的东西非常多DVD 镜像动辄 4-5GB而且里面没有一个现成的“根文件系统”文件需要你从安装环境或最小化系统里整理出来。如果你真的想走这条路大致思路是先去 Rocky Linux 官网下载 boot ISO 或 DVD ISO比如 8.10 或 9.x 版本的镜像文件名通常是Rocky-8.10-x86_64-minimal.iso或Rocky-9.x-x86_64-dvd.iso也可以从各类开源镜像站拉取。拿到 ISO 后在 Linux 环境里用mount或7z解包再通过容器或者dnf --installroot的方式生成一个最小 rootfs。整个过程比方案 B 复杂得多还要保证和宿主架构一致。所以我的建议是不是有特殊离线需求或者纯粹想研究镜像结构就选择方案 B。容器镜像本身就是为分发完整文件系统设计的质量和可重复性都更好。3.4 三种方案对比怎么选方案依赖条件难度推荐度A. 在线安装微软商店收录了 RockyLinux最低看运气B. 容器镜像导入有 Docker 或能拿到 tar 包低最推荐C. ISO 手工提取要 Linux 环境和 ISO 处理经验高不推荐我个人的习惯是给普通朋友只推方案 B。因为它的每一步都是可预期的网络出问题也只是下载 tar 这一步不会在微软商店环节卡死。而且以后想换 Rocky Linux 的小版本比如从 9.4 换到 9.5只需要重新拉镜像、导出、导入命名成新名字旧环境还能保留。4. 安装完成后的初始化配置4.1 检查版本、设置时区和常用软件进入 Rocky Linux 后第一件事我建议检查一下系统版本和软件源。容器镜像的源一般是指向官方仓库的在某些网络环境下可能会很慢。你可以把源换到访问速度更好的镜像站点但这里要提醒一句改源之前先备份而且要用dnf makecache验证新源是否可用。cat /etc/rocky-release dnf repolist时区设置很关键尤其是你后面要写定时任务、跑日志的时候。WSL 默认时区经常是 UTC比北京时间慢 8 小时非常容易让人误判日志时间。执行下面命令改成上海时区timedatectl set-timezone Asia/Shanghai容器镜像默认不带太多工具建议先装上常用命令包后面所有操作都会少踩坑dnf install -y vim wget curl tar gzip bash-completion net-tools bind-utils4.2 启用 systemd这是现代 Linux 的底线这是 WSL 里经常被忽略的一步。Rocky Linux 的默认初始化进程是 systemd系统服务systemctl start nginx、systemctl enable sshd都靠它管。但是 WSL 早期版本不启动 systemd所以你在容器镜像导入的 Rocky 里执行systemctl会报错提示系统不是用 systemd 作为 init 启动的。解决办法是编辑/etc/wsl.conf加上 boot 段[boot] systemdtrue保存后回到 Windows执行wsl --shutdown然后再进入 Rocky Linuxps -p 1 -o comm如果输出是systemd说明 systemd 已经接管了 init 进程。之后就可以愉快地使用systemctl enable --now sshd这类命令了。这个配置是整个使用体验的分水岭不做的话很多服务管理相关的教程都跟不上。4.3 网络模式选择从 NAT 到 mirroredWSL 2 默认使用 NAT 网络Linux 子系统在 Windows 的虚拟网段里有自己的独立 IP。这样带来一个常见问题Windows 和其他机器要访问 Linux 里的服务需要端口转发而且 IP 每次重启都可能变。对于想固定 IP 的同学我建议在 Windows 用户目录下的.wslconfig文件里做一次网络模式升级。在C:\Users\你的用户名\.wslconfig中写[wsl2] networkingModemirrored [experimental] hostAddressLoopbacktruemirrored模式是较新版本 WSL 提供的特性让 Linux 直接复用 Windows 的 IP 地址Linux 服务会出现在同一张网卡上访问localhost就能直达不需要再手动配置端口转发。这对动态 IP 和静态 IP 都不敏感的日常开发场景是个很大优化。如果你已经习惯旧的 NAT 模式只想让 IP 固定一点也可以尝试在 Linux 里写一个启动脚本用ip addr add把指定的 IP 绑定到 WSL 的网卡上但每次 Windows 重启后需要重跑复杂度高不少我不太推荐。4.4 配置 SSH、开发环境和常用工具从容器镜像导入的 Rocky Linux 默认是没有安装 SSH Server 的因为容器通常不需要它。但就在 WSL 里当开发机来说SSH 还是有用的方便你用 VS Code 连接、从其他设备远程登录。安装和启动 SSHdnf install -y openssh-server systemctl enable --now sshd如果你打算在 WSL 里写代码推荐装 VS Code 的 WSL 扩展这样在 Windows 端打开 VS Code会自动在 WSL 侧启动一个 server文件的加载、编译、调试都以 Linux 环境为准体验非常接近直接在 Linux 主机上开发。字体方面我个人更偏爱 JetBrains Mono 这种接近 macOS 等宽体验的字体。在 Windows Terminal 的配置里把字体设为 JetBrains Mono开启连字在 WSL 里看代码时那种清爽感比默认的 Consolas 强很多。这个纯属个人审美但想追求更顺眼的命令行体验值得花两分钟。文件交互也值得提一句。你在 WSL 里想打开当前目录到 Windows 资源管理器直接执行explorer.exe .同样地Windows 的下载目录等路径也可以通过/mnt/c/Users/你的用户名/Downloads直接访问。WSL 和 Windows 共享文件时没有虚拟机那种“共享文件夹”的割裂感这是我很喜欢的一点。如果需要做固件分析或逆向相关的工作Rocky Linux 里可以直接装dnf install -y binwalk在 WSL 里跑这类工具文件交互比传统虚拟机顺畅解压、分析、出报告都可以直接对 Windows 目录里的文件操作。另外提醒一句如果你看到类似libreoffice_7.4.7.2_linux_x86-64_rpm这种本地 RPM 包安装时可以直接dnf install ./libreoffice_7.4.7.2_linux_x86-64_rpm或者先放到 WSL 目录里再装没必要非得用双系统或虚拟机。4.5 在 WSL 里用 GPU配置 CUDA 的前置条件如果你在 Rocky Linux WSL 里跑 CUDA 相关程序有一个好消息和一个需要提前准备的事。好的是 WSL 2 天然支持 GPU 加速Windows 侧的 NVIDIA 驱动会被 WSL 自动接管Linux 侧不需要单独装显卡驱动。需要准备的是在 Rocky Linux 里安装 CUDA Toolkit。NVIDIA 官网提供了针对 RHEL 系发行版的仓库配置装完后用dnf install cuda就能装。装完以后验证是否生效最直接的办法就是执行nvidia-smi如果能看到 GPU 信息说明 WSL 的 GPU 直通已经工作。要注意的是WSL 里的显存由 Windows 统一管理nvidia-smi里的显存数值并不完全等于物理显存剩余这是 WSL 的机制决定的不用太纠结。4.6 内存、CPU、磁盘的资源管理WSL 2 默认会占用不少内存。Windows 默认可以拿走整机内存的一半左右给 WSL编译大型项目时可能拖慢 Windows。如果只是轻量使用可以在.wslconfig里限制资源[wsl2] memory4GB processors4 swap2GB改完执行wsl --shutdown让配置生效。这里要提醒不要给得太少否则 dnf 更新或编译时内存不够会导致 OOM反而更折腾。4GB 是开发机比较平衡的底线如果机器内存本身就 16GB 以上给 8GB 都没问题。磁盘方面WSL 的 VHD 文件会随使用膨胀删了文件也不一定自动收缩。如果你发现 C 盘空间莫名其妙少了可以先在 PowerShell 里折腾一下 VHD。新版本 WSL 支持wsl --manage Rocky9 --set-sparse true这个命令会把 VHD 标记为稀疏文件让未使用空间返还给 Windows。旧版本没有这个命令时通常用diskpart压缩 VHD但那个操作更麻烦所以能升级 WSL 还是升级一下。5. 高频坑盘点我踩过的雷别再踩一遍5.1 wsl --install 提示“已禁止(403)”这是我在新电脑上第一次装 WSL 时经常见到的报错wsl --install 已禁止(403)。出现这个提示通常不是因为命令本身错了而是 Windows 应用商店相关服务不可用或当前系统策略禁止从商店下载分发。我的处理步骤很简单先单独执行wsl --update如果更新也是 403就改为手动下载 WSL 的 MSI 安装包或者打开微软商店更新“Windows Subsystem for Linux”应用。之后再回来执行wsl --install -d Ubuntu-24.04大概率就正常了。核心思路是绕开商店下载直接把 WSL 的运行时组件装好剩下只是获取发行版文件。5.2 wsl --list --online 连接超时或列表为空在线列表查询会访问网络如果连接超时列表自然出不来。遇到这种情况我不建议反复重试那是浪费时间。直接走第 3 节的方案 B用 Docker 导出 tar 导入完全绕开--list --online。这条经验是我摔了两次之后才悟到的在线商店只是一个便利渠道不是必需渠道。另外有些过旧的 WSL 版本根本不支持--list --online参数会提示未知选项。这也不是网络问题而是版本问题先wsl --update再试。如果你已经处于一个连更新都困难的环境就用 tar 导入方案一步到位。5.3 WSL 下载慢到怀疑人生不少人也遇到过wsl --install下载发行版或wsl --update更新时速度极慢的问题。这和网络环境、CDN 节点都有关系。我试过的有效手段包括先关闭防火墙或安全软件试一次有时候是它们拦截了并发连接换个网络环境比如从无线切到有线或者用手机热点不要笑热点有时候反而快以及直接找一个 rootfs tar 包用导入方式安装。导入方式之所以能规避下载慢是因为发行版 tar 包通常放在镜像站上你可以选择合适的镜像源下载速度比商店 CDN 稳定不少这又是方案 B 值得一提的实际优势。5.4 WSL 版本过旧和 error_file_not_found这两个报错放在一起说因为它们都指向同一个问题WSL 底层组件太老或损坏。具体表现一个是提示你的 WSL 版本过旧要求更新另一个是启动发行版时报error_code: WSL/service/createinstance/createvm/hcs/error_file_not_found。我的修复路径是先以管理员身份执行wsl --shutdown然后wsl --update如果更新失败直接卸载 WSL 组件后重新安装或者从商店更新。error_file_not_found有时候也可能是因为 Windows 的 Hyper-V 服务没起来可以在管理员 PowerShell 里执行bcdedit /set hypervisorlaunchtype auto并重启。这个命令会影响虚拟机监控程序的启动策略重启前请确保了解后果。5.5 systemd 启用了但服务还是起不来有时候/etc/wsl.conf写了systemdtrue重启后systemctl也能用了但部分服务还是失败。经验是容器镜像不一定带dbus而很多服务依赖它。先安装一下dnf install -y dbus systemctl start dbus另外SELinux 在容器 rootfs 里有时候会是 disabled 或 permissive 状态。如果要做 SELinux 相关实验先看getenforce如果显示 Disabled没有/etc/selinux/config你就要自己补上 SELinux 的配置和策略包这本身又是一个很深的主题。建议先确认自己的目标是“跑服务”还是“学 SELinux”前者建议保持 permissive后者建议在完整虚拟机里做WSL 对 SELinux 的部分支持有限。5.6 删除文件后 VHD 不释放占用的空间这个问题在长期使用 WSL 后几乎都会遇到。你在 Linux 里删掉几十 GB 的构建缓存Windows 里的 C 盘空间却一点没回来因为 VHD 文件只增不减。WSL 新版本用wsl --manage 发行版名 --set-sparse true就能解决原理是把 VHD 转换成稀疏文件未用块归还原文件系统。如果你用的 WSL 版本不支持这个命令就只能用 diskpart 了。大致流程是diskpart选择虚拟磁盘文件然后compact vdisk。操作前最好先wsl --shutdown并且确认没有重要未保存数据。这个坑很经典强烈建议提前做好别等 C 盘爆红再处理。还有一个常见的清理需求是彻底卸载 WSL 里的某个发行版。如果你不再需要 Rocky9 了最简单的方式是wsl --unregister Rocky9这个命令会把该发行版的全部文件和配置一起删除配合删除D:\WSL\Rocky9目录就是真正意义上的干净卸载。5.7 常见问题速查表现象主要原因快速处理wsl --install 返回 403商店下载通道问题手动装 WSL MSI 或商店更新在线发行版列表为空/超时网络或 WSL 版本过旧改用容器镜像 tar 导入更新下载极其缓慢CDN 节点网络问题换网络或手动下载安装包WSL 版本过旧WSL 组件版本太低wsl --update / 商店更新error_file_not_foundHyper-V 服务异常检查启动类型并重启systemctl 不可用未启用 wsl.conf 的 systemd开 systemdtrue 并 shutdown服务启动失败缺少 dbusdnf install dbus磁盘空间不释放VHD 未压缩使用 set-sparse 或 diskpart6. 最后聊几句使用心得我在 WSL 里用 Rocky Linux 也有一段时间了越用越觉得这套组合适合做“第二系统”。它不是用来替代真正的服务器的而是在你笔记本上提供一个和服务器几乎一致的验证环境。我自己最常用的工作流是打开 Windows Terminal默认进 Rocky Linux用 dnf 管理包、用 systemctl 管理服务、再配合 VS Code 的 WSL 扩展改代码整个过程没有虚拟机的割裂感。最后再分享一个小技巧如果你需要多个干净环境不需要反复重装只要把导入好的发行版目录复制一份再执行wsl --import指向副本就能得到全新的同名副本。比如D:\WSL\Rocky9复制成D:\WSL\Rocky9-test重新导入一次测试完删除导入记录和文件夹就行半小时内就能完成一整套环境孵化。这个方法对做实验、比对软件源配置、测试 Ansible 脚本特别实用算是我这一两年没往外说的私藏操作今天一起给你了。
返回列表