有没有相当于物理拔掉USB设备的命令?

有没有相当于物理拔掉USB设备的命令?

我正在做一些测试,涉及因不安全删除 USB 驱动器而导致的数据损坏,但我需要一种方法来在特定时间一致地删除驱动器。是否有一个命令相当于物理上拉出驱动器而不刷新任何缓冲区或缓存?

答案1

一些(但少数)USB 集线器具有端口电源控制的硬件支持。如果您足够幸运,拥有实现该功能的端口,那么您可以关闭单个端口的电源,以模拟移除插入该端口的设备。

请参阅以下存储库,了解使您能够控制该功能(如果存在)的程序的源代码:https://github.com/codazoda/hub-ctrl.c

答案2

对于此类研究,块设备模拟器可能比真实的 USB 设备效果更好。

应该可以设置虚拟块设备,在其上创建文件系统,将一些文件复制到其中或执行其他写入活动,并随机拍摄设备快照。

诀窍是您需要进入设备并冻结它,然后拍摄快照,而不是在写入发生时读取设备。

如果您可以限制设备的写入速度,也可能会有所帮助。

一些文件系统作者可能已经为这种损坏创建了一个测试平台。 (感谢@Austin Hemmelgam)dm_log_writes设备映射器组件超越了虚拟块设备,为您提供了写入流。您可以轻松地在任何(全部?)点剪切此流并重播它以获取损坏的文件系统。

答案3

(DIY) 硬件解决方案是以编程方式将开关置于 USB 延长线的 5V 线上。我会使用:

  • 一个具有 5V 线圈电压的常闭簧片继电器,当我需要 1-2 位硬件 IO(USB-232 适配器的状态线)时,用我常用的技巧来驱动它。几乎任何编程语言都可以轻松编写。
  • 光隔离器,尽管我使用的那些这个项目是要发射相机(该电路很容易适应)可能无法处理 USB 记忆棒消耗的电流。

相关内容