我通过“设置 > 应用 > Ubuntu > 重置”重置了 WSL 上的 Ubuntu。现在 WSL 文件系统中的所有文件都丢失了。我该如何恢复?

我通过“设置 > 应用 > Ubuntu > 重置”重置了 WSL 上的 Ubuntu。现在 WSL 文件系统中的所有文件都丢失了。我该如何恢复?

我在 Windows 上的 WSL2 上使用 Ubuntu(操作系统版本详细信息)我通过以下方式重置了 Ubuntu 应用程序:

设置 > 应用程序 > 应用程序和功能 > Ubuntu > 重置

在“卸载”下提到卸载 WSL 发行版不会影响文件,那么“重置”WSL 发行版真的会删除 WSL 文件系统中的文件吗?我预计 /home 目录文件会保留,但重置后我发现 /home 中什么都没有了。

是否有可能恢复 /home 中的数据?

感谢您回答这个问题。

答案1

遗憾的是,我没有好消息告诉你;只有在重新安装时才有可能给出建议,希望能防止这种情况再次发生。

首先,重置您发布的屏幕截图中的选项确实具体说明了:

如果此应用无法正常运行,请重置它。应用的数据将被删除。

所以是的,重置确实摆脱了整个 Ubuntu WSL 数据(文件系统和注册表数据)。

A维修另一方面,保持 WSL Ubuntu 发行版完整。

重要的提示:这些选项以及设置中这些选项背后的措辞对于所有 Store 应用都是相同的。我知道卸载措辞说:

您的文件不会受到影响。

然而,WSL 安装的处理方式,卸载删除整个实例。文档是文件系统的一部分,卸载时会被删除。

我见过由于其他原因而重置 Store 应用的情况,导致 WSL 数据丢失。出于这个原因(以及更多原因),我建议采取以下措施...

防止卸载和重置删除 WSL 数据

我正在认真考虑尽快制作我的第一个 YouTube 视频。在 WSL 中安装 Ubuntu(或任何其他发行版)时,我做的第一件事就是通过将其“移动”到自己的目录中来“断开”实例与 Store 安装的连接。

默认情况下,WSL 发行版安装到:

%UserProfile%\AppData\Local\Packages\<DistributionPackage>\

这包括虚拟文件系统,可以是:

  • WSL2:..\<DistributionPackage>\LocalState\ext4.vhdx
  • WSL1:..\<DistributionPackage>\LocalState\rootfs\

对于 Ubuntu,该<DistributionPackage>名称将以 开头Canonical并包含Ubuntu在名称中(以及其他标识符)。

值得检查一下该目录是否还在那里。如果是的话,你的数据可以恢复。不过,我认为不太可能。更有可能的是,如果你ubuntu.exe在重置后重新运行,那么它是新的那里的安装。

无论如何,我建议采用此过程来“断开”商店安装,以免再次发生这种情况:

  • 安装 Ubuntu 并配置用户名和密码后。

  • 退出 Ubuntu

  • 从 PowerShell:

    # Confirm the distribution name
    wsl -l -v
    # Distribution name may be "Ubuntu" or "Ubuntu-20.04" - Adjust the following lines accordingly:
    wsl --shutdown
    cd ~\Documents
    mkdir WSL\images
    mkdir WSL\instances\MyUbuntu
    wsl --export Ubuntu WSL\images\ubuntu_clean.tar
    wsl --import MyUbuntu WSL\instances\MyUbuntu WSL\images\ubuntu_clean.tar --version 2
    

    请注意,上面的大多数目录和文件名(以及实例名称)都由您决定。

  • 您现在应该有两个 Ubuntu 安装,您可以通过 进行确认wsl -l -v

  • 使用以下方式启动新版本wsl -d MyUbuntu

  • --imported 实例不会“记住”您的默认用户名(尽管该用户仍然存在)。通过文件设置该实例中的默认用户/etc/wsl.conf这个答案。 具体来说:

    sudo -e /etc/wsl.conf
    

    并添加以下几行:

    [user]
    default=<yourusername>
    
  • 退出实例

  • 再次,从 PowerShell 来看:

    wsl --terminate MyUbuntu
    wsl --set-default MyUbuntu
    
  • 现在,默认实例是MyUbuntu。每当您使用命令启动 WSL 时,它都会启动wsl

  • 卸载 Ubuntu Store。您不必担心它会再次被重置。

如果您确实需要在 Ubuntu 中尝试一些您认为可能会导致问题的操作,请在新的临时实例中执行此操作:

同样,在 PowerShell 中:

cd ~\Documents\WSL
mkdir instances\UbuntuTest
wsl --export MyUbuntu images\current_ubuntu.tar
wsl --import UbuntuTest instances\UbuntuTest images\current_ubuntu.tar --version 2
wsl -d UbuntuTest

这是一个单独的实例,您可以在其中安装、更改配置,尽情发挥。当您使用它时,退出并:

wsl --unregister UbuntuTest

这将删除该测试实例,但保持MyUbuntu不变。

当然,请注意,整个UbuntuTest实例将会消失,因此请确保您不会在那里创建任何长期需要的文档或数据。

相关内容