• wsl2迁移镜像虚拟磁盘


    wsl2备份/迁移(ubuntu…)虚拟磁盘镜像

    Author: once day Date: 2022年11月13日

    1.引言

    默认的wsl2会把Linux子系统虚拟磁盘文件放在C盘下 ,如果在wsl2里面安装了太多的程序,可能空间占用会很大。

    有一种简单的方法是使用LxRunOffline工具迁移。

    但是这里不介绍,直接用wsl命令来实现。

    2.过程
    2.1 查看全部子系统

    需要以管理员权限运行powershell

    PS C:\Users\cg> wsl --list --all --v
    * Ubuntu-20.04           Running         2
      docker-desktop         Stopped         2
      docker-desktop-data    Stopped         2
    
    • 1
    • 2
    • 3
    • 4

    如果子系统正在运行,需要关闭它。

    2.2 关闭子系统

    如下两个命令皆可:

    PS C:\Users\cg> wsl --terminate Ubuntu-20.04
    
    • 1
    PS C:\Users\cg> wsl --shutdown
    
    • 1

    然后再确认一遍是否关闭准备迁移的子系统

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    2.3 导出(备份)子系统

    这里准备备份的子系统是ubuntu-20.04,使用下面命令即可。

    备份的目的路径是E:\Ubuntu-20.04.tar,路径和名字取自己希望值即可。

    PS C:\Users\cg> wsl --export Ubuntu-20.04 E:\Ubuntu-20.04.tar
    
    • 1

    这个过程需要等待一段时间,如果原有的子系统内容很多,那么可能要等待10+分钟

    2.4 注销原有的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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注销完之后,再看列表中的子系统,已经没有ubuntu-20.04了。

    2.5 导入备份的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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    导入过程比较快,然后便可以看到刚刚导入的子系统了。

    如果版本号不对,可以使用下面命令重设版本号。

    PS C:\Users\cg> wsl --set-version Ubuntu-20.04 2
    正在进行转换,这可能需要几分钟时间...
    有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
    该分发已是请求的版本。
    
    • 1
    • 2
    • 3
    • 4
    2.6 设置默认用户名

    如果不设置默认用户名,那么登入wsl2的ubuntu-22.04时,默认以root用户登入。

    一般之间都是默认都不是由root用户登入,所以可以使用下面命令设置默认登入用户。

    ubuntu.exe config --default-user 
    
    • 1

    对于ubuntu-22.04,上面命令改写为:

    ubuntu2004.exe config --default-user "onceday"
    
    • 1

    其中“onceday"也要用你自己的username代替

    2.7 docker connect failed问题

    迁移子系统后,要重启docker desktop应用,此时可能会出现下面问题。

    onceday@ubuntu:~$ docker ps
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    
    • 1
    • 2

    docker确实启动了,但是此时无法连接上docker-server

    这个时候需要在docker-desktop->setting->Resources->WSL INTEGRATION-里面Enable integration with additional distros:中使能Ubuntu-20.04.

    在这里插入图片描述

  • 相关阅读:
    【Java开发岗:MySQL篇】
    uniapp:启动图 .9png 制作教程
    Java如何创建支付接口
    Java之CloneNotSupportedException
    Linux负载CPU、内存、磁盘IO、网络IO状态分析详解
    IEEE 802.11ax High-Efficiency WLANs
    SpringBoot整合POI实现Excel文件读写操作
    设计模式(三十一)----综合应用-自定义Spring框架-自定义Spring IOC-定义解析器、IOC容器相关类
    NK试剂盒使用注意事项及NK细胞培养攻略
    学长告诉我,大厂MySQL都是通过SSH连接的
  • 原文地址:https://blog.csdn.net/Once_day/article/details/127838930