导出/导入压缩的 WSL2 发行版

导出/导入压缩的 WSL2 发行版

我正在寻找一种在导出 WSL2 发行版时对其进行压缩的方法,并尝试通过管道传递生成的 tar 文件wsl7z但大约一个小时后,它只产生了 CPU 负载,并且7z根据任务管理器,该进程甚至没有启动:

wsl --export myDistro - | 7z a -tgzip myDistro.tar.gz -si
  • 我尝试通过管道传递一个示例 tar 文件,并且7z没有sample.tar.gz任何问题:
    Get-Content -Path sample.tar -Raw | 7z a -tgzip sample.tar.gz -si
    
  • 我还尝试将发行版导出到文件而不是标准输出,这花费了大约 15 分钟,并且发行版已成功导出:
    wsl --export myDistro .\myDistro.tar
    


我做错了什么?如何将导出的 WSL2 发行版压缩为 gzip 存档而不将 tar 文件存储在磁盘上,以及如何通过管道将其导入wsl --import


正如 @DanielB 注意到的,PowerShell 不会按原样通过管道传输数据(看这里这里,但是命名管道怎么办?

  • 我试图创建一个,但它看起来wsl无法处理命名管道:
    $ New-Object System.IO.Pipes.NamedPipeServerStream("\\.\pipe\wsl-exp-imp"); wsl --export experimentinGentoo '\\.\pipe\wsl-exp-imp'
    
        The system cannot find the file specified.
    


在 Windows 中,是否有办法像mkfifo在 Linux 中一样创建类似文件的命名管道?

答案1

你想要的可以完美运行。在命令提示符中。

当涉及非 Cmdlet 时,PowerShell 中的管道不合理。不要使用它们。如果您想在 PowerShell 中编写脚本,请使用它cmd /c "whatever"转至命令提示符以执行单个命令。

答案2

这是使用动态压缩导出 WSL 发行版的示例。

它比较慢(压缩后为 10G/12min,不压缩后为 10G/8min),但压缩后的大小约为源大小的 1/10。

wsl --export --vhd Ubuntu-18.04 - | "c:\Program Files\7-Zip\7z.exe" a -si -so -tgzip -an -bsp2 > \\\192.168.1.13\d\wsl\Ubuntu-18.04.vhdx.gz

相关内容