备份和恢复WSL(Windows Subsystem for Linux)实例

备份和恢复WSL(Windows Subsystem for Linux)实例

一、备份WSL实例

步骤1:查看当前WSL实例

首先,确认你要备份的WSL实例名称:

wsl --list --verbose

输出示例

NAME                   STATE           VERSION
* Debian               Running         2
Ubuntu                 Stopped         2

步骤2:停止WSL实例(可选但推荐)

为避免备份时数据不一致,建议先停止目标实例:

wsl --terminate Debian   # 将 Debian 替换为你的实例名称

步骤3:导出(备份)WSL实例

使用 wsl --export 命令将实例导出为 .tar 文件:

# 语法:wsl --export <实例名称> <备份文件路径>
wsl --export debian c:\wsl_backups\debian_$(Get-Date -Format "yyyyMMdd").tar
  • 实例名称:从 wsl --list 中获取(如 Debian
  • 备份文件路径:选择一个安全的位置存储备份(建议使用绝对路径)

步骤4:验证备份文件

备份完成后,检查文件是否存在且大小合理:

# 查看备份文件大小
Get-Item D:\WSL-Backups\debian_*.tar | Select-Object Name, Length

二、恢复WSL实例

步骤1:导入(恢复)WSL实例

使用 wsl --import 命令从备份文件恢复实例:

# 语法:wsl --import <新实例名称> <安装目录> <备份文件路径> [--version <WSL版本>]
wsl --import Debian-Restored c:\WSL\Debian c:\WSL-Backups\debian_*.tar --version 2
  • 新实例名称:恢复后的实例名称(如 Debian-Restored
  • 安装目录:指定WSL实例的安装位置(需是空目录)
  • --version:指定WSL版本(1或2),建议与原实例版本一致

步骤2:启动恢复的实例

wsl -d Debian-Restored

步骤3:验证恢复结果

在恢复的实例中检查数据是否完整:

# 检查文件和目录
ls -la

# 检查已安装的软件
dpkg --list | head -20

三、高级操作

1. 备份特定文件或目录

如果只需备份部分数据(如项目文件),可以直接复制到Windows目录:

# 在WSL中执行,将文件复制到Windows目录
cp -r /home/liang/trae_projects /mnt/d/backup/

2. 自动备份脚本

创建PowerShell脚本自动执行备份:

# backup-wsl.ps1
$distro = "Debian"
$backupDir = "C:\WSL-Backups"
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
$backupFile = "$backupDir\$distro-backup-$timestamp.tar"

# 创建备份目录
if (-not (Test-Path $backupDir)) {
    New-Item -ItemType Directory -Path $backupDir -Force
}

# 停止实例
wsl --terminate $distro

# 导出备份
wsl --export $distro $backupFile

# 验证备份
if (Test-Path $backupFile) {
    Write-Host "备份成功:$backupFile"
    Write-Host "文件大小:$(Get-Item $backupFile).Length / 1GB GB"
} else {
    Write-Host "备份失败"
}

运行脚本

.\backup-wsl.ps1

四、注意事项

  1. 备份前清理:备份前建议清理临时文件和日志,减少备份文件大小。
  2. 存储位置:将备份文件存储在外部硬盘或云存储中,以防本地磁盘故障。
  3. 定期备份:建议每周或每月定期备份,特别是在重要更改前。
  4. 版本兼容:恢复时确保WSL版本(1或2)与原实例一致,避免兼容性问题。
  5. 权限问题:恢复后可能需要重新设置用户权限,特别是如果使用非默认用户。