我通过 \wsl.localhost\Ubuntu\home\user.ssh 访问了我的 Ubuntu 挂载并删除了一个我不应该拥有的私钥。
我不确定 Windows 是否将文件扔进了回收站,所以我首先尝试了 recuva,但没有成功。
当谈到 Linux 和已删除的文件时,我读到的所有其他内容都是关于卸载驱动器并运行 extundelete 或 photorec。
我该如何从 WSL 挂载恢复文件?
答案1
当然,恢复已删除的文件永远不是肯定的。删除后您使用文件系统的次数越少,恢复的可能性就越大。
您尝试的方式取决于您的实例是 WSL1 还是 WSL2。使用以下命令从 PowerShell 仔细检查:
wsl --shutdown # To make sure we stop writing to any potential filesystem
wsl -l -v
对于 WSL2
不幸的是,我对以下说明的测试没有成功。这可能是由于 vhdx 文件在 WSL2 下的工作方式存在根本差异,也可能是它们的安装方式。我在这里留下这些说明,希望您或其他人能够确定哪些其他操作可能会使其成功。
文件系统存储在虚拟磁盘中ext4.vhdx
。在默认的 Ubuntu/WSL2 安装中,您会在 下找到它%userprofile%\AppData\Local\Packages\CanonicalGroupLimited<...>\LocalState\ext4.vhdx
。
将此文件复制到另一个位置。这是您将用于尝试恢复的副本。最好给它命名recovery.vhdx
以避免混淆。
下一步取决于您的 Windows 版本。在 Windows 11 下这肯定是最简单的。
对于 Windows 10 Home 来说,这会很困难。最好将 vhdx 文件复制到 USB 驱动器,看看是否可以访问 Windows 11(任何版本)或 Windows 10 Pro 或更高版本的系统。
话虽如此,可能的,但我自己从来没有这样做过。你需要:
安装虚拟机,例如 VirtualBox 或 VMWare。这可能需要在“设置”中的“打开或关闭 Windows 功能”中禁用 WSL2(“虚拟机管理器”)。
在虚拟机中安装 Linux 客户操作系统(例如 Ubuntu)
安装
libguestfs-tools
后,您可以在 Linux 中挂载 vhdx 文件(请参阅这个 Ask Ubuntu 答案等等)。挂载 vhdx
运行您在问题中提到的恢复工具。
Windows 10 Pro 或更高版本:同样不是一个有趣的选择,但您可以在不禁用 WSL2 的情况下在那里安装 Hyper-V。然后按照上述步骤安装客户 Linux 操作系统。
如果你使用的是 Windows 11,则可以利用 WSL 的预览版,其中包括将 vhdx 文件直接挂载到 WSL2 中的功能(稍后阅读本文的人请注意 - 它可能会在那时发布,因此你可以跳过下面的第一步):
安装“Windows 子系统 Linux 预览版”来自 Microsoft Store。
从 PowerShell 发出
wsl --mount <path_to>\recovery.vhdx --vhd --bare
。不要在您的“实时”Ubuntu 上执行此操作ext4.vhdx
;仅在您制作的备份上执行此操作。该--bare
选项会附加磁盘,但不会挂载它。运行您现有的 Ubuntu 实例。
安装并运行恢复工具,例如您在问题中提到的那些。
安装恢复工具
WSL1
数据存储在LocalState
与上面提到的 WSL2 位于同一目录中的覆盖文件系统中ext4.vhdx
。
此目录中的文件应该不是可以直接在 Windows 中访问,因为它可能会导致额外的数据丢失。
但是,如果从 WSL1 中删除文件,则可能仍然可以从 NTFS 磁盘中恢复删除。 视窗在这种情况下应该尝试使用恢复工具。
答案2
这非常有用,但据我所知,在 VM 中安装 vhdx 不允许 extundelete 等工具访问数据。
我改为将 vhdx 作为第二个硬盘安装在 Ubuntu VM 上,因为 HyperV 可以将 vhdx 文件安装到 VM。我能够通过这种方式使用 extundelete 扫描驱动器,因为虚拟驱动器显示为 /dev/sdb。不需要 libguestfs-tools。
不幸的是,我的文件无法恢复,但我能够从驱动器中恢复其他文件,因此这种方法似乎是合理的。