这个帖子提到简单地恢复 WSL 目录可以部分恢复 WSL,但存在一些功能问题。这个帖子提供如何备份和恢复 Linux 安装的一般信息。这个帖子表示 %appdata% 实际上已移至您的 Windows.old 文件夹,该文件夹是在重置后创建的,包含您的“旧”文件。)在第一个发帖人的实验中可能丢失了哪些信息?是否有一些注册表设置或配置文件允许简单地恢复 Linux 根目录 ( %USERPROFILE%/AppData/Local/lxss
) 以工作?
编辑
我的问题被标记为重复如何在系统重置或重新安装之前备份 Windows 10 的(WSL)Linux 子系统?。
但是那个问题只是关于如何备份安装 - 基本上就是将其打包并保存在某处。我明确询问如何恢复它。
答案1
今天被提出的一个非常老的问题,自提出这个问题以来的 4 年里情况发生了很大变化。几年前,我实际上对我的日常驾驶进行了“重置”,也遇到了类似的情况。
那时,你能做的最好的事情就是复制任何数据脱离旧文件系统。当提出这个问题时,该文件系统通常(如您在问题中提到的)位于 下的某个位置%USERPROFILE%\AppData\Local\lxss
。我相信您的话,因为我记不清具体位置了,而且我不再有那么旧的安装。
在某个时候,可能是当 WSL 开始支持多个发行版时,WSL1 文件夹更改为%USERPROFILE%\AppData\Local\Packages\<PackageName>\LocalState\rootfs
。几年前,当我重置 PC 时,我确实备份了tar
该目录,然后在重置和重新安装 WSL 后恢复了单个文件(但不是整个文件系统,正如您所问的那样)。我没有考虑Windows.old
,但这也是获取这些文件的有效方法。
如今,是的,前进行重置,wsl --export
可以按照此处其他答案中提到的方式执行。
但如果用户没有想到这么做,可能重置后仍有可能使用 完全恢复文件系统Windows.old
。有两种情况:
WSL2 使这变得相当容易,因为整个文件系统都存储在虚拟驱动器中
%USERPROFILE%\AppData\Local\Packages\<PackageName>\LocalState\rootfs\ext4.vhdx
。请参阅这个答案了解详细信息,但基本上您可以将其从新安装中复制ext4.vhdx
出来Windows.old
并放入新安装中。使用 WSL1,我90% 有信心您可以
Windows.old
使用以下方法恢复 WSL 安装。首先,从商店安装发行版。我知道,你想恢复你的老的安装,但我们将使用此新安装来执行此操作。完成后,您可以随时卸载 Store 分发版。
启动该分发。
/etc/wsl.conf
使用以下内容创建:[automount] options = "metadata"
下一个,
cd /mnt/C/Windows.old/Users/<yourusername>/AppData/Local/Packages/<PackageName>/LocalState/rootfs
<PackageName>
取决于您的发行版,但Canonical...
对于 Ubuntu 发行版,将从 开始。如果您的 WSL 安装足够旧,则可能是/mnt/C/Windows.old/Users/<yourusername>/AppData/Local/lxss
。当您ls
在那里执行此操作时,您希望查看/
该安装的目录。在该目录中,
tar cvf recovery.tar .
。WSL1 安装需要一段时间。sudo mv recovery.tar <somewhere>
驱动器上的其他位置C:
;类似于/mnt/c/Users/<youruser>/Documents/wsl
(它接近我为此使用的位置)。完成后,这将是分发的新位置。退出 WSL
从 PowerShell 中,导航到放置 的目录
recovery.tar
。mkdir OldUbuntu
(或任何你想叫的名字)wsl --import OldUbuntu .\OldUbuntu .\recovery.tar
。该命令还可以选择--version 1/2
在末尾添加一个 ,以强制使用 WSL 版本。如果需要,请使用 将其设为您的默认 WSL 安装
wsl --set-default OldUbuntu
。使用 启动发行版
wsl ~ -d OldUbuntu
。-d/--distribution
仅当您未将其设置为上面的默认值时才需要该参数。创建一个
/etc/wsl.conf
包含以下内容:[user] default=username
编辑
username
为您重置 Windows 之前发行版中的用户名。可选择卸载我们安装并用于创建 tarball 的发行版。
应该就是这样。我实际上已经用稍微不同的场景测试了这一点。我安装了一个 WSL1 实例,然后从另一个实例上执行了上述过程。
--import
完成上述步骤后,我能够成功完成。文件/目录所有权和权限看起来是正确的,符号链接也是如此。我唯一担心的是,一个非常旧的 WSL 发行版是否可能使用不同的元数据。警告:如果您没有其他方法可以恢复它,请仅在 WSL1 文件系统上尝试此操作。通过
%AppData%
(或等效方式)访问 WSL1 文件系统中的文件是已知会导致腐败。这就是为什么我自己创建了一个一次性实例来尝试这一点。边注:您可能会考虑从 Windows 内部
tar
导入文件Windows.old
,而不是经历安装另一个 WSL 实例的麻烦。我担心的是,这不会捕获Linux所有权和权限,这可能会导致安装损坏wsl --import
。