如何从 HDD 备份(不是“wsl --export”备份)恢复 WSL2 文件?

Shk*_*rik 5 windows backup windows-subsystem-for-linux wsl2

我遇到了严重的 Windows 10 更新问题,无法进行 Windows 安装。不幸的是,我没有 Windows 备份。

我最终加载到双引导 Ubuntu,使用 dc3dd 备份整个 Windows HDD,重新安装 Windows,然后将 dc3dd 备份恢复到单独的分区中。

这样,我现在可以从新的 Windows 安装中访问所有旧的 Windows 文件。

但我在旧 Windows 上的 WSL2 Ubuntu 中有一些重要的项目,我想恢复它们。显然,如果我有 wsl --export 备份 - 这不会是问题,但我没有。

据我了解,这并不像在旧文件系统深处找到它们那么简单,因为它们存在于某种虚拟机文件中。

那么我该如何处理这个问题呢?

谢谢

Not*_*1ds 6

现在对于 WSL2 来说相当简单。

  1. 首先,您需要ext4.vhdx从这些发行版中找到文件。如果您从 Microsoft Store 安装了该发行版,那么它们将位于:

    <backed_up_drive>\Users\<username>\AppData\Local\Packages\<package_name>\LocalState\ext4.vhdx
    
    Run Code Online (Sandbox Code Playgroud)

    对于 Ubuntu 发行版,软件包名称将以“Canonical”开头。

    ext4.vhdx文件移动到新系统上的某个位置。我用类似的东西:

    $ENV:userprofile\WSL\instances\Ubuntu_22.04_WSL2_Shkarik
    
    Run Code Online (Sandbox Code Playgroud)
  2. 接下来,确保您安装了最新的 Windows 10 更新。然后,您应该能够使用此页面从 Microsoft Store安装 WSL本身。这是比 Windows 10 附带的 WSL 版本更新的版本,并且它具有该选项。--import-in-place

  3. 安装新的 WSL 后,打开 PowerShell(作为普通用户,而不是管理员),导航到放置以下内容的目录ext4.vhdx

    # Import
    # wsl --import-in-place <new_distro_name> <path_to_vhdx>
    
    wsl --import-in-place Ubuntu_22.04_WSL2_Shkarik ./ext4.vhdx
    
    # Optionally, set it as the default, if there are any others installed
    wsl --set-default Ubuntu_22.04_WSL2_Shkarik
    
    # Start it with:
    wsl ~
    # or
    wsl ~ -d Ubuntu_22.04_WSL2-Shkarik
    
    Run Code Online (Sandbox Code Playgroud)
  4. 一旦进入发行版,您将成为 root 用户。您可以根据此答案设置默认用户。

或者,您可以重新安装 Ubuntu,然后将旧的复制ext4.vhdx到新的上。但是,我更喜欢能够选择自己的分发位置和名称(如上所述)。它还可以让您快速安装另一个副本(用于测试),而ubuntu.exe不会干扰您的“日常”文件。