aba*_*ter 11 backup windows-backup windows-10 windows-subsystem-for-linux
这篇文章提到了简单地恢复 WSL 目录,部分恢复了 WSL,但存在一些功能问题。这篇文章提供了有关如何备份和恢复 linux 安装的一般信息。这篇文章说 %appdata% 实际上移动到您的 Windows.old 文件夹中,该文件夹在重置后创建并包含您的“旧”文件。) 第一个海报实验中可能丢失了哪些信息?是否有一些注册表设置或配置文件可以让简单地恢复 Linux 根目录 ( %USERPROFILE%/AppData/Local/lxss
) 工作?
编辑
在系统重置或重新安装之前,我的问题被标记为如何备份 (WSL) Linux 子系统 for Windows 10?.
然而,这个问题只是关于如何备份安装——基本上是 tar 并将其保存在某个地方。我明确询问如何恢复它。
这是一个很老的问题,今天被提出来了,自问题提出以来的 4 年里,情况发生了很大变化。实际上,几年前我对我的日常驾驶员进行了“重置”,并遇到了类似的情况。
那时,您真正能做的最好的事情就是从旧文件系统中复制所有数据。当提出这个问题时,该文件系统通常(正如您在问题中提到的)位于%USERPROFILE%\AppData\Local\lxss
. 我会相信你的话,因为我记不太清了,而且我也不再有任何旧的装置了。
在某些时候,可能当 WSL 开始支持多个发行版时,WSL1 文件夹更改为%USERPROFILE%\AppData\Local\Packages\<PackageName>\LocalState\rootfs
. 几年前,当我在 PC 上进行重置时,我修复了tar
该目录,然后在重置和 WSL 重新安装后恢复了各个文件(但不是整个文件系统,如您所要求的)。我没有考虑Windows.old
,但这也是获取这些文件的有效方法。
如今,是的,在进行重置之前wsl --export
,可以按照此处另一个答案中提到的方式执行 a 。
但如果用户不想这样做,在重置后仍然可以使用Windows.old
. 有两种情况:
WSL2 使这变得相当容易,因为整个文件系统都存储在%USERPROFILE%\AppData\Local\Packages\<PackageName>\LocalState\rootfs\ext4.vhdx
. 有关详细信息,请参阅此答案,但您基本上可以将其复制ext4.vhdx
到Windows.old
新安装中。
借助 WSL1,我有90% 的信心可以Windows.old
使用以下方法恢复 WSL 安装。
首先,从商店安装发行版。我知道,您想恢复旧安装,但我们将使用这个新安装来做到这一点。当我们完成后,您可以随时卸载商店发行版。
启动该发行版。
/etc/wsl.conf
使用以下内容创建:
[automount]
options = "metadata"
Run Code Online (Sandbox Code Playgroud)
下一个,
cd /mnt/C/Windows.old/Users/<yourusername>/AppData/Local/Packages/<PackageName>/LocalState/rootfs
Run Code Online (Sandbox Code Playgroud)
<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
。该命令还可以选择使用 a --version 1/2
(在末尾)来强制使用 WSL 版本。
如果需要,请将此设置为默认的 WSL 安装wsl --set-default OldUbuntu
。
使用 启动发行版wsl ~ -d OldUbuntu
。-d/--distribution
仅当您未将其设置为上面的默认值时,才需要该参数。
创建一个/etc/wsl.conf
包含以下内容的文件:
[user]
default=username
Run Code Online (Sandbox Code Playgroud)
在重置 Windows 之前,将其编辑username
为您在发行版中的用户名。
(可选)卸载我们安装并用于创建 tarball 的发行版。
应该是这样。我实际上已经用稍微不同的场景对此进行了测试。我安装了一个 WSL1 实例,然后从另一个实例对其执行了上述过程。--import
经过上述步骤后,我成功了。文件/目录所有权和权限看起来是正确的,符号链接也是如此。我唯一关心的是真正旧的 WSL 发行版是否可能使用不同的元数据。
警告:如果您没有其他方法来恢复,请仅在 WSL1 文件系统上尝试此操作。%AppData%
已知通过(或等效方式)访问 WSL1 文件系统中的文件会导致损坏。这就是为什么我自己创建了一个一次性实例来尝试这一点。
旁注:您可能会考虑从 Windows 内部tar
导入文件Windows.old
,而不是经历安装另一个 WSL 实例的麻烦。我担心的是,这不会捕获Linux所有权和权限,这可能会导致安装时损坏wsl --import
。
归档时间: |
|
查看次数: |
2380 次 |
最近记录: |