WSL使用问题记录

记录一下使用wsl2的时候遇到的问题和解决方案。

1 更新内核头文件和支持编译ko

复现CVE的时候发现io_uring.h缺失一些宏定义。

参考WSL升级到最新版本Linux内核headers的方法 - 知乎 (zhihu.com)。不要在/mnt目录下编译。

步骤如下:

  1. 使用uname -r查看当前内核的版本
  2. Releases · microsoft/WSL2-Linux-Kernel (github.com)下载对应版本的源码
  3. 解压缩源码tar -zxvf xxxx.tar.gz
  4. 进入源码文件夹,拷贝配置文件cp Microsoft/config-wsl .config
  5. 安装所需依赖sudo apt install libelf-dev build-essential pkg-config bison build-essential flex libssl-dev libelf-dev bc dwarves
  6. 执行命令make oldconfig && make prepare && make scripts && sudo make modules && sudo make modules_install && make headers_install && sudo cp -r ./usr/include/* /usr/include

之后编译ko更改一下include path即可。

如果想编译任意版本的linux ko,需要四步:

  1. 下载对应版本源码
  2. 编译bzImage
  3. make modules
  4. 更改Makefile中的表示kernel include dir的这个变量即可

2 wsl中的runlevel问题

安装一些软件包的时候,会报出一些关于runlevel的错误,这个时候:

1
2
export RUNLEVEL=1
sudo apt install --reinstall xxxx

3 WSL2中安装kali,使用apt install报错

如图所示解决即可:

image-20221128163110588

4 WSL 中挂载windows磁盘的权限问题

有时候需要控制/mnt/x/的权限,需要在对应的操作系统中,新建一个文件/etc/wsl.conf。输入以下内容:

1
2
3
4
[automount]
uid=1000
gid=1000
umask=022

之后就能看到宿主机磁盘文件的权限,属主变成了1000的用户。

主要是为了解决直接从 linux 系统中访问 windows 磁盘文件的权限问题。

5 清空 wsl 的磁盘数据

不管使用的是 wsl 的什么操作系统,或者使用 backendwsldocker desktop,都会生成一个名为 ext4.vhdx 的文件,这个文件随着系统的使用会越来越大,而且只会变大,不会变小。那么,有时候需要在适当的时候压缩一下这个文件,释放出空间。

其实很简单,使用这个命令即可:Optimize-VHD (Hyper-V) | Microsoft Learn

压缩之前,可以先执行一下 docker system prune

然后:wsl.exe --shutdown

然后在 powershell 中执行 Optimize-VHD -Path "YourPath\ext4.vhdx" -Mode Full 修改一下对应的文件路径即可。

之后,就可以完美释放 wsl 使用过程中占用的磁盘空间。

Buy me a coffee~
roderick 支付宝支付宝
roderick 微信微信
0%