我正在寻找一种在导出 WSL2 发行版时对其进行压缩的方法,并尝试通过管道传递生成的 tar 文件wsl
,7z
但大约一个小时后,它只产生了 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