适用范围:已有 WSL 2 ext4 VHDX 的恢复。先保留原文件的冷备份,并用新的发行版名称验收恢复结果。
ext4.vhdx 包含 WSL 2 发行版的 Linux 文件系统。wsl --import-in-place 会直接注册指定的虚拟硬盘,启动后读写的就是该文件;它不是只读预览,也不会自动为你制作备份。Microsoft WSL 基本命令
一、确认 WSL 与原数据
在 PowerShell 中查看已注册发行版和 WSL 版本:
wsl --version
wsl --list --verbose
新电脑尚未安装 WSL 时,可安装平台而不另装一个 Linux 发行版;根据安装提示重启,再运行 wsl --update。旧版 Windows 或内置 WSL 不支持相关参数时,先按微软的安装与更新文档升级。
wsl --install --no-distribution
wsl --update
如果原发行版仍能运行,优先使用其注册名称导出。以下是 WSL 2 的 VHD 导出示例,目标目录需预先存在且有足够空间:
wsl --shutdown
wsl --export Debian D:\WSL-Backup\debian-export.vhdx --vhd
wsl --shutdown 会停止所有运行中的 WSL 发行版,先保存它们的工作。只有一份遗留 ext4.vhdx 时,也应在 WSL 完全停止后复制它;不要复制正在写入的 VHDX 并将该副本当成可靠备份。
二、复制一份用于恢复,再注册
保留 D:\WSL-Backup\ext4.vhdx 为原始冷备份,以下只将副本交给 WSL。路径和名称是示例,恢复名称必须与已有发行版不同。
$ErrorActionPreference = 'Stop'
$sourceVhd = 'D:\WSL-Backup\ext4.vhdx'
$workingVhd = 'D:\WSL\Debian-Recovered\ext4.vhdx'
if (-not (Test-Path -LiteralPath $sourceVhd -PathType Leaf)) {
throw '原始 VHDX 不存在,请核对路径。'
}
if (Test-Path -LiteralPath $workingVhd) {
throw '目标 VHDX 已存在,请选择新的恢复目录。'
}
wsl --shutdown
if ($LASTEXITCODE -ne 0) {
throw 'WSL 未能停止,请确认所有发行版停止后再复制。'
}
New-Item -ItemType Directory -Path 'D:\WSL\Debian-Recovered' -Force | Out-Null
Copy-Item -LiteralPath $sourceVhd -Destination $workingVhd
wsl --import-in-place Debian-Recovered $workingVhd
if ($LASTEXITCODE -ne 0) {
throw '注册恢复副本失败,请检查错误,不要继续启动。'
}
wsl --list --verbose
wsl --distribution Debian-Recovered --user root
只接受包含 ext4 文件系统的有效 WSL 2 VHDX,不能把任意 Hyper-V 磁盘或 WSL 1 文件夹直接用于此命令。确认启动成功后,检查 /home、项目文件、软件配置和关键文件权限,必要时与备份核对。导入本身成功不代表全部应用与服务已经恢复。
三、恢复默认用户
导入的发行版可能默认以 root 启动。先确认原普通用户仍存在,例如 id alice,再编辑 Linux 内的 /etc/wsl.conf,合并以下部分,不覆盖原有其他配置:
[user]
default=alice
退出 Linux,在 PowerShell 终止新发行版后重新打开:
wsl --terminate Debian-Recovered
wsl --distribution Debian-Recovered
也可以临时用 wsl --distribution Debian-Recovered --user alice。通过导入注册的发行版通常没有商店发行版的专属启动器,不能把 debian config --default-user 当作通用方法。
四、权限或挂载错误
出现 Wsl/Service/CreateInstance/MountVhd/HCS/E_ACCESSDENIED 时,先关闭占用该文件的程序,检查当前 Windows 账户对恢复副本及其父目录是否有访问权限,以及文件是否只读、被加密或被安全软件拦截。可用以下命令只读查看权限:
Get-Acl -LiteralPath 'D:\WSL\Debian-Recovered\ext4.vhdx' | Format-List
Get-Acl -LiteralPath 'D:\WSL\Debian-Recovered' | Format-List
根据实际账户修复 ACL,不向 Everyone 授予整个磁盘的完全控制。文件系统损坏与访问被拒绝不是同一种故障;需要磁盘修复时按微软 VHD 挂载与文件系统修复说明处理恢复副本,保留原始备份。
不要把 wsl --unregister 放在恢复前置步骤。该命令会永久删除已注册发行版的数据,包括其虚拟磁盘。 如果需要替换旧注册名称,先完成新副本的恢复、检查与独立备份,再单独决定是否删除旧发行版;仅有一个遗留 VHDX 时不需要先注销任何发行版。
评论区