无需USB启动,如何恢复WSL Ubuntu中被rm -rf命令删除的文件夹?
无需USB启动,如何恢复WSL Ubuntu中被rm -rf命令删除的文件夹?
别急,我来给你几个不用USB启动就能尝试恢复的方法,先得区分你用的是WSL1还是WSL2,因为两者的文件存储机制差异很大,恢复思路也不一样:
首先,紧急操作:停止WSL避免数据覆盖
不管用哪种方法,第一步必须立刻停止WSL,防止新的写入操作覆盖你删除的文件——这是恢复成功的关键!
在Windows命令提示符或PowerShell里执行:
wsl --shutdown
方法一:针对WSL2(最常见的情况)
WSL2的Ubuntu系统数据是存在一个虚拟磁盘文件(.vhdx)里的,我们可以直接在Windows里处理这个镜像文件:
找到VHDX文件的位置
通常路径是:C:\Users\<你的Windows用户名>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu<版本号>LTS_<随机字符串>\LocalState\ext4.vhdx比如Ubuntu20.04的话,路径里的包名是
CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc,你可以在Packages文件夹里找对应Ubuntu的目录。挂载VHDX并使用Windows恢复工具
- 打开Windows的「磁盘管理」(右键开始菜单就能找到),点击顶部的「操作」→「附加VHD」,选中刚才找到的
ext4.vhdx,记得勾选「只读」选项(防止误写入)。 - 用支持ext4文件系统的Windows恢复工具(比如DiskGenius、Recuva这类)扫描这个挂载的虚拟磁盘,找到你删除的
myfoldername文件夹后恢复即可。
- 打开Windows的「磁盘管理」(右键开始菜单就能找到),点击顶部的「操作」→「附加VHD」,选中刚才找到的
WSL内用extundelete工具恢复
如果你更习惯用Linux工具,也可以这样操作:- 按照上面的步骤把VHDX挂载为只读的虚拟磁盘。
- 重新启动WSL,执行
lsblk找到挂载的磁盘(一般是/dev/sdX格式)。 - 把磁盘挂载为只读:
sudo mkdir /mnt/recover sudo mount -o ro /dev/sdX /mnt/recover - 安装extundelete:
sudo apt update && sudo apt install extundelete - 恢复指定文件夹:
sudo extundelete /dev/sdX --restore-directory /home/myusername/myfoldername
恢复的文件会出现在当前目录的
RECOVERED_FILES文件夹里。
方法二:针对WSL1
WSL1的文件是直接存储在Windows文件系统里的,对应的路径一般是:
C:\Users\<你的Windows用户名>\AppData\Local\lxss\home\myusername\myfoldername
这种情况更简单:
- 直接用Windows的恢复工具(比如Recuva、系统自带的「文件历史」如果开启过的话)扫描对应的磁盘分区,找到删除的文件夹恢复即可。
重要提醒
- 所有恢复方法的成功率都取决于删除后是否有大量写入操作,如果删除后你还在WSL里运行过程序、创建过文件,那数据可能已经被覆盖,恢复概率会很低。
- 如果平时有备份习惯(比如定期复制VHDX文件,或者开启Windows文件历史),优先用备份恢复,这是最稳妥的方式。
备注:内容来源于stack exchange,提问作者gmn_1450




