WSL USB 设备消失问题
感谢 Xiaoyu Wang 的分享
现象:WSL2 下,使用 usbipd wsl attach 之后,WSL2 里面可以看到 USB 设备,但拔插一次后,连 Windows 设备管理器里也看不到该设备了。
一、问题原因
1. usbipd 的持久化绑定机制
usbipd 为了让某个 USB 设备能长期共享,会在系统里保存一个 Persisted 记录。一旦设备被标记成共享状态,Windows 本地驱动就不再接管该设备。
2. 异常的残留绑定
当设备更换插口、VID/PID 同类、或者 usbipd 服务异常退出时,持久记录没有同步清理。系统认定该设备仍由 usbipd 接管,于是从设备管理器里"消失",串口号不再出现。
3. 注册表已不是唯一存储位置
新版本 usbipd(5.x 起)不再使用注册表,而是用磁盘文件保存持久化信息。因此,删除旧版注册表路径不会生效,看起来"删不掉 Persisted"。
二、解决方案
方法 1:解绑指定设备
powershell
# 以管理员身份打开 PowerShell,查看所有绑定
usbipd list
# 找到问题设备的 BUSID(如 2-3),解绑
usbipd unbind --busid 2-3解绑后设备会重新出现在设备管理器中。
方法 2:清理所有持久化记录
powershell
# 停止 usbipd 服务
usbipd server stop
# 删除持久化数据库(路径因版本而异)
# usbipd 5.x 默认存储在:
del "%LOCALAPPDATA%\usbipd\usbipd.db"
# 重新启动服务
usbipd server start方法 3:彻底重置
如果以上方法无效,完全卸载并重装 usbipd:
powershell
# 卸载
winget uninstall usbipd
# 清理残留
rmdir /s /q "%LOCALAPPDATA%\usbipd"
# 重新安装
winget install usbipd三、预防建议
- 使用完毕后执行
usbipd wsl detach --busid <BUSID>而非直接拔插 - 避免频繁更换 USB 端口
- 使用固定 USB 端口并记录对应的 BUSID