WSL2 的使用教程

loskyertt Unknown

1.安装和升级 WSL2

1.1 安装前的准备

首先需要在控制面板 -> 程序 -> 启用或关闭Windows功能处开启Hyper-V适用于Windows的Linux子系统,然后重启电脑即可。默认有2个版本,1和2,1是使用和主机相同的 IP 地址;2是更加独立的 Linux 子系统,有单独的 IP 地址,通过 Windows 主机访问互联网,建议安装2,可以用systemd。如果安装2还需要安装一个软件:wsl_update_x64,该软件来自于Windows 官网

1.2 升级 WSL2

设置默认版本:

1
wsl --set-default-version 2

更新版本:

1
wsl --update

这种方式大概率会卡住,建议离线下载安装:microsoft/WSL,下载好后直接双击安装即可。

验证是否安装成功:

1
wsl --version

输入这行指令有这样的输出,表示安装成功:

1
2
3
4
5
6
7
WSL 版本: 2.3.24.0
内核版本: 5.15.153.1-2
WSLg 版本: 1.0.65
MSRDC 版本: 1.2.5620
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26100.1-240331-1435.ge-release
Windows 版本: 10.0.19045.2673

2.WSL 的指令

2.1 常用指令

  • 搜索可安装版本

    1
    wsl --list --online
  • 安装指定的版本

    1
    wsl --install -d Ubuntu
  • 查看安装的版本信息

    1
    wsl -l -v
  • 关闭 wsl

    1
    wsl --shutdown

2.2 备份与还原

下面的一系列操作以发行版Ubuntu-22.04为例。

  • 停止指定的 WSL

    1
    wsl --shutdown
  • 导出(备份)WSL 子系统(需要先停止 WSL 子系统)

    1
    wsl --export Ubuntu-22.04 D:\Ubuntu-22.04.tar

    D:\Ubuntu-22.04.tar是导出的路径。

  • 卸载 WSL 子系统

    1
    wsl --unregister Ubuntu-22.04
  • 导入(还原)WSL 子系统

    1
    wsl --import Ubuntu-22.04 D:\WSL D:\Ubuntu-22.04.tar

    D:\WSL是导入路径,D:\Ubuntu-22.04.tar是前面备份子系统的路径。

还原后的子系统一般默认是root用户,需要修改为其它用户。只要修改还原后的 Linux 子系统中的/etc/wsl.conf配置文件即可,如下:

1
nano /etc/wsl.conf

加入下面的内容:

1
2
[user]
default=用户名

然后按前面的方法进行重启 WSL 子系统即可。

3.WSL 的配置

3.1 启用 systemd

编辑/etc/wsl.conf配置文件。

1
nano /etc/wsl.conf

在文件中添加下面的内容:

1
2
[boot]
systemd=true

3.2 更换内核

在 Windows 下的资源管理器中的地址栏输入%UserProfile%,然后按回车。在里面新建一个.wslconfig文件(如果没有的话)。在文件中天下下面的内容:

1
2
[wsl2]
kernel=e:\\wsl2linuxkernel\\bzImage

这里的e:\\wsl2linuxkernel\\bzImage是内核路径,可以自己编译内核,手动编译内核参考官方仓库:microsoft/WSL2-Linux-Kernel。也可以用仓库里线现成的:Nevuly/WSL2-Linux-Kernel-Rolling

4.释放 WSL 占用的磁盘空间

有时后会发现,你在 WSL 中删掉了一些文件,但是磁盘剩余空间并没有增加。这是因为 WSL 的磁盘是动态扩容的,但不会自动释放。

4.1 操作步骤

  1. 关闭 WSL 中的 Linux 发行版:

    1
    wsl --shutdown
  2. powershell或者cmd中运行管理计算机的驱动器的 DiskPart 命令:

    1
    diskpart
  3. 选择虚拟磁盘文件(根据自己实际情况填写路径):

    1
    select vdisk file="D:\WSL\Ubuntu24.04\ext4.vhdx"
  4. 只读,附加vhdx磁盘镜像文件:

    1
    attach vdisk readonly
  5. 压缩 vhdx 磁盘镜像文件:

    1
    compact vdisk
  6. 分离vhdx磁盘镜像文件:

    1
    detach vdisk
  7. 退出

    1
    exit

    或者按住ctrl+c

4.2 可能出现的问题

1
2
3
4
5
6
7
8
DISKPART> select vdisk file="D:\WSL\Arch\ext4.vhdx"

DiskPart 已成功选择虚拟磁盘文件。

DISKPART> compact vdisk

DiskPart 遇到错误: 由于虚拟磁盘系统限制,无法完成请求的操作。虚拟硬盘文件必须是未压缩和未加密的文件,并且不能是稀疏文件 。
有关详细信息,请参阅系统事件日志。

这说明ext4.vhdx文件可能是 压缩的(compressed)、加密的(encrypted)或稀疏的(sparse),而diskpart要求它是一个普通的未压缩、未加密的 VHDX 文件。因此,compact vdisk失败了。

所以需要 移除压缩、加密和稀疏文件属性 ,然后再尝试compact vdisk

4.3 解决方法

  1. 检查 VHDX 文件属性
    执行以下命令来检查 ext4.vhdx 是否是 稀疏文件、压缩文件或加密文件

检查文件是否被稀疏文件:

1
fsutil sparse queryflag "D:\WSL\Arch\ext4.vhdx"

如果输出:

1
文件 D:\WSL\Arch\ext4.vhdx 是稀疏文件

那么该文件是稀疏文件,需要去掉稀疏标志。

检查文件是否被 NTFS 压缩:

1
compact /q "D:\WSL\Arch\ext4.vhdx"

如果输出类似:

1
2
1 个文件总计 10 GB
8 GB 已压缩

说明该文件已被压缩,需要取消压缩。

检查文件是否被加密:

1
cipher /c "D:\WSL\Arch\ext4.vhdx"

如果输出类似:

1
E  D:\WSL\Arch\ext4.vhdx

说明该文件被加密,需要解密。

  1. 解除压缩、加密和稀疏属性
    执行以下命令,确保 VHDX 文件是普通文件:

取消稀疏文件标志:

1
fsutil sparse setflag "D:\WSL\Arch\ext4.vhdx" 0  

取消 NTFS 压缩:

1
compact /u /q "D:\WSL\Arch\ext4.vhdx"

取消加密:

1
cipher /d "D:\WSL\Arch\ext4.vhdx"
  1. 再次尝试挂载并压缩 VHDX
    执行:
    1
    2
    3
    4
    5
    6
    diskpart
    select vdisk file="D:\WSL\Arch\ext4.vhdx"
    attach vdisk
    compact vdisk
    detach vdisk
    exit

5.参考链接

  • Title: WSL2 的使用教程
  • Author: loskyertt
  • Created at : 2024-11-12 21:16:31
  • Updated at : 2025-01-12 05:32:48
  • Link: https://redefine.ohevan.com/2024/11/12/WSL2教程/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments