前言
一、启用wsl
二、安装系统
1、使用微软商店
2、使用命令行下载
三、更改wsl版本
四、安装pip(可选)
问题
1、修改安装位置(适用于安装后未启动过wsl的情况)
1、修改权限
2、移动wsl文件
2、wsl文件迁移
3、wsl虚拟磁盘大
4、System has not been booted with systemd as init system (PID 1). Can't operate.
5、wsl与win互连
1、文件
2、ssh
3、软件
总结
前言
注:本人环境win11 22H2家庭中文版,win10默认wsl,需要手动升级到wsl2
没有物理机的情况下,为避免虚拟机额外的性能开销,我们可以使用wsl2直接调用Gpu(Vmware好像也可以做显卡直通)。
微软官方文档点击这里跳转,本文仅挑选必要内容做分析。
关于conda和cuda环境的搭建,直接按照上一期的内容就可以了。
一、启用wsl
搜索Windows功能,勾选适用于Linux的Windows子系统,重启电脑等待更新完成。

二、安装系统
以下方法二选一即可,推荐使用Microsoft Store。
注:默认安装位置在C盘,如需更改请在安装完成后不要启动,按照问题区方法操作
1、使用微软商店
在Microsoft Store中搜索ubuntu ,这里以ubuntu22.04为例。
注:按理说应该先安装下图第一个搜索结果,但实测会自动安装

点击上图所示的结果,点 击 获 取,然后等待安装即可,大约不到500Mb。
2、使用命令行下载
搜索powershell,使用管理员权限打开。

输入以下指令安装,懒人直接第一条就行。
wsl --install #默认安装 WSL 和 Linux 的默认 Ubuntu 发行版
wsl --list --online #获取发行版名称的有效列表
wsl --install
选项包括:
--distribution:指定要安装的Linux发行版。可以通过运行wsl --list --online来查找可用的发行版。
--no-launch:安装Linux发行版,但不自动启动它。
--web-download:通过联机渠道安装,而不是使用Microsoft Store安装。
未安装 WSL 时,选项包括:
--inbox:使用Windows组件(而不是Microsoft Store)安装WSL。(WSL 更新将通过Windows更新接收,而不是通过Microsoft Store中推送的可用更新来接收)。
--enable-wsl1:在安装Microsoft Store版本的 WSL 的过程中也启用“适用于 Linux 的 Windows 子系统”可选组件,从而启用 WSL 1。
--no-distribution:安装WSL时不安装发行版。
注意:如果在 Windows 10 或更低版本上运行 WSL,可能需要在 --install 命令中包含 -d 标志以指定发行版:wsl --install -d
三、更改wsl版本
注:WSL2仅在 Windows 11 或 Windows 10 版本 1903、内部版本 18362 或更高版本中可用。
我们因为需要调用显卡,所以需要切换到wsl2,win11一般默认就是wsl2。关于wsl和wsl的区别,请点击这里。
打开终端,执行以下命令
wsl -l -v #查看wsl当前发行版本名称和运行状态
wsl --set-version
distribution name:上一步查询到的Name
versionNumber:需要修改为的版本,1或者2
四、安装pip (可选)
本人从微软商店下载的ubuntu22.04缺少pip,通过正常方式均无法安装。
以下为解决方案
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py #比较慢,下不动用迅雷
python get-pip.py #此处慢慢等,报错就重试
pip --version #验证安装
问题
1、修改安装位置(适用于安装后未启动过wsl的情况)
1、修改权限
进入C:\Program Files目录,修改windowsapp文件夹权限

更改所有者

输入everyone,点击检查名称,确认即可。

2、移动wsl文件
在Windowsapp文件夹内找到CanonicalGroupLimited.Ubuntu22.04LTS开头的一个文件夹,可能会有三个,我这里因为已经移动了,所以就找不到了,没法截图。
我们进去复制这两个文件,ubuntu2204.exe以及同文件夹下一个0.5G左右的文件(就是最大的那个)。把这俩个文件放到你想要的文件夹,然后双击ubuntu2204.exe,等待启动即可。
注:wsl启动过后移动ext4.vhdx文件会导致报错
2、wsl文件迁移
在wsl正常使用过程中,需要迁移的话,请按照如下方法操作
在终端中执行
wsl --shutdown #关机
wsl -l -v #记下name,并且确认状态是stopped
wsl --export name D:\Ubuntu.tar #name替换为上一步查询的name
wsl --unregister name #name同上
wsl --import name D:\wsl D:\Ubuntu.tar --version 2 #name同上
ubuntu.exe config --default-user user_name #user_name替换为你的wsl内的用户名
3、wsl虚拟磁盘大
这是因为ext4.vhdx磁盘空间会根据加载的数据自动增长,但是无法自动回收。下面是手动回收的步骤。
在终端依次执行以下命令
wsl --shutdown #关闭正在运行的wsl系统
diskpart #跳出授权,选择是
select vdisk file="D:\wsl\ext4.vhdx" #将路径改为你的实际路径
attach vdisk readonly
compact vdisk
detach vdisk
exit
4、System has not been booted with systemd as init system (PID 1). Can’t operate.
这个报错是因为wsl没有启动system导致的。
使用ps -p 1命令,如果cmd列为init 请按照以下步骤操作启用systemd:
确保 WSL 版本为 0.67.6 或更高版本。(若要检查,请运行wsl --version。若要更新,请运行wsl --update或从 Microsoft Store 下载最新版本。)
进入wsl,nano /etc/wsl.conf。
在 wsl.conf 文件中添加以下行
[boot]
systemd=true
退出 Nano 文本编辑器(Ctrl + X,选择 Y 来保存更改)。然后,需要关闭 Linux 发行版。可以使用 PowerShell 中的wsl.exe --shutdown命令关闭所有 WSL 实例。
Linux 发行版重启后,systemd 将会运行。 可使用systemctl list-unit-files --type=service或者ps -p 1命令进行确认,这将显示与 Linux 发行版关联的任何服务的状态。

5、wsl与win互连
1、文件
win的目录在/mnt文件夹下,直接cd过去就行。

win访问wsl文件直接在资源管理器就可以。
2、ssh
mobaxterm和vscode不需要,可以直接连接wsl。
mobaxterm

vscode

如果有其他需求,还是和物理机一样的操作,只是静态ip比较麻烦
sudo apt install openssh-server #安装ssh服务端
sudo service sshd start #开启ssh服务
ifconfig #查看ip
wsl ip是eth0:下第二行inet后的地址。按理说应该是动态ip,不少教程内也都是每次启动就会变ip,但是我这里一个月都没变。于是,摆烂。
3、软件
wsl内安装的有图形界面的软件可以直接在开始菜单找到,直接打开使用即可。
总结
WSL 所需的资源少于完整虚拟机所需的资源(微软说的),但是依赖缺的真的很严重,gcc正在折磨我[大哭]。