WSL2

双系统的尽头 WSL

准备工作windows11(开启 WSL2 & 虚拟机平台)

  1. 开始菜单 搜索“启用或关闭 Windows 功能”,勾选:

    适用于 Linux 的 Windows 子系统

    虚拟机平台 (Virtual Machine Platform) 点击“确定”,按提示重启电脑

  2. (可选)开启 Hyper-V(不是必需,某些专业/企业版可用):

    Hyper-V 平台Hyper-V 管理工具

1、安装最新 WSL 内核 & 设置默认版本为 WSL2

管理员 身份打开 PowerShell:

1
2
# 首次安装 WSL 组件 & 默认发行版(如 Ubuntu)
wsl --install
1
2
# 更新到最新 WSL 内核
wsl --update
1
2
# 将默认 WSL 版本设置为 2
wsl --set-default-version 2
1
2
# 查看已安装发行版及其版本
wsl -l -v

看到 WSL version: 2 或列表中 VERSION 列为 2,即表示使用 WSL2。

2、安装 ArchWSL

方式 A:离线稳定版(推荐)
  1. 从 ArchWSL 官方 Releases 下载 Arch.zip

    1
    https://github.com/yuk7/ArchWSL
  2. 解压到你希望保存的位置,例如:D:\WSL\Arch\ 解压后应包含:Arch.exe 与 rootfs.tar.gz

  3. 双击运行 Arch.exe 终端显示:

    1
    2
    Installing...
    Installation Complete!

    当提示:Press enter to continue……时回车结束安装

为何推荐 Arch.zip:

  • 完全离线、可控;
  • 不依赖证书签名;
  • 可自定义安装目录;
  • 出问题时更容易手动迁移/备份。
方式 B:应用包(AppX)安装
  1. 下载 ArchWSL-AppX_x64.appx 与 对应 .cer证书

  2. 先双击安装 .cer 到“受信任的根证书颁发机构”

  3. 再右键 .appx → 安装

  4. 开始菜单中将出现 ArchWSL 图标

方式 C:命令安装(可能不可用)
1
wsl --install archlinux

某些环境可能找不到官方 Arch 发行版,此时请使用 方式 A

3、首次进入 ArchWSL:创建普通用户并授予 sudo(可跳过用root用户使用)

进入 Arch(开始菜单或 Arch.exe ),在 root shell 中执行:

1
2
3
4
# 1) 创建普通用户(将 "hui" 替换为你的用户名)
useradd -m -G wheel hui
# 设置密码
passwd hui
1
2
3
4
5
6
7
# 2) 授予 wheel 组 sudo 权限(使用 visudo 更安全)
nano /etc/sudoers
# 找到并取消注释以下行(去掉开头的 #)
# %wheel ALL=(ALL) ALL

# 默认是没有 vim,可先用 nano
# 修改过后Ctrl+O回车保存,Ctrl+X退出

设置默认登录用户为新用户(在 Windows 中):

1
2
# 假设 Arch.exe 在 D:\WSL\Arch\
D:\WSL\Arch\Arch.exe config --default-user hui

下次启动 ArchWSL 将直接进入 hui 账户

4、pacman 密钥初始化与修复

首次安装后,务必先完成密钥初始化,否则 pacman 无法正常安装/更新

