You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Linux Live USB恢复WSL文件?

如何通过Linux Live USB恢复WSL文件?

别慌,我之前也碰到过类似的糟心情况——Windows崩了没法启动,但WSL里存了重要文件急着要救。咱们一步步来,肯定能把文件找回来!

首先得搞清楚你的WSL是版本1还是版本2,因为这俩的文件存储方式完全不一样:

WSL 1 情况:直接找文件夹就行

WSL1的文件其实就存在Windows系统盘的用户目录里,没有搞虚拟磁盘那套。你在Ubuntu Live USB里挂载好Windows系统盘之后(一般挂载到/mnt/sda1或者类似路径),顺着这个路径找:

/mnt/sda1/Users/<你的Windows用户名>/AppData/Local/Packages/

Packages文件夹里找带你WSL发行版名字的文件夹,比如Ubuntu的话,名字大概是CanonicalGroupLimited.UbuntuonWindows_xxxxxx这样的。进去之后找LocalState/rootfs目录,这里面就是WSL1的整个根文件系统,你要的my-directory-in-wsl肯定就在里面,直接复制到USB stick就行。

WSL 2 情况:需要挂载虚拟磁盘

WSL2的文件是存在一个ext4.vhdx虚拟磁盘文件里,这个文件没法直接在Live系统里浏览,得先把它挂载成可访问的分区才行,步骤如下:

  1. 先安装必要的工具,在Live终端里跑:
sudo apt update && sudo apt install -y qemu-utils
  1. 找到ext4.vhdx的位置,同样从挂载的Windows盘里找:
/mnt/sda1/Users/<你的Windows用户名>/AppData/Local/Packages/<发行版包名>/LocalState/ext4.vhdx

(发行版包名和WSL1的一样,找带发行版名称的文件夹就行)
3. 加载nbd模块来处理虚拟磁盘:

sudo modprobe nbd max_part=8
  1. 把VHDX文件连接到nbd设备:
sudo qemu-nbd --connect=/dev/nbd0 /path/to/ext4.vhdx

(把/path/to/ext4.vhdx换成你实际找到的文件路径)
5. 查看虚拟磁盘里的分区,确认WSL的系统分区:

sudo fdisk -l /dev/nbd0

一般WSL2的VHDX里只有一个ext4分区,就是/dev/nbd0p1
6. 创建挂载点并挂载分区:

sudo mkdir /mnt/wsl
sudo mount /dev/nbd0p1 /mnt/wsl

现在你打开/mnt/wsl就能看到WSL2里的所有文件了,直接把需要的文件夹复制到你的USB stick就行!
7. 操作完别忘了卸载清理:

sudo umount /mnt/wsl
sudo qemu-nbd --disconnect=/dev/nbd0
sudo modprobe -r nbd

为啥你之前用find找不到?

因为WSL2的文件不是直接存在Windows文件系统的文件夹里,而是封装在VHDX虚拟磁盘里,find命令只能扫描当前挂载的文件系统,自然搜不到。必须先挂载这个虚拟磁盘才能访问里面的内容。

最后提醒下:挂载Windows系统盘的时候,可以加上-o ro参数挂载成只读模式,避免不小心破坏Windows里的文件,比如:

sudo mount -o ro /dev/sda1 /mnt/sda1

按照这个步骤来,应该能顺利找回你的文件,祝你成功!

备注:内容来源于stack exchange,提问作者Josh

火山引擎 最新活动