我刚刚在机器上安装了 wsl 2(使用 Windows 10 pro)。我下载了 ubuntu 发行版 20.04。我想知道是否可以像在 Vmware 中一样对其进行快照和克隆。谢谢!
答案1
@Esther 提到超级用户的评论很好,但我认为这个问题值得在 Ask Ubuntu 上找到自己的答案。它也需要一个更新答案是因为 WSL 在这方面有新功能。
超级用户问题也仅涵盖克隆/备份,但不是真正的“快照”,我认为“快照”通常意味着“增量”备份。所以我试图在这个答案中也触及了“快照”。
备份 WSL1 或 WSL2 发行版
“备份” WSL1 或 WSL2 发行版的支持机制是使用wsl --export
。与大多数备份一样,最好先关闭正在使用的文件,因此最好从 PowerShell 执行这些操作。
在 WSL 上退出 Ubuntu
从 PowerShell:
wsl -l -v # Confirm your distribution name for the following commands wsl --terminate <distro_name> # Create directory structure, adjust to preference: mkdir "$env:userprofile\WSL\images" # You can hardcode the backup name below if you wish. # This example creates it with a date/timestamp-prefix on the tarball: wsl --export <distroname> "$env:userprofile\WSL\images\$(date -f yyyyMMdd_HHmmss)_Ubuntu.tar"
将先前的备份恢复到新实例(创建克隆实例)
可以使用wsl --import
命令从上一步中的备份创建新实例来创建克隆。
再次,从 PowerShell 来看:
# Adjust paths and names to your preference
mkdir "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone"
wsl --import Ubuntu20.04_TestClone "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone" <path_to_previous_backup.tar> --version 2
WSL 不会“记住” --import
ed 实例的默认用户,因此您需要手动设置。请参阅这个超级用户的回答了解如何使用/etc/wsl.conf
文件执行此操作。
WSL 预览版中 WSL2 的全新、更简短选项
在最新版本的 WSL(目前为预览版)中,有多个附加选项wsl --import
(以及--export
)。
如果你运行的是 Windows 11(我知道你不是,但其他人可能不是,最终你可能也是),那么你可以从 Microsoft Store 安装它。它在那里被列为“Windows 子系统 Linux 预览版”。
使用此版本,您可以直接使用将 VHDX 文件(WSL2 实例的虚拟磁盘)从现有实例导入到新实例中wsl --import --vhd
。首先,您需要知道现有 VHDX 位于何处。
从 PowerShell:
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | ForEach-Object { (Get-ItemProperty $_.PSPATH) | Select-Object DistributionName,BasePath }
然后只需从该位置导入:
# Adjust paths and names to your preference
mkdir "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone"
wsl --import Ubuntu20.04_TestClone "$env:userprofile\WSL\instances\Ubuntu20.04_TestClone" <path_to_main_distro>\ext4.vhdx> --vhd --version 2
请注意,如果您收到以下错误:
The process cannot access the file because it is being used by another process.
...然后按顺序尝试这个:
wsl --terminate <distro>
现有实例,然后重试--import
。- 如果 Docker Desktop 正在运行,请停止它,然后重试
--import
。 wsl --shutdown
,然后重试--import
。
这种方法有一个缺点,即这仅仅是现有 WSL2 vhdx 文件的“副本”。这意味着如果它占用的空间超过所需空间,新映像将具有相同的“浪费空间”(请参阅这个答案了解更多信息)。
增量快照
WSL 尚未提供执行增量快照以节省空间的功能。它可能可以手动将其组合在一起,但我还没有亲自测试过这种技术。从高层次来看,这个想法是:
- 使用 Gnu
tar
的增量转储特征。 - 指定
--one-file-system
并--xattrs
捕获实际文件系统中的正确文件(以及它们的扩展属性,如果在您的发行版中使用的话)。 - 从增量 tarball 重建“非增量” tarball。
- 使用 恢复它
wsl --import
。
我一直想尝试一下,但一直没有时间。