root 运行(sudo -i

1
2
# 1) 初始化 keyring
pacman-key --init
1
2
# 2) 导入 Arch 官方签名密钥
pacman-key --populate archlinux
1
2
# 3) 立刻更新 keyring 包(关键!)
pacman -Sy archlinux-keyring

如果 pacman-key --init 很慢,属于 WSL 熵源不足常见现象;耐心等待或多次尝试。

5、可选优化:镜像源/代理/WSL 配置

1.pacman 镜像源

编辑 /etc/pacman.d/mirrorlist,将速度更快的镜像放到顶部:

1
sudo nano /etc/pacman.d/mirrorlist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## China
Server = https://mirrors.aliyun.com/archlinux/$repo/os/$arch
Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.hit.edu.cn/archlinux/$repo/os/$arch
#Server = https://mirrors.hust.edu.cn/archlinux/$repo/os/$arch
#Server = https://mirrors.jcut.edu.cn/archlinux/$repo/os/$arch
#Server = https://mirrors.jlu.edu.cn/archlinux/$repo/os/$arch
#Server = https://mirrors.jxust.edu.cn/archlinux/$repo/os/$arch
#Server = https://mirrors.neusoft.edu.cn/archlinux/$repo/os/$arch
#Server = https://mirrors.nju.edu.cn/archlinux/$repo/os/$arch
#Server = https://mirror.nyist.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.qlu.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.shanghaitech.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.sjtug.sjtu.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
#Server = https://mirrors.wsyu.edu.cn/archlinux/$repo/os/$arch
#Server = https://mirrors.xjtu.edu.cn/archlinux/$repo/os/$arch
2.pacman.conf开启32位
1
sudo nano /etc/pacman.conf
1
2
3
4
5
[multilib]
Include = /etc/pacman.d/mirrorlist

[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch

保存后执行

1
sudo pacman -Sy archlinuxcn-keyring

[!IMPORTANT]

稳定更新流程(防 pacman -Syyu 闪退)

不要直接在 ArchWSL 里 pacman -Syyu 全量猛更,可能导致 glibc/bash 被热替换而 WSL 闪退
请使用 root 进行以下 分阶段、可恢复 的流程:

1
2
# 步骤 1:确保 keyring 最新
pacman -Sy --noconfirm archlinux-keyring
1
2
# 步骤 2:先更新非核心包(忽略危险包)
pacman -Syu --ignore=glibc,filesystem,bash,coreutils
1
2
# 步骤 3:单独更新核心包(一次装完)
pacman -S --noconfirm glibc filesystem bash coreutils
1
2
3
# 步骤 4:清理缓存(可选)
paccache -r # 清理旧版本包缓存
pacman -Sc # 清理未使用的包文件

说明:

  • 为什么忽略 glibc/filesystem/bash/coreutils? 这些在 WSL 中被正在运行的进程依赖,直接替换容易导致崩溃;分步更新能显著降低风险
  • 若你曾经直接 -Syyu 导致“闪退”,请重开一个 管理员 PowerShellwsl -d Arch -u root,然后按上述步骤修复

6、让 WSL 使用 Windows 代理

1.在 WSL 中获取 Windows 主机 IP(WSL NAT 下):
1
2
grep -m1 nameserver /etc/resolv.conf | awk '{print $2}'
# 假设输出 172.27.240.1

临时设置代理(以 Clash 默认端口 7890 为例):

1
2
3
export http_proxy="http://172.27.240.1:7890"
export https_proxy="http://172.27.240.1:7890"
export all_proxy="socks5://172.27.240.1:7890"

写入 ~/.bashrc 动态生效(每次启动自动识别当前 IP):

1
2
3
4
5
6
7
8
9
10
cat >> ~/.bashrc <<'EOF'

# --- Windows Proxy for WSL (auto) ---
winip=$(grep -m1 nameserver /etc/resolv.conf | awk '{print $2}')
export http_proxy="http://$winip:7890"
export https_proxy="http://$winip:7890"
export all_proxy="socks5://$winip:7890"
EOF

source ~/.bashrc
2.配置 .wslconfig(内存/交换/端口转发)

Windows 11 新建/编辑:%UserProfile%\.wslconfig

1
2
3
4
5
[wsl2]
memory=6GB
swap=2GB
localhostForwarding=true
# networkingMode=mirrored # 可选:Win11 新版 WSL 支持镜像网络

应用新配置:

1
wsl --shutdown

下次进入 WSL 生效

7、备份 / 恢复 / 迁移 / 卸载

1.备份当前发行版(在 PowerShell)

确认发行版名称(区分大小写):

1
wsl -l -v

例:Arch、Ubuntu-22.04、Debian等确保发行版处于停止状态(避免备份时写入变化):

1
wsl --terminate Arch    # 将 Arch 换成你的发行版名

确保目标磁盘有足够空间(至少比 Linux 根分区使用量大 10–20%)

备份命令(带时间戳)

1
2
# 1) 生成时间戳(如 20251007-1410)
$stamp = Get-Date -Format "yyyyMMdd-HHmm"
1
2
# 2) 可选:创建备份目录
New-Item -ItemType Directory -Force -Path "D:\WSL\backup" | Out-Null
1
2
# 3) 导出(把 Arch 换成你的发行版名)
wsl --export Arch "D:\WSL\backup\ArchWSL-$stamp.tar"

[!TIP]

验证(可选)

  • 看到命令执行结束且无报错,目标目录下出现 .tar 文件,检查文件大小是否合理(一般数 GB 以上)

  • 可用 tar(或 7-Zip)测试读取:

    1
    tar -tf "D:\WSL\backup\ArchWSL-$stamp.tar" | Select-Object -First 20

(可选)Windows 11自带 tar 不直接产出 .tar.gz你可以用 7-Zip 压缩成 .7z.zip

1
2
# 安装了 7-Zip 的情况下(示例路径可能不同)
& "C:\Program Files\7-Zip\7z.exe" a "D:\WSL\backup\ArchWSL-$stamp.tar.7z" "D:\WSL\backup\ArchWSL-$stamp.tar"
2.从备份导入为新的发行版(迁移/克隆)

.tar 备份创建一个新的 WSL 发行版(名称自取),这等同于克隆/迁移。确定新的发行版名称,且当前系统中尚未存在同名发行版(可用 wsl -l -v 查看)

提前创建安装目录(建议放到你希望的目标盘/路径;该目录将持久存放此发行版的虚拟磁盘与数据):

1
New-Item -ItemType Directory -Force -Path "D:\WSL\Arch-Clone" | Out-Null

导入

1
2
# --import <新名称> <安装目录> <备份tar> --version 2
wsl --import Arch-Clone "D:\WSL\Arch-Clone" "D:\WSL\backup\ArchWSL-20250101-1200.tar" --version 2
1
2
# 查看是否导入成功
wsl -l -v

参数解释:

  • Arch-Clone:新发行版显示名称(可自定义)
  • D:\WSL\Arch-Clone:新发行版的数据目录(你指定的位置)
  • ArchWSL-20250101-1200.tar:之前导出的备份文件
  • --version 2:显式指定以 WSL2 创建
3.卸载(彻底移除一个发行版)
1
2
# 1) 确保该发行版已停止
wsl --terminate Arch
1
2
# 2) 注销(不可恢复!会删除该发行版的虚拟磁盘及其全部 Linux 数据)
wsl --unregister Arch

执行成功后,wsl -l -v 中将不再出现该发行版

[!IMPORTANT]

清理残留(按你的安装来源不同处理)

3.1 通过 wsl --import 创建的发行版
其数据目录就是你当初 --import 时指定的路径(如 D:\WSL\Arch-Clone
--unregister 仅注销发行版,但不会删除这个目录
你可手动删除该目录来释放空间

3.2 通过 Microsoft Store / AppX 安装的发行版

1
%LOCALAPPDATA%\Packages\<发行版包名>\LocalState\

--unregister 后该 LocalState 目录会被清理;若仍有残留,可手动删除对应包目录(谨慎)

3.3 通过 ArchWSL 的 Arch.zip(手动运行 Arch.exe)安装
你的安装目录(放置 Arch.exe 的位置)就是虚拟磁盘位置
通常 --unregister 会删除相应虚拟磁盘。如果你另外在磁盘上保留了安装器文件夹(含 Arch.exerootfs.tar.gz 等),可手动清理这些安装文件


WSL2
http://huishao.net/2025/10/07/折腾archwsl2/
作者
huishao
发布于
2025年10月7日
许可协议