发布于 

WSL2迁移以及空间回收。

# Intro

如果你按照正常方式在设置里移动 wsl 的话就会发现报错,本篇文章向您介绍如何正确迁移以及回收空间。

# 移动

在 Windows 的 PowerShell 中输入:

cmd
1
wsl --help

可以看到关于这个命令的使用帮助说明:

cmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
用法: wsl.exe [参数] [选项...] [命令行]

用于运行 Linux 二进制文件的参数:

如果未提供命令行,wsl.exe 将启动默认的 shell。
--exec, -e <命令行>
执行指定的命令而不使用默认的 Linux shell。
--
按原样传递剩余的命令行。
选项:
--distribution, -d <分发版>
运行指定的分发。
--user, -u <用户名>
以指定用户身份运行。
用于管理适用于 Linux 的 Windows 子系统的参数:

--export <分发版> <文件名>
将分发导出到 tar 文件。
对于标准输出,文件名可以是 -。
--import <分发版> <安装位置> <文件名> [选项]
将指定的 tar 文件作为新分发进行导入。
对于标准输入,文件名可以是 -。
选项:
--version <版本>
指定用于新分发的版本。
--list, -l [选项]
列出分发。
选项:
--all
列出所有分发,包括当前正在
安装或卸载的分发。
--running
只列出当前正在运行的分发。
--quiet, -q
只显示分发名称。
--verbose, -v
显示有关所有分发的详细信息。
--set-default, -s <分发版>
将分发设置为默认值。
--set-default-version <版本>
更改新分发的默认安装版本。
--set-version <分发版> <版本>
更改指定分发的版本。
--shutdown
立即终止所有正在运行的分发和 WSL 2 轻型工具虚拟机。
--terminate, -t <分发版>
终止指定的分发。
--unregister <分发版>
注销分发。
--help
显示用法信息。

这里我们使用到 export 、unregister 和 import 几个选项就可以实现迁移。

  1. 终止正在运行的分发或虚拟机:
    cmd
    1
    wsl --shutdown
  2. 查看已安装的 wsl 名称:
    cmd
    1
    wsl.exe --list --all
    cmd
    1
    2
    3
    4
    适用于 Linux 的 Windows 子系统分发:
    Debian (默认)
    kali-linux
    Ubuntu
  3. 对需要迁移的分发或虚拟机导出(我要迁移 kali-linux):
    cmd
    1
    wsl --export kali-linux D:\kali
  4. 卸载分发版或虚拟机(如果是要重装系统或换机器安装,这一步可以省略,但是要将上一步导出的文件保存好)
    cmd
    1
    wsl --unregister kali-linux
  5. 导入新的分发版或虚拟机:
    cmd
    1
    wsl --import kali-linux D:\wsl\kali D:\kali

# 压缩

等待导入后你会发现移动的其实是 vhdx 文件,那么就可以对这个文件进行回收空间。

  1. 以管理员身份运行 cmd,输入 diskpart 命令按回车。
  2. 使用以下命令选择你的 userdata.vhdx
cmd
1
select vdisk file = "D:\wsl\ext4.vhdx"

如果提示

cmd
1
DiskPart successfully selected the virtual disk file.

就说明成功了。

  1. 输入 compact vdisk 来压缩。

# bug

cmd
1
ERROR: Wsl/Service/CreateInstance/ERROR_FILE_NOT_FOUND

打开命令行,在命令行中输入

cmd
1
2
wsl.exe --list --all
wsl.exe --unregister xxx

# 摘抄

WSL2 迁移方法
解决 Win10 子系统的 Ubuntu 被删除后,重新安装出现找不到系统路径