一、前因后果
前两天我的好大儿RTAkland的树莓派出现了无法正常登录的情况(说是SSH的密钥丢了),然后想到了重做系统,但是里面有一个Gitea服务,想备份出来,然后使用著名的DiskGenius,准备给做一个镜像,但是呢,免费版是不支持此操作的,所以哥们直接上手一个格式化(虽然是这么说但是我不理解),可以发现兄弟也是个Genius(乐),导致项目文件全部丢失,这里虽然有点亡羊补牢的意思,所以留下一个解决方案
数据无价,谨慎操作!! --DiskGenius
二、准备工作
1. 在Windows上打开WSL并将版本设置为WSL2
2.1.1:打开WSL的详细步骤我就不多嘴了,看其他大佬们的精彩内容吧(我不是懒,是不想写)
2.1.2:设置版本为WSL2
BASH
wsl --set-default-version 2
wsl --set-version Debian 2 # 这里的Debian替换为自己安装的发行版,别盲目复制
2. USB 设备连接到 WSL 2 上运行的 Linux 分发版
此处参考文章:微软
2.1.1: 下载并安装usbipd-win 软件,然后重启系统
2.1.2: 重启系统后查看电脑是否有类似火绒安全的软降,如果有请将USB实时防护关闭
三、挂载USB设备到WSL
关闭后,打开Windows Powershell(管理员)输入如下命令:
BASH
PowerShell 7.6.4
PS C:\Windows\System32> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-4 xxxx:xxxx USB2.0 HD UVC WebCam Not shared
1-5 xxxx:xxxx Realtek Bluetooth Adapter Not shared
4-1 xxxx:xxxx USB 大容量存储设备 Not shared
5-3 xxxx:xxxx USB 输入设备 Not shared
5-4 xxxx:xxxx USB 输入设备 Not shared
Persisted:
GUID DEVICE
usbipd: warning: Unknown USB filter 'hrdevmon' may be incompatible with this software; 'bind --force' may be required.
PS C:\Windows\System32>这里的4-1就是目前我插上的U盘
下面的warning就是有火绒的状态,可无视并使用bind --force命令进行强制绑定
BASH
usbipd bind --busid 4-1 -f输入完成后再次运行usbipd list,结果如下
如果STATE显示Shared则代表此设备已经共享了,但是链接WSL还需要两句指令
第一句是打开wsl,打开一个新窗口运行如下指令,
BASH
PowerShell 7.6.4
PS C:\Users\xiaoman1221> wsl
xiaoman1221@xiaoman-LapTop:/mnt/c/Users/xiaoman1221$运行成功后在原来的窗口执行下面的命令:
BASH
PS C:\Windows\System32> usbipd attach --busid 4-1 --wsl Debian
usbipd: info: Selecting a specific distribution is no longer required. Please file an issue if you believe that the default selection mechanism is not working for you.
usbipd: info: Using WSL distribution 'Debian' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Loading vhci_hcd module.
usbipd: info: Detected networking mode 'nat'.
usbipd: info: Using IP address 172.19.144.1 to reach the host.
PS C:\Windows\System32>下面显示地址则代表挂载成功,如果出错请根据错误自行搜索或者查看文章前面的微软官方文档
完成后,如果是Debian则会出现 `lsusb` 命令出现找不到的情况,这时候需要运行安装命令:
BASH
sudo -i
apt update && apt install usbutils -y安装完毕后使用lsusb即可看到你的USB设备,lsblk即可看到具体的设备名
进行mount命令即可完成挂载
BASH
root@xiaoman-LapTop:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 356.9M 1 disk
sdb 8:16 0 159.4M 1 disk
sdc 8:32 0 8G 0 disk [SWAP]
sdd 8:48 0 1T 0 disk /mnt/wslg/distro
/
sde 8:64 1 58G 0 disk
├─sde1 8:65 1 512M 0 part
└─sde2 8:66 1 57.5G 0 part
root@xiaoman-LapTop:~# mount /dev/sde2 /home/xiaoman1221/USB/
然后就可以在Windows资源管理器中查看此USB下的文件(涉及隐私做马赛克处理)
然后该备份的备份,该改文件就改文件(如果更喜欢Linux那就用命令行都行,这里纯个人习惯勿喷)
四、取消挂载USB并让宿主机重新识别
备份/修改 完成后先从Linux中umount此设备
BASH
root@xiaoman-LapTop:~# umount /home/xiaoman1221/USB
root@xiaoman-LapTop:~#然后在Windows Powershell(管理员)窗口中执行下面的命令:
BASH
PS C:\Windows\System32> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-4 xxxx:xxxx USB2.0 HD UVC WebCam Not shared
1-5 xxxx:xxxx Realtek Bluetooth Adapter Not shared
4-1 xxxx:xxxx USB 大容量存储设备 Attached
5-3 xxxx:xxxx USB 输入设备 Not shared
5-4 xxxx:xxxx USB 输入设备 Not shared
Persisted:
GUID DEVICE
usbipd: warning: Unknown USB filter 'hrdevmon' may be incompatible with this software; 'bind --force' may be required.
PS C:\Windows\System32> usbipd detach --busid 4-1
PS C:\Windows\System32> usbipd unbind --busid 4-1
PS C:\Windows\System32> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-4 xxxx:xxxx USB2.0 HD UVC WebCam Not shared
1-5 xxxx:xxxx Realtek Bluetooth Adapter Not shared
4-1 xxxx:xxxx USB 大容量存储设备 Not shared
5-3 xxxx:xxxx USB 输入设备 Not shared
5-4 xxxx:xxxx USB 输入设备 Not shared
Persisted:
GUID DEVICE
usbipd: warning: Unknown USB filter 'hrdevmon' may be incompatible with this software; 'bind --force' may be required.
PS C:\Windows\System32>然后这个设备就会从WSL中移除,并重新挂载至宿主机,教程结束