小编Dan*_*ert的帖子

尽管“快速删除”,Windows 仍会延迟在小型 USB 驱动器上写入 FAT 表

我看到小容量 FAT(FAT12) 格式的 USB 闪存驱动器上的 FAT 写入延迟,即使驱动器的策略设置为“快速删除”。(我相信这意味着SurpriseRemovalOK设置了标志)。我已经捕获了通过 USB 发送到驱动器的 SCSI 命令:文件截断写入立即发生,然后立即写入整个文件(2 512 字节扇区长),但是在 FAT 之前有 20-90 秒的延迟更新以反映文件写入。

驱动器的大小很重要。我已经在 15MB 或更小的 FAT 文件系统上进行了测试并看到了问题。在 16MB 及以上时,写入不会延迟。当我在 Windows 中格式化驱动器时,16MB 是我在使用 FAT12 和 FAT16 之间看到的断点。(注:但FAT12/FAT16断点取决于簇数,而不是绝对文件系统大小)。

在 16MB 和更大的内存上,WindowsPrevent/Allow Medium Removal在写入之前发送 SCSI命令,要求不要删除该设备。USB 记忆棒实际上会在这些请求上返回失败(因为它不能保证不会移除),但 Windows 无论如何都会尝试。15MB 和更小的跟踪显示没有 Prevent/Allow Medium Removal命令。

(我在使用支持包含 Python 代码的微型 FAT 文件系统的微控制器板时发现了这个问题。当微控制器检测到对文件系统的写入时,它会等待写入完成,然后自动重新启动并运行新编写的 Python 代码。但是由于延迟写入,微控制器看到了损坏的代码或损坏的文件系统。)

尽管设置了“快速删除”,但为什么写入 FAT 会延迟这么长时间?我可以通过在驱动器上执行“弹出”来强制写入,但这违背了“快速删除”的承诺。如果我早点拔出驱动器,它就会有一个不正确的 FAT 表。这掩盖了下面屏幕截图中关于不必使用“安全删除硬件”的声明。这是一个错误还是我错过了什么?有没有办法在没有手动“弹出”的情况下强制所有写入立即发生?

USB 驱动器设置为快速移除

这是从 Wireshark/USBPcap 跟踪中修剪的摘录,显示了该问题。我截断一个现有的文件,然后写一个新的副本。我已经添加了评论###。大多数对 USB 驱动器的写入发生在跟踪的 5 秒左右,但最后的 FAT 写入要到 26 秒。

No.    Time  Source …
Run Code Online (Sandbox Code Playgroud)

windows fat16 usb-flash-drive

10
推荐指数
1
解决办法
529
查看次数

标签 统计

fat16 ×1

usb-flash-drive ×1

windows ×1