WSL2高级使用

1. 安装在其他分区

2021-11-03 官网不提供 zip 文件了,好像不能用这个方法了

应用商店的只能安装在C盘,可以直接下载WSL的文件,解压在其他盘,双击或者命令安装即可

官网下载地址

  • 对于ubuntu20.04直接双击.exe 文件安装即可

  • Debian 需要使用 PowerShell 安装发行版。 只需导航到包含从上面下载的发行版的文件夹,然后在该目录中运行以下命令,其中,app_name 是 distro.appx 文件的名称

    1
    Add-AppxPackage .\app_name.appx

    注意:Debain这样安装还是在 \(C\) 盘,Ubuntu是安装在解压的目录

其他版本未测试

2. 多个WSL2

查看wsl2版本以及正在运行的

1
wsl -l -v

设置默认版本,Ubuntu就是上面那个命令看到的其中一个发行版名字

1
wslconfig /setdefault Ubuntu

3. 压缩储存

WSL随着使用,占用空间会越来越大,即使你删除WSL2里面的文件,体积不会减少!!!

  • 准备

    查看你准备压缩的WSL2名字

    1
    wsl -l -v

    类似如下

    1
    2
    3
    NAME            STATE           VERSION
    * Debian Running 2
    Ubuntu-20.04 Running 2

    并且确保已经删除了无用文件,但是占用体积没有改变,可以进入对应的wsl2,

    然后 sudo su 进入 `root 用户,输入如下,查看实际占用体积,可能比较慢

    1
    du -h --max-depth=1 --exclude=/mnt  / | sort -h

  • 定位虚拟磁盘文件 ext4.vhdx

    如果你要压缩Ubuntu-20.04

    先找到发行版安装位置,定位虚拟磁盘文件 ext4.vhdx 所在,如果你是按照上面的直接下载解压安装在其他盘,找到你解压的位置,如果是在应用商店安装,以ubuntu为例大概在 C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

    使用PowerShell导航到 ext4.vhdx 所在位置

  • 停止准备压缩的发行版

    1
    wsl --shutdown Ubuntu-20.04

  • 压缩

    在PowerShell中输入 diskpart 来启动diskpart工具

    1
    diskpart

    1
    select vdisk file="C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"

    C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx 改为你刚才定位的 ext4.vhdx 的路径

    选中成功的话,输出的文字中有 successfully 字样

    然后压缩,等待结束

    1
    compact vdisk

4. 内存限制

linux会把内存全部缓存,会影响windows10,可以限制wsl最大内存,将 .wslconfig 文件放置在用户文件夹的根目录下(即 C:\Users\<YourUserName>\.wslconfig)来配置全局 WSL 选项,运行 wsl --shutdown 来关闭 WSL 2 虚拟机,重启 WSL 2 ,以确保这些配置生效。

详细的看 官方中文文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[wsl2]
# 自定义 Linux 内核的绝对路径
kernel=<path>
# 给 WSL 2 虚拟机分配的内存大小
memory=<size>
# 为 WSL 2 虚拟机分配的处理器核心数量
processors=<number>
# 为 WSL 2 虚拟机分配的交换空间,0 表示没有交换空间
swap=<size>
# 自定义交换虚拟磁盘 vhd 的绝对路径
swapFile=<path>
# 是否允许将 WSL 2 的端口转发到主机(默认为 true)
localhostForwarding=<bool>

# `<path>` 必须是带反斜杠的绝对路径,例如 `C:\\Users\\kernel`
# `<size>` 必须在后面加上单位,例如 8 GB 或 512 MB

本文作者:yuhldr
本文地址: https://yuhldr.github.io/posts/2411.html
版权声明:转载请注明出处!