侧边栏壁纸
博主头像
いちごみるく

行动起来,活在当下

  • 累计撰写 70 篇文章
  • 累计创建 48 个标签
  • 累计收到 55 条评论

目 录CONTENT

文章目录

利用ext4.vhdx(还原/恢复/迁移/启动)WSL2

适用范围:已有 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 时不需要先注销任何发行版。

0

评论区