Author: once day Date: 2022年11月13日
默认的wsl2会把Linux子系统虚拟磁盘文件放在C盘下 ,如果在wsl2里面安装了太多的程序,可能空间占用会很大。
有一种简单的方法是使用LxRunOffline工具迁移。
但是这里不介绍,直接用wsl命令来实现。
需要以管理员权限运行powershell。
PS C:\Users\cg> wsl --list --all --v
* Ubuntu-20.04 Running 2
docker-desktop Stopped 2
docker-desktop-data Stopped 2
如果子系统正在运行,需要关闭它。
如下两个命令皆可:
PS C:\Users\cg> wsl --terminate Ubuntu-20.04
PS C:\Users\cg> wsl --shutdown
然后再确认一遍是否关闭准备迁移的子系统。
PS C:\Users\cg> wsl --list --all --v
NAME STATE VERSION
* docker-desktop Stopped 2
Ubuntu-20.04 Stopped 2
docker-desktop-data Stopped 2
这里准备备份的子系统是ubuntu-20.04,使用下面命令即可。
备份的目的路径是E:\Ubuntu-20.04.tar,路径和名字取自己希望值即可。
PS C:\Users\cg> wsl --export Ubuntu-20.04 E:\Ubuntu-20.04.tar
这个过程需要等待一段时间,如果原有的子系统内容很多,那么可能要等待10+分钟。
ubuntu-20.04子系统PS C:\Users\cg> wsl --unregister Ubuntu-20.04
PS C:\Users\cg> wsl --list --all --v
NAME STATE VERSION
docker-desktop Stopped 2
docker-desktop-data Stopped 2
注销完之后,再看列表中的子系统,已经没有ubuntu-20.04了。
ubuntu-20.04子系统上面的导出过程本质上也是给ubuntu-20.04做了一个备份,里面存储了全部内容。
因此这里实际上在导入一个备份。
首先确定目的文件夹,如果目录不存在,需要手动创建。这里目的目录为E:\ubuntu\。然后该子系统的虚拟磁盘文件就会放在此目录下。
PS C:\Users\cg> wsl --import Ubuntu-20.04 E:\ubuntu\ E:\Ubuntu-20.04.tar --version 2
PS C:\Users\cg> wsl --list --all --v
NAME STATE VERSION
* docker-desktop Stopped 2
Ubuntu-20.04 Stopped 2
docker-desktop-data Stopped 2
导入过程比较快,然后便可以看到刚刚导入的子系统了。
如果版本号不对,可以使用下面命令重设版本号。
PS C:\Users\cg> wsl --set-version Ubuntu-20.04 2
正在进行转换,这可能需要几分钟时间...
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
该分发已是请求的版本。
如果不设置默认用户名,那么登入wsl2的ubuntu-22.04时,默认以root用户登入。
一般之间都是默认都不是由root用户登入,所以可以使用下面命令设置默认登入用户。
ubuntu.exe config --default-user
对于ubuntu-22.04,上面命令改写为:
ubuntu2004.exe config --default-user "onceday"
其中“onceday"也要用你自己的username代替。
迁移子系统后,要重启docker desktop应用,此时可能会出现下面问题。
onceday@ubuntu:~$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
docker确实启动了,但是此时无法连接上docker-server。
这个时候需要在docker-desktop->setting->Resources->WSL INTEGRATION-里面Enable integration with additional distros:中使能Ubuntu-20.04.